[JAVA] Fügen Sie den von Doma generierten Quellcode in die Quell-JAR ein

Überblick

Doma verwendet die Pluggable Annotation Processing API, um zur Kompilierungszeit automatisch DAO-Implementierungsklassen und Entitätshilfsklassen zu generieren. Java-Dateien werden automatisch von Doma generiert. Selbst wenn Sie eine Quell-JAR mit der normalerweise in Maven oder Gradle eingeführten Methode (?) Erstellen (siehe Link unten), ist die automatisch generierte Java-Datei die Quelle. Nicht im JAR enthalten.

Entitäten, die eins zu eins mit einer Tabelle zugeordnet werden, werden von Doma-Gen generiert und in JAR gemeinsam aus einem Webprojekt oder Batch-Projekt referenziert. Zu diesem Zeitpunkt besteht eine Motivation, die von Doma automatisch generierte Java-Datei in die Quell-JAR der Entität aufzunehmen.

Hier beschreiben wir, wie Maven und Gradle jeweils von Doma automatisch generierte Java-Dateien in die Quell-JAR aufnehmen können.

Maven

Um eine Quell-JAR in Maven zu erstellen, führen Sie das Ziel "jar" von "org.apache.maven.plugins: maven-source-plugin" aus.

Da das Ziel des Packens "src / main / java" und "src / main / resources" ist, scheint es gut, das Ausgabezielverzeichnis der Java-Datei hinzuzufügen, die von Doma dort automatisch generiert wird. In diesem Sinne habe ich mir jar Goal Documents angesehen, kann aber Verpackungsziele hinzufügen. Ich konnte eine solche Option nicht finden.

Es bleibt keine andere Wahl, als das "jar" -Ziel SourceJar Mojo umzusetzen. Ich habe mir org / apache / maven / plugins / source / SourceJarMojo.java angesehen. SourceJarMojo ist [SourceJarNoForkMojo](https://github.com/apache/maven-source-plugin/blob/maven-source-plugin-3.0.1/src/main/java/org/apache/maven/plugins/ Es wurde von source / SourceJarNoForkMojo.java geerbt. In SourceJarNoForkMojo [wo das Quellverzeichnis (das Ziel der Verpackung) abgerufen wird](https://github.com/apache/maven-source-plugin/blob/maven-source-plugin-3.0.1 Unter /src/main/java/org/apache/maven/plugins/source/SourceJarNoForkMojo.java#L73) wird MavenProject # getCompileSourceRoots () aufgerufen. Javadoc von MavenProject # getCompileSourceRoots () Es wurde nicht geschrieben, aber es scheint eine Einstellung zu sein, die sich auf das gesamte Projekt bezieht, gemessen am Klassennamen und so weiter.

Aus dem oben Gesagten haben wir beschlossen, das Ausgabeziel der von Doma automatisch generierten Java-Datei als Ressourcenverzeichnis hinzuzufügen.

<resources>
    <resource>
        <filtering>false</filtering>
        <directory>src/main/resources</directory>
    </resource>
    <resource>
        <filtering>false</filtering>
        <!--
Das Standardausgabeziel des Quellcodes, der von der Pluggable Annotation Processing API generiert wird
Quellen durch Hinzufügen zum Ressourcenverzeichnis-In ein Glas geben.
        https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#generatedSourcesDirectory
        -->
        <directory>${project.build.directory}/generated-sources/annotations</directory>
    </resource>
</resources>

Maven kopiert jedoch die Ressourcen, kompiliert sie und packt sie in JAR. Wenn Sie also mehrmals "mvn package" ausführen, werden die zweite und die nachfolgenden JARs (diejenigen, deren Klassendateien gepackt sind, nicht die Quell-JAR). Die von Doma automatisch generierte Java-Datei wird ebenfalls in JAR gepackt.

Aus diesem Grund habe ich in der Einstellung "org.apache.maven.plugins: maven-jar-plugin" eine Einstellung hinzugefügt, die keine Java-Dateien im Paket enthält.

<!--
Ich habe das Quellverzeichnis zur Ressource hinzugefügt, also in der JAR-Datei
Fügen Sie keine Java-Dateien hinzu.
-->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <excludes>
            <exclude>**/*.java</exclude>
        </excludes>
    </configuration>
</plugin>

Alles was Sie jetzt tun müssen, ist mvn package source: jar.

Gradle

Im Gegensatz zu Maven verfügt Gradle nicht über ein Plug-In zum Erstellen einer Quell-JAR, sondern definiert eine Aufgabe zum Erstellen einer Quell-JAR selbst basierend auf der Aufgabe "Jar".

Zu diesem Zeitpunkt können Sie das Ausgabeziel der von Doma automatisch generierten Java-Datei zum Paketzielverzeichnis hinzufügen.

In Gradle ist das Standardziel für Java-Dateien, die automatisch von Doma generiert werden, "sourceSets.main.output.classesDirs". Da dies auch das Ausgabeziel der Klassendatei ist, schreiben Sie die Einstellungen ohne die Klassendatei.

task sourcesJar(type: Jar) {
    from sourceSets.main.allJava, sourceSets.main.output.classesDirs //Die von Doma generierte Quelle ist sourceSets.main.output.Ausgabe an classesDirs
    classifier = 'sources'
    exclude '**/*.class' //sourceSets.main.output.classesDirs enthält auch Klassendateien, also filtern
}

Wie oben erwähnt, werden Java-Dateien, die automatisch von Doma generiert werden (oder vielmehr mithilfe der Pluggable Annotation Processing API generiert werden), am selben Speicherort wie die Klassendateien ausgegeben. Daher wird die Java-Datei standardmäßig in die JAR-Datei gepackt. Fügen Sie daher eine Einstellung hinzu, die sie ausschließt (warum wird sie standardmäßig an einem solchen Speicherort ausgegeben?).

//sourceSets.main.output.Ausschluss von Java-Dateien, die an classesDirs ausgegeben werden
jar.excludes = ['**/*.java']

Alles, was Sie tun müssen, ist "Gradle Build Source Jar".

Am Ende

Das Beispiel für den Arbeitscode befindet sich an der folgenden Stelle.

Sie können sogar erleben, wie Sie die Quell-JAR auf Ihrem lokalen Nexus bereitstellen.

Recommended Posts

Fügen Sie den von Doma generierten Quellcode in die Quell-JAR ein
So debuggen Sie die generierte JAR-Datei mit Eclipse
Beim Lesen des Quellcodes
Errate den Zeichencode in Java
Vorab geschriebener Quellcode für die Aktivität
Fügen Sie Bildressourcen in die JAR-Datei ein
[Referenzbeispiel] Das Urheberrecht wird im Kommentar des Quellcodes beschrieben.
Was tun, wenn Ihnen der von swagger-codegen-cli generierte Code nicht gefällt?
Ich habe den Paketnamen überprüft, auf den die in der JAR-Datei enthaltene Klasse verweist
Die Anwendung absorbiert den Unterschied im Zeichencode
Nach mehreren Feldern in der Klasse sortieren
Verhindern von Fehlern im Logger-Namen durch Kopieren
Techniken zum Lesen von Java-Quellcode in Eclipse
[Java] Beurteilung durch Eingabe von Zeichen in das Terminal