java - que - maven tutorial
¿Puede Maven recopilar todos los JAR dependientes de un proyecto para ayudar con la implementación de la aplicación? (6)
Lo que desea investigar es el complemento de dependencia de Maven . Agregue algo similar a lo siguiente a pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<outputDirectory>
${project.build.directory}
</outputDirectory>
</configuration>
</plugin>
Luego ejecute mvn clean dependency:copy-dependencies
para copiar y ejecutar la copia. Combine esto con el complemento de ensamblaje y puede empaquetar todo en un archivo autónomo para su distribución.
Estoy empezando a usar Maven , (en realidad lo estoy evaluando) y necesito poder generar rápidamente un archivo JAR para mi aplicación y un directorio con todas las dependencias (por ejemplo, lib) para poder implementar esos dos para ser ejecutado de manera independiente. Generar el archivo JAR con el manifiesto adecuado es fácil, pero no sé cómo hacer que Maven copie las dependencias del proyecto actual en un directorio lib
que pueda desplegar.
Dado que esto es para aplicaciones Java autónomas, no estoy interesado en implementarlo en un repositorio Maven, que también es bastante trivial o, al menos, fácilmente googleable.
Descubrí cómo hacer todo, excepto copiar los archivos JAR dependientes en un directorio específico. Este es el flujo de trabajo que estoy buscando:
$ mvn clean
$ mvn package
$ cp -r target/{lib,myApp.jar} installLocation
Entonces, ejecutar myApp.jar
desde installLocation
como un archivo JAR debería "funcionar" independientemente de mi $CLASSPATH
.
Para intentar anticipar algunas respuestas:
- Tengo un Main-class: set, y funciona bien.
- También configuré classpath en MANIFEST.MF, y eso funciona bien también.
- Descubrí cómo usar
<classpathPrefix>
y<classpathMavenRepositoryLayout>
para que esto funcione, pero solo en mi máquina. (a través de:<classpathPrefix>${settings.localRepository}</classpathPrefix>
)
Seguro que sí. Debe usar el plugin de sombreado que se puede hacer agregando
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.3-SNAPSHOT</version>
<configuration>
<!-- put your configurations here -->
</configuration>
</plugin>
a tu proyecto
Sin embargo, otro es el plugin appassembler
Lo que me gusta es que empaqueta la aplicación en una forma lista para usar (con un archivo .bat y tal)
No me importó el plugin Shade ya que enrolla todos los paquetes de todos los frascos.
Para incluir todas las librerías externas, puede usar el Complemento de dependencia como se mencionó anteriormente.
Este ejemplo creará un directorio "lib" en "target / classes" antes de la fase "package".
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>target/classes/lib</outputDirectory> <overWriteIfNewer>true</overWriteIfNewer> <excludeGroupIds> junit,org.hamcrest,org.mockito,org.powermock,${project.groupId} </excludeGroupIds> </configuration> </execution> <execution> <phase>generate-sources</phase> <goals> <goal>sources</goal> </goals> </execution> </executions> <configuration> <verbose>true</verbose> <detail>true</detail> <outputDirectory>${project.build.directory}</outputDirectory> </configuration> </plugin>
Eche un vistazo al complemento de dependencia de maven, específicamente el objetivo de copiar las dependencias. La sección de uso describe cómo hacer exactamente lo que desea.
Para hacerlo desde la línea de comando solo hazlo:
$ mvn dependency:copy-dependencies -DoutputDirectory=OUTPUT_DIR
Utilizando maven.repo.local uno puede recolectar todos los archivos jar , pero, se recopilan en un directorio con una jerarquía maven (.m2).
mvn install -Dmaven.repo.local=./pick/some/folder
A continuación, puede recopilarlos (en Linux):
mkdir flat-repo
find ./pick/some/folder -type f -name "*.jar" | xargs -I''{}'' cp ''{}'' flat-repo/