Estou tentando definir uma propriedade em nosso super pom que será usada por todos os projetos filhos como destino do artefato gerado.
Para isso, eu estava pensando em usar project/build/finalName
ainda isso não parece funcionar, mesmo para poms simples:
Comando
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>
E quando eu executei:
$ 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] ------------------------------------------------------------------------
Eu esperaria que a string "testing" aparecesse em algum lugar no nome do artefato gerado.
Estou entendendo mal o propósito de "finalName"?
java
maven-2
jar
build-automation
Maxim Veksler
fonte
fonte
Respostas:
Você define a
finalName
propriedade na seção de configuração do plug-in:Conforme indicado na documentação oficial .
Atualizar:
Para Maven> = 3
Com base no comentário de Matthew, agora você pode fazer o seguinte:
Veja o relatório / documentação do bug .
fonte
finalName
configuração foi removida. No entanto, o método do OP deve funcionar. Veja Issues.apache.org/jira/browse/MJAR-233Todas as respostas fornecidas são mais complicadas do que o necessário. Supondo que você esteja criando um arquivo jar, tudo que você precisa fazer é adicionar uma
<jar.finalName>
tag à sua<properties>
seção:Isso irá gerar um jar:
Isso está na documentação - observe o
User Property
:Uso da linha de comando
Você também deve poder usar esta opção na linha de comando com:
Você deve obter myCustomName.jar, embora eu não tenha testado isso.
fonte
<jar.finalName>foo</jar.finalName>
cria dois frascos: um jar executável incluindo dependências nomeadosfoo-${project.version}.jar
e um segundo frasco contendo apenas o projeto chamado${project.name}-${project.version}.jar
,<build><finalName>foo</finalName></build>
cria apenas o jar executável incluindo dependências chamadofoo.jar
@Maxim
try this ...
pom.xml
Commnad
mvn clean install
Resultado
Referência
fonte
No estágio do pacote, o plug-in permite a configuração dos nomes de arquivos importados por meio do mapeamento de arquivos:
maven-ear-plugin
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
Se você configurou sua versão para 'testar' através de um perfil ou algo assim, isso funcionaria para um pacote war:
maven-war-plugin
fonte
Isso funciona para mim
fonte
A abordagem que você está usando de fato faz o arquivo jar com uma string 'testing' em seu nome, como você especificou, mas o comando de instalação padrão o envia para o diretório ~ / .m2 / repository, como visto nesta linha de saída:
Parece-me que você está tentando gerar um jar com esse nome e copiá-lo para um diretório de sua escolha.
Tente usar a propriedade outputDirectory conforme descrito aqui: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
fonte
groupId/artifactId/version/artifactId-version-classifier.packaging
. finalName se aplica apenas ao nome do arquivo local no diretório de saída.Eu estou usando o seguinte
Dessa forma, você pode definir cada valor individual ou pragmaticamente no Jenkins de outro sistema.
Isso colocará uma pasta
target\{group.id}\projectName-1.2.3.jar
Uma maneira melhor de economizar tempo pode ser
Como o mesmo, exceto que eu uso na variável.
Isso colocará uma pasta
target\{group.id}\projectName-1.2.3.jar
você também pode usar
outputDirectory
dentro deconfiguration
para especificar um local em que você deseja que o pacote seja localizado.fonte
No meu projeto do maven ee, estou usando:
fonte