Zum Inhalt springen

Java — Maven & Gradle

Terminal-Fenster
findsl codegen examples/kst -l java -o out/java
  • Pro .findsl-Modul ein Interface plus eine Impl-Klasse; der Package-Pfad spiegelt das Verzeichnis (examples/kst/grundtarif.findslkst/Grundtarif.java + kst/GrundtarifImpl.java).
  • datensatzrecord, aufzählungenum, konstpublic static final.
  • Die Laufzeit unter org/findsl/runtime/*.java — reines JDK, keine externen Dependencies.

Das Ergebnis ist ein autonomes Java-Projekt: Es gibt kein findsl-runtime-JAR aus Maven Central. Die Laufzeit-Quellen liegen im Source-Tree und werden einfach mitkompiliert.

Das Generat sind reine Quelldateien ohne externe Abhängigkeit — du brauchst keinen <dependency>- bzw. dependencies-Eintrag für eine FinDSL-Laufzeit. Statt findsl von Hand aufzurufen, koppelst du den Schritt an den Build: vor dem Kompilieren das Binary ausführen und sein Ausgabeverzeichnis als zusätzliche Quell-Wurzel einbinden.

Die folgenden Beispiele nehmen an, dass die .findsl-Module unter src/main/findsl liegen und das Generat in ein eigenes generated-sources-Verzeichnis geht (nicht in das handgeschriebene src/main/java). findsl muss im PATH sein.

exec-maven-plugin ruft das Binary in der generate-sources-Phase auf; build-helper-maven-plugin macht das Ausgabeverzeichnis zur Quell-Wurzel (pom.xml):

<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>findsl-codegen</id>
<phase>generate-sources</phase>
<goals><goal>exec</goal></goals>
<configuration>
<executable>findsl</executable>
<arguments>
<argument>codegen</argument>
<argument>src/main/findsl</argument>
<argument>-l</argument>
<argument>java</argument>
<argument>-o</argument>
<argument>${project.build.directory}/generated-sources/findsl</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.6.0</version>
<executions>
<execution>
<id>findsl-add-source</id>
<phase>generate-sources</phase>
<goals><goal>add-source</goal></goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources/findsl</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

mvn compile generiert nun automatisch und kompiliert das Generat (samt Laufzeit) mit. Für die JUnit-5-Tests aus den prüfe-Blöcken eine zweite Ausführung mit -t … && build-helper:add-test-source analog ergänzen.

Die prüfe-Blöcke werden zu JUnit-5-Tests — bit-genau gegen den Referenz-Interpreter. Mit -t in ein eigenes Testverzeichnis:

Terminal-Fenster
findsl codegen src/main/findsl -l java -o out/java -t out/test
mvn test # bzw. ./gradlew test

Air-gapped, Lockstep, auditierbar, idempotent — siehe Überblick.