diff --git a/.gitignore b/.gitignore index 779ffa4..7032568 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ # ========================================================= **/target/ dependency-reduced-pom.xml +# Generierte Flat-POM-Dateien des flatten-maven-plugin (CI-friendly Versioning) +**/.flattened-pom.xml # ========================================================= # Eclipse / IDE diff --git a/pdf-umbenenner-adapter-in-cli/pom.xml b/pdf-umbenenner-adapter-in-cli/pom.xml index 8d37bac..a420180 100644 --- a/pdf-umbenenner-adapter-in-cli/pom.xml +++ b/pdf-umbenenner-adapter-in-cli/pom.xml @@ -4,7 +4,7 @@ de.gecheckt pdf-umbenenner-parent - 0.0.1-SNAPSHOT + ${revision} pdf-umbenenner-adapter-in-cli jar diff --git a/pdf-umbenenner-adapter-in-gui/pom.xml b/pdf-umbenenner-adapter-in-gui/pom.xml index 9aa6e7c..a6923d0 100644 --- a/pdf-umbenenner-adapter-in-gui/pom.xml +++ b/pdf-umbenenner-adapter-in-gui/pom.xml @@ -5,7 +5,7 @@ de.gecheckt pdf-umbenenner-parent - 0.0.1-SNAPSHOT + ${revision} pdf-umbenenner-adapter-in-gui jar diff --git a/pdf-umbenenner-adapter-out/pom.xml b/pdf-umbenenner-adapter-out/pom.xml index 3899129..3237497 100644 --- a/pdf-umbenenner-adapter-out/pom.xml +++ b/pdf-umbenenner-adapter-out/pom.xml @@ -4,7 +4,7 @@ de.gecheckt pdf-umbenenner-parent - 0.0.1-SNAPSHOT + ${revision} pdf-umbenenner-adapter-out jar diff --git a/pdf-umbenenner-application/pom.xml b/pdf-umbenenner-application/pom.xml index 2729fac..89299a1 100644 --- a/pdf-umbenenner-application/pom.xml +++ b/pdf-umbenenner-application/pom.xml @@ -6,7 +6,7 @@ de.gecheckt pdf-umbenenner-parent - 0.0.1-SNAPSHOT + ${revision} pdf-umbenenner-application jar diff --git a/pdf-umbenenner-bootstrap/pom.xml b/pdf-umbenenner-bootstrap/pom.xml index eb787e0..81948ae 100644 --- a/pdf-umbenenner-bootstrap/pom.xml +++ b/pdf-umbenenner-bootstrap/pom.xml @@ -4,7 +4,7 @@ de.gecheckt pdf-umbenenner-parent - 0.0.1-SNAPSHOT + ${revision} pdf-umbenenner-bootstrap jar @@ -105,6 +105,11 @@ de.gecheckt.pdf.umbenenner.bootstrap.PdfUmbenennerApplication + + + ${revision} + PDF KI Renamer + diff --git a/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/ApplicationVersionProvider.java b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/ApplicationVersionProvider.java new file mode 100644 index 0000000..d597d02 --- /dev/null +++ b/pdf-umbenenner-bootstrap/src/main/java/de/gecheckt/pdf/umbenenner/bootstrap/ApplicationVersionProvider.java @@ -0,0 +1,45 @@ +package de.gecheckt.pdf.umbenenner.bootstrap; + +/** + * Liest die Anwendungsversion aus dem MANIFEST.MF des ausführbaren Fat-JARs. + *

+ * Im gepackten Betrieb wird der Eintrag {@code Implementation-Version} aus dem + * JAR-Manifest gelesen, der beim Build durch das Shade-Plugin befüllt wird. + * Im IDE-Betrieb und in Testumgebungen ohne gepacktes JAR steht kein Manifest + * zur Verfügung; in diesem Fall wird der Fallback {@code "dev"} zurückgegeben. + *

+ * Diese Klasse ist eine reine Hilfsklasse ohne Zustand; alle Methoden sind statisch. + * Die Verdrahtung mit der GUI-Statuszeile erfolgt in einer späteren Ausbaustufe. + */ +public final class ApplicationVersionProvider { + + /** Fallback-Version, wenn kein Manifest-Eintrag verfügbar ist. */ + private static final String FALLBACK_VERSION = "dev"; + + /** Utility-Klasse – kein öffentlicher Konstruktor. */ + private ApplicationVersionProvider() { + // nicht instanziierbar + } + + /** + * Gibt die Anwendungsversion zurück. + *

+ * Die Version wird aus dem {@code Implementation-Version}-Eintrag des Pakets + * {@code de.gecheckt.pdf.umbenenner.bootstrap} gelesen. Dieser Eintrag wird + * beim Build durch das Shade-Plugin mit dem Wert der Property {@code ${revision}} + * befüllt. + *

+ * Ist der Eintrag nicht vorhanden (IDE-Start, Tests, ungepackter Betrieb), + * wird der Wert {@code "dev"} zurückgegeben. + * + * @return die aufgelöste Versionsnummer, niemals {@code null} + */ + public static String resolveVersion() { + String version = ApplicationVersionProvider.class.getPackage().getImplementationVersion(); + if (version == null) { + // Fallback für IDE-Start und ungepackten Betrieb + return FALLBACK_VERSION; + } + return version; + } +} diff --git a/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/ApplicationVersionProviderTest.java b/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/ApplicationVersionProviderTest.java new file mode 100644 index 0000000..3b283ca --- /dev/null +++ b/pdf-umbenenner-bootstrap/src/test/java/de/gecheckt/pdf/umbenenner/bootstrap/ApplicationVersionProviderTest.java @@ -0,0 +1,36 @@ +package de.gecheckt.pdf.umbenenner.bootstrap; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Unit-Tests für {@link ApplicationVersionProvider}. + *

+ * Im Testlauf ist kein gepacktes JAR mit Manifest vorhanden; der Test prüft deshalb + * ausschließlich das Fallback-Verhalten und stellt sicher, dass die Methode niemals + * {@code null} zurückgibt. + */ +class ApplicationVersionProviderTest { + + /** + * Im Testlauf (kein Fat-JAR, kein Manifest-Eintrag) muss der Fallback-Wert + * {@code "dev"} zurückgegeben werden. + */ + @Test + void resolveVersion_ohneGepacktesJar_gibtDevZurueck() { + // Wenn kein MANIFEST.MF mit Implementation-Version vorhanden ist (IDE / Test), + // wird der Fallback-Wert geliefert. + String version = ApplicationVersionProvider.resolveVersion(); + assertThat(version).isEqualTo("dev"); + } + + /** + * Das Ergebnis von {@link ApplicationVersionProvider#resolveVersion()} darf + * niemals {@code null} sein – weder im IDE-Betrieb noch im gepackten Betrieb. + */ + @Test + void resolveVersion_gibtNiemalsNull() { + assertThat(ApplicationVersionProvider.resolveVersion()).isNotNull(); + } +} diff --git a/pdf-umbenenner-coverage/pom.xml b/pdf-umbenenner-coverage/pom.xml index 76c1ca9..0d9cffc 100644 --- a/pdf-umbenenner-coverage/pom.xml +++ b/pdf-umbenenner-coverage/pom.xml @@ -5,7 +5,7 @@ de.gecheckt pdf-umbenenner-parent - 0.0.1-SNAPSHOT + ${revision} pdf-umbenenner-coverage pom diff --git a/pdf-umbenenner-domain/pom.xml b/pdf-umbenenner-domain/pom.xml index 1f5912c..ac12e52 100644 --- a/pdf-umbenenner-domain/pom.xml +++ b/pdf-umbenenner-domain/pom.xml @@ -4,7 +4,7 @@ de.gecheckt pdf-umbenenner-parent - 0.0.1-SNAPSHOT + ${revision} pdf-umbenenner-domain jar diff --git a/pdf-umbenenner-packaging/pom.xml b/pdf-umbenenner-packaging/pom.xml index 36d1733..c8ce9b5 100644 --- a/pdf-umbenenner-packaging/pom.xml +++ b/pdf-umbenenner-packaging/pom.xml @@ -6,7 +6,7 @@ de.gecheckt pdf-umbenenner-parent - 0.0.1-SNAPSHOT + ${revision} pdf-umbenenner-packaging pom @@ -21,12 +21,11 @@ - 2.5.0 + ${revision} diff --git a/pom.xml b/pom.xml index 687b512..7c82867 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 de.gecheckt pdf-umbenenner-parent - 0.0.1-SNAPSHOT + ${revision} pom pdf-umbenenner-domain @@ -18,6 +18,10 @@ pdf-umbenenner-packaging + + 0.0.1-SNAPSHOT + UTF-8 21 @@ -230,6 +234,39 @@ + + + org.codehaus.mojo + flatten-maven-plugin + 1.6.0 + + true + resolveCiFriendliesOnly + + + + flatten + process-resources + + flatten + + + + flatten.clean + clean + + clean + + + + + org.jacoco jacoco-maven-plugin