J'essaie de définir une propriété dans notre super pom qui sera utilisée par tous les projets enfants comme destination de l'artefact généré.
Pour cela, je pensais utiliser project/build/finalName
mais cela ne semble pas fonctionner, même pour de simples poms:
Commander
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>
Et quand j'ai exécuté:
$ 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] ------------------------------------------------------------------------
Je m'attendrais à ce que la chaîne "testing" apparaisse quelque part dans le nom de l'artefact généré.
Suis-je mal compris le but de "finalName"?
java
maven-2
jar
build-automation
Maxim Veksler
la source
la source
Réponses:
Vous définissez la
finalName
propriété dans la section de configuration du plugin:Comme indiqué dans la documentation officielle .
Mettre à jour:
Pour Maven> = 3
Sur la base du commentaire de Matthew, vous pouvez maintenant le faire comme ceci:
Voir rapport de bogue / documentation .
la source
finalName
configuration a été supprimée. Cependant, la méthode de l'OP devrait fonctionner. Voir issues.apache.org/jira/browse/MJAR-233Toutes les réponses fournies sont plus compliquées que nécessaire. En supposant que vous construisez un fichier jar, tout ce que vous avez à faire est d'ajouter une
<jar.finalName>
balise à votre<properties>
section:Cela générera un pot:
Ceci est dans la documentation - notez le
User Property
:Utilisation de la ligne de commande
Vous devriez également pouvoir utiliser cette option sur la ligne de commande avec:
Vous devriez obtenir myCustomName.jar, bien que je ne l'ai pas testé.
la source
<jar.finalName>foo</jar.finalName>
crée deux jars: un jar exécutable comprenant les dépendances nomméesfoo-${project.version}.jar
et un second jar contenant uniquement le projet nommé${project.name}-${project.version}.jar
,<build><finalName>foo</finalName></build>
crée uniquement le jar exécutable, y compris les dépendances nomméesfoo.jar
@Maxim
essayez ceci ...
pom.xml
Commnad
mvn clean install
Production
Référence
la source
Au stade du package, le plugin permet la configuration des noms de fichiers importés via le mappage de fichiers:
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 vous avez configuré votre version pour être `` testée '' via un profil ou quelque chose, cela fonctionnerait pour un package war:
maven-war-plugin
la source
Cela fonctionne pour moi
la source
L'approche que vous avez utilisée fait en effet un fichier jar avec une chaîne 'testing' dans son nom, comme vous l'avez spécifié, mais la commande d'installation par défaut l'envoie à votre répertoire ~ / .m2 / repository, comme indiqué dans cette ligne de sortie:
Il me semble que vous essayez de générer un fichier jar avec un tel nom, puis de le copier dans un répertoire de votre choix.
Essayez d'utiliser la propriété outputDirectory comme décrit ici: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
la source
groupId/artifactId/version/artifactId-version-classifier.packaging
. finalName s'applique uniquement au nom de fichier local dans le répertoire de sortie.J'utilise ce qui suit
De cette façon, vous pouvez définir chaque valeur individuellement ou de manière pragmatique à partir de Jenkins d'un autre système.
Cela placera un dossier
target\{group.id}\projectName-1.2.3.jar
Une meilleure façon de gagner du temps pourrait être
Comme le même sauf que j'utilise sur variable.
Cela placera un dossier
target\{group.id}\projectName-1.2.3.jar
vous pouvez également utiliser
outputDirectory
inside ofconfiguration
pour spécifier un emplacement où vous souhaitez que le package soit localisé.la source
Dans mon projet maven ee, j'utilise:
la source