Neues Maven-Modul pdf-umbenenner-adapter-in-scheduler anlegen

Erzeugt das Modul-Gerüst für den autonomen Scheduler-Adapter:
- pom.xml mit Abhängigkeit auf pdf-umbenenner-application (kein Bootstrap,
  kein JavaFX, kein Shade-Plugin); flatten-maven-plugin und PIT werden mit
  bewusstem Kommentar vom Parent geerbt; JaCoCo-Schwellwerte temporär auf 0
- package-info.java für das Paket de.gecheckt.pdf.umbenenner.adapter.in.scheduler
- SchedulerPlaceholder.java als temporäre Kompilierplatzhalter-Klasse
- Modul in der Parent-pom.xml zwischen adapter-in-gui und adapter-out registriert

Die Abhängigkeitsrichtung (adapter-in-scheduler → application → domain)
verhindert den zyklischen Bezug: Bootstrap wird in einem späteren Schritt
auf dieses Modul angewiesen sein, nicht umgekehrt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-06 12:21:05 +02:00
parent 791499169f
commit 93a2473c36
4 changed files with 177 additions and 0 deletions
+151
View File
@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>de.gecheckt</groupId>
<artifactId>pdf-umbenenner-parent</artifactId>
<version>${revision}</version>
</parent>
<artifactId>pdf-umbenenner-adapter-in-scheduler</artifactId>
<packaging>jar</packaging>
<!--
Inbound-Adapter: autonomer Scheduler-Betrieb.
Abhängigkeitsrichtung (hexagonale Architektur):
adapter-in-scheduler → application → domain
KEIN Rückwärtsverweis auf pdf-umbenenner-bootstrap: das Bootstrap-Modul
verdrahtet den Scheduler und hängt selbst von diesem Modul ab eine
umgekehrte Abhängigkeit würde einen Zyklus erzeugen.
ApplicationRunContext (package-private im Bootstrap-Modul) ist von hier
aus nicht direkt erreichbar. Die Schnittstelle zwischen Bootstrap und
diesem Modul wird über das BatchRunTrigger-Functional-Interface realisiert,
das im Bootstrap-Modul liegt und beim Start injiziert wird.
JavaFX ist bewusst ausgeschlossen: dieser Adapter läuft ohne Benutzeroberfläche.
maven-shade-plugin ist bewusst ausgeschlossen: das ausführbare JAR wird
ausschließlich im Bootstrap-Modul per Shade-Plugin erzeugt.
-->
<dependencies>
<!-- Interner Abhängigkeiten: Inbound-Adapter bezieht Ports und Use-Cases
ausschließlich aus der Application-Schicht -->
<dependency>
<groupId>de.gecheckt</groupId>
<artifactId>pdf-umbenenner-application</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<!-- Test-Abhängigkeiten -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--
flatten-maven-plugin: wird vom Parent geerbt und löst ${revision} in
installierten POMs auf. Keine eigene Konfiguration erforderlich
der Eintrag ist nur zur bewussten Dokumentation dieser Erbschaftsentscheidung
vorhanden.
-->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>jacoco-check</id>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
<configuration>
<!--
Dieses Modul enthält in der aktuellen Ausbaustufe ausschließlich
eine Platzhalter-Klasse. Die Coverage-Schwellwerte werden auf 0
gesetzt und mit jedem Implementierungsschritt nachgezogen.
-->
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>COVEREDRATIO</value>
<minimum>0.00</minimum>
</limit>
<limit>
<counter>BRANCH</counter>
<value>COVEREDRATIO</value>
<minimum>0.00</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<executions>
<execution>
<id>pitest</id>
<phase>verify</phase>
<goals>
<goal>mutationCoverage</goal>
</goals>
<configuration>
<!--
PIT wird für diesen Adapter explizit deaktiviert. Der Parent
setzt skip=true als Standardwert; hier wird das bewusst
wiederholt dokumentiert. Mutations-Tests werden erst
aktiviert, wenn echte Produktionslogik vorliegt.
-->
<skip>true</skip>
<coverageThreshold>0</coverageThreshold>
<mutationThreshold>0</mutationThreshold>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,15 @@
package de.gecheckt.pdf.umbenenner.adapter.in.scheduler;
/**
* Platzhalter-Klasse, die sicherstellt, dass der Compiler das Modul
* nicht als leer behandelt.
* <p>
* Diese Klasse wird durch die echte Adapter-Implementierung ersetzt,
* sobald der Scheduler-Adapter implementiert wird.
*/
class SchedulerPlaceholder {
private SchedulerPlaceholder() {
// Nicht instanziierbar; wird durch echte Klassen ersetzt.
}
}
@@ -0,0 +1,10 @@
/**
* Inbound-Adapter für den autonomen Scheduler-Betrieb.
* <p>
* Dieses Paket enthält den Adapter, der die periodische automatische
* Verarbeitung von PDF-Dateien ohne Benutzerinteraktion steuert.
* Der Adapter wird durch das Bootstrap-Modul verdrahtet und gestartet.
* Er ist ausschließlich vom Application-Modul abhängig und kennt weder
* JavaFX noch Bootstrap-interne Typen.
*/
package de.gecheckt.pdf.umbenenner.adapter.in.scheduler;
+1
View File
@@ -12,6 +12,7 @@
<module>pdf-umbenenner-application</module>
<module>pdf-umbenenner-adapter-in-cli</module>
<module>pdf-umbenenner-adapter-in-gui</module>
<module>pdf-umbenenner-adapter-in-scheduler</module>
<module>pdf-umbenenner-adapter-out</module>
<module>pdf-umbenenner-bootstrap</module>
<module>pdf-umbenenner-coverage</module>