java - pom - mvn clean install que es
Lista de archivos jar de dependencia en Maven (7)
Usando Maven 2, ¿hay alguna manera de enumerar las dependencias de jar como solo los nombres de archivo?
mvn dependency:build-classpath
puede listar los archivos jar, pero eso incluirá la ruta completa a su ubicación en mi repositorio local. Lo que necesito es esencialmente solo una lista de los nombres de los archivos (o los nombres de los archivos copiados del objetivo de copia-dependencias).
Entonces la lista que necesito sería algo así como
activation-1.1.jar,antlr-2.7.6.jar,aopalliance-1.0.jar etc...
idealmente como una propiedad maven, pero supongo que un archivo como build-classpath puede generar.
Lo que intento lograr es escribir un Bundle-ClassPath
en un archivo MANIFEST.MF mantenido de otra manera para un paquete OSGi. (No debería necesitar entender este bit para responder la pregunta).
Para aclarar: la pregunta no es sobre cómo escribir encabezados de manifiesto en el archivo MANIFEST.MF en un jar (que es fácilmente googleble). Estoy preguntando cómo obtener los datos que quiero escribir, es decir, la lista que se muestra arriba.
¿Has mirado el proyecto Apache Felix ? Tiene un lío completo de complementos, incluido un complemento de paquete que debe hacer lo que desee.
Además, ¿ha probado la etiqueta <addClasspath>
con <manifestFile>
? Eso debería tener el efecto deseado de fusionar el classpath en tu manifiesto.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
...
<configuration>
<archive>
<addClasspath>true</addClasspath>
<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
...
</plugin>
Maven puede construir el classpath en tu manifiesto automáticamente: http://maven.apache.org/guides/mini/guide-manifest.html
Es una configuración del complemento de archivo Maven.
Lo mejor que puedo decir es que no se puede obtener exactamente esa salida, con las comas y sin espacios. Tanto a través de la línea de comando como a través del archivo pom.xml, maven-dependency-plugin o CLI se asusta si especifica espacios o el '''' (cadena vacía) como sustituto con pathSeparator
o fileSeparator
. Por lo tanto, puede verse obligado a llegar a un compromiso. Usted puede
mvn dependency:build-classpath -Dmdep.pathSeparator=":" -Dmdep.prefix='''' -Dmdep.fileSeparator=":" -Dmdep.outputFile=classpath
Sin embargo, eso debería proporcionarle una lista completa, separada por ''::''
lugar de simplemente '',''
, pero funciona. Si tu corres:
mvn dependency:build-classpath -Dmdep.pathSeparator="@REPLACEWITHCOMMA" -Dmdep.prefix='''' -Dmdep.fileSeparator="@" -Dmdep.outputFile=classpath
y adjuntar esto a la fase de generate-resources
y filtrar ese recurso más tarde estableciendo la propiedad correcta en la fase de process-resources
de proceso del ciclo de vida, debería poder obtener solo la coma.
Puede ver la lista completa de opciones en: http://maven.apache.org/plugins/maven-dependency-plugin/build-classpath-mojo.html
Me puede estar perdiendo algo aquí, pero como ya has usado las dependencias de copia, parece que lo que realmente buscas es solo una lista de archivos en un directorio específico.
Ant puede hacer esto por usted sin ningún problema, al igual que un script de shell.
Este comando generará el árbol de dependencias de su proyecto de maven:
$ mvn dependency:tree
Estoy seguro de que te gustará el resultado :-)
Para agregar una muesca a las respuestas existentes, el complemento maven-dependency actual permite guardar el classpath en una propiedad con el parámetro outputProperty
.
Aquí está el comando que está pidiendo
$ mvn dependency:tree
Para proyectos grandes, puede generar una gran cantidad de texto. Supongo que desea verificar que el árbol de dependencias contenga cierta dependencia, por lo que no necesita una lista completa.
A continuación, le mostramos cómo puede filtrar la salida en Windows:
$ mvn dependency:tree | findstr javax.persistence
Y he aquí cómo puedes hacerlo en Linux:
$ mvn dependency:tree | grep javax.persistence