Estoy tratando de definir una propiedad en nuestro super pom que será utilizada por todos los proyectos secundarios como el destino del artefacto generado.
Para esto estaba pensando en usar, project/build/finalName
pero esto no parece funcionar, incluso para poms simples:
Mando
mvn archetype:create \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=com.mycompany.app \
-DartifactId=my-app
POM
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-app</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<finalName>${project.name}-testing</finalName>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Y cuando ejecuté:
$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building my-app
[INFO] task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /tmp/mvn_test/my-app/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /tmp/mvn_test/my-app/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /tmp/mvn_test/my-app/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.024 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] [install:install {execution: default-install}]
[INFO] Installing /tmp/mvn_test/my-app/target/my-app-testing.jar to /home/maxim/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sun Nov 21 18:37:02 IST 2010
[INFO] Final Memory: 17M/162M
[INFO] ------------------------------------------------------------------------
Esperaría que la cadena "prueba" apareciera en algún lugar del nombre del artefacto generado.
¿Estoy malinterpretando el propósito de "finalName"?
java
maven-2
jar
build-automation
Maxim Veksler
fuente
fuente
Respuestas:
Establece la
finalName
propiedad en la sección de configuración del complemento:Como se indica en la documentación oficial .
Actualizar:
Para Maven> = 3
Según el comentario de Matthew, ahora puede hacerlo así:
Ver informe de errores / documentación .
fuente
finalName
configuración se ha eliminado. Sin embargo, el método del OP debería funcionar. Ver issues.apache.org/jira/browse/MJAR-233Todas las respuestas proporcionadas son más complicadas de lo necesario. Suponiendo que está creando un archivo jar, todo lo que necesita hacer es agregar una
<jar.finalName>
etiqueta a su<properties>
sección:Esto generará un frasco:
Esto está en la documentación : tenga en cuenta lo siguiente
User Property
:Uso de línea de comando
También debería poder usar esta opción en la línea de comando con:
Deberías obtener myCustomName.jar, aunque no he probado esto.
fuente
<jar.finalName>foo</jar.finalName>
crea dos jarras: un jar ejecutable que incluye dependencias nombradasfoo-${project.version}.jar
y un segundo jar que solo contiene el proyecto nombrado${project.name}-${project.version}.jar
,<build><finalName>foo</finalName></build>
crea solo el jar ejecutable que incluye dependencias nombradasfoo.jar
@Maxim
prueba esto ...
pom.xml
Commnad
mvn clean install
Salida
Referencia
fuente
En la etapa de paquete, el complemento permite la configuración de los nombres de archivos importados a través de la asignación de archivos:
plugin maven-ear
http://maven.apache.org/plugins/maven-ear-plugin/examples/customize-file-name-mapping.html
http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#outputFileNameMapping
Si ha configurado su versión para 'probar' a través de un perfil o algo, esto funcionaría para un paquete de guerra:
Maven-War-Plugin
fuente
Esto funciona para mi
fuente
El enfoque que ha estado utilizando realmente hace que el archivo jar con una cadena 'prueba' en su nombre, como usted especificó, pero el comando de instalación predeterminado lo envía a su directorio ~ / .m2 / repository, como se ve en esta línea de salida:
Me parece que estás tratando de generar un jar con ese nombre y luego copiarlo al directorio que elijas.
Intente usar la propiedad outputDirectory como se describe aquí: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
fuente
groupId/artifactId/version/artifactId-version-classifier.packaging
. finalName solo se aplica al nombre del archivo local en el directorio de salida.Estoy usando lo siguiente
De esta manera, puede definir cada valor de forma individual o pragmática a partir de Jenkins de algún otro sistema.
Esto colocará una carpeta
target\{group.id}\projectName-1.2.3.jar
Una mejor manera de ahorrar tiempo podría ser
Me gusta lo mismo excepto que uso en variable.
Esto colocará una carpeta
target\{group.id}\projectName-1.2.3.jar
también puede usar
outputDirectory
dentroconfiguration
para especificar una ubicación en la que desee que se ubique el paquete.fuente
En mi proyecto maven ee estoy usando:
fuente