programa instalador hacer generar ejecutables ejecutable crear con como archivo java maven maven-assembly-plugin

hacer - crear un instalador con java



Creando dos archivos ejecutables usando el complemento-ensamblado-maven (1)

Tan pronto como publiqué esto, encontré este hilo:

Cree múltiples tarros ejecutables (con las dependencias incluidas) a partir de un solo proyecto de Maven

Esto usa un enfoque diferente en que no usa dos perfiles, usa dos ejecuciones, como tales:

<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>build-publisher</id> <configuration> <appendAssemblyId>false</appendAssemblyId> <archive> <manifest> <mainClass>fully.qualified.path.Publisher</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <finalName>${project.artifactId}</finalName> </configuration> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> <execution> <id>build-logReader</id> <configuration> <appendAssemblyId>false</appendAssemblyId> <archive> <manifest> <mainClass>fully.qualified.path.LogReader</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <finalName>${project.artifactId}-logReader</finalName> </configuration> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>

Esto parece estar funcionando. La moraleja de la historia parece ser que no entiendo completamente los perfiles o cuándo deberían usarse.

Tengo un proyecto de Maven y quiero crear dos archivos jar ejecutables a partir de él. Uno será utilizado de forma interactiva por los usuarios y el segundo se ejecutará como un trabajo programado que lee los archivos de registro producidos por el primero. Al final, esperaría que los dos archivos jar sean idénticos a excepción del atributo de clase principal en el archivo MANIFEST.MF.

Estoy usando maven-antrun-plugin para crear un jar ejecutable y esto parece funcionar bien hasta que intenté crear un segundo archivo jar introduciendo los perfiles de Maven. La sección relevante de mi archivo POM se ve así:

<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>

En realidad, la única diferencia entre los dos es el "finalName" y los elementos "mainClass" definidos en el complemento.

Cuando intento ejecutar mvn: package en ambos perfiles (estoy utilizando IntelliJ IDEA, por cierto), obtengo dos archivos .jar, pero uno es correcto y el otro es incorrecto. El "correcto" contiene todas las dependencias y un archivo MANIFEST.MF válido. El "incorrecto" no contiene dependencias y el archivo MANIFEST.MF carece de la propiedad "Clase principal" que necesito para que sea ejecutable.

Descubrí que si alguna vez ejecuto solo un perfil u otro, funciona bien, pero si intento ejecutar ambos perfiles a la vez, falla. También tengo las siguientes notas en mi registro, pero debo admitir que no entiendo completamente lo que están diciendo:

[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

¿Alguna idea sobre esto? ¿Es posible producir dos archivos jar con un solo paquete mvn: de esta manera, o estoy ladrando el árbol equivocado?

¡Gracias!