Die Schaffung von Zwei Ausführbaren Jars Mit maven-assembly-plugin
Ich habe ein Maven Projekt, und ich möchte zwei ausführbaren jar-Dateien aus. Man wird interaktiv durch die Nutzer und eine zweite wird als geplante Aufgabe ausgeführt, die liest die log-Dateien produziert, die von den ehemaligen. Am Ende, würde ich annehmen, dass die zwei jar-Dateien identisch, außer für die Main-Class-Attribut in der MANIFEST.MF-Datei.
Bin ich mit dem maven-antrun-plugin, um eine ausführbare jar-Datei und diese schien zu funktionieren gut, bis ich versucht, eine zweite jar-Datei durch die Einführung von Maven-profile. Der relevante Abschnitt meiner POM-Datei sieht wie folgt aus:
<profiles>
<profile>
<id>publisher</id>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
...
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<finalName>${project.artifactId}</finalName>
<archive>
<manifest>
<mainClass>fully.qualified.path.Publisher</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>logReader</id>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
...
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<finalName>${project.artifactId}-logReader</finalName>
<archive>
<manifest>
<mainClass>fully.qualified.path.LogReader</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Wirklich, der einzige Unterschied zwischen den beiden ist der "finalName" und "mainClass" Elemente definiert, die innerhalb des plugins.
Wenn ich versuche zum ausführen von mvn:Paket auf beide profile (ich verwende IntelliJ IDEE, übrigens), ich bekomme zwei .jar-Dateien, aber nur eine ist richtig und das andere falsch ist. Die "richtige" enthält alle Abhängigkeiten und eine gültige MANIFEST.MF-Datei. Die "falsche" enthält keine Abhängigkeiten und das MANIFEST.MF-Datei fehlt die "Main-Class" - Eigenschaft, die ich brauche, damit es ausführbar ist.
Habe ich festgestellt, dass wenn ich immer nur ein profile oder andere, es funktioniert aber, wenn ich versuche, führen beide profile gleichzeitig, es schlägt fehl. Bekomme ich auch die folgenden Notizen in meinem Logbuch, aber ich muss zugeben, dass ich nicht vollständig verstehen, was Sie sagen:
[INFO] Building jar: .../target/publisher.jar
...
[INFO] Building jar: .../target/publisher-logReader.jar
[WARNING] Configuration options: 'appendAssemblyId' is set to false, and 'classifier' is missing.
Instead of attaching the assembly file: .../target/publisher-logReader.jar, it will become the file for main project artifact.
NOTE: If multiple descriptors or descriptor-formats are provided for this project, the value of this file will be non-deterministic!
[WARNING] Replacing pre-existing project main-artifact file: .../target/publisher.jar with assembly file: .../target/publisher-logReader.jar
Irgendwelche Gedanken zu dieser? Ist es möglich, die Erzeugung von zwei jar-Dateien mit einem einzigen mvn:Paket in dieser Weise, oder bin ich auf dem Holzweg?
Dank!
InformationsquelleAutor McGlone | 2013-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, sobald ich dies geschrieben, fand ich diesen thread:
Erstellen Sie mehrere ausführbare Jars (mit depencies enthalten sind) durch einen einzigen Maven-Projekt
Dieser verwendet einen anderen Ansatz, dass es nicht mit zwei Profilen, verwendet es zwei Ausführungen, die als solche:
Scheint dies zu funktionieren. Die moral von der Geschichte scheint zu sein, dass ich nicht ganz verstehen, Profilen oder, wenn Sie verwendet werden sollten.
<goals>
und<phase>
Elemente.InformationsquelleAutor McGlone