Maven: Como renomear o arquivo war para o projeto?

91

Eu tenho um projeto birdcom os seguintes componentes empom.xml

   <groupId>com.myorg</groupId>
    <artifactId>bird</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>bird</name>

    <modules>
        <module>persistence</module>
        <module>business</module>
        <module>service</module>
        <module>web</module>
    </modules>

e o módulo web como

   <parent>
        <artifactId>bird</artifactId>
        <groupId>com.myorg</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>web</artifactId>
    <packaging>war</packaging>  

O módulo da web cria o arquivo war chamado web-1.0-SNAPSHOT.war
Como posso, usando maven renomear isso para bird.war?

sonhador
fonte

Respostas:

205

Você pode usar o seguinte no módulo da web que produz a guerra:

<build>
  <finalName>bird</finalName>
 . . .
</build>

Isso leva a um arquivo chamado bird.war a ser criado quando o objetivo "guerra: guerra" é usado.

Sébastien Le Callonnec
fonte
Quando compilo meu projeto com o nome "bird.war", obtenho uma guerra que é nomend "bird.war.war".
Kalaschni
@Kalaschni apenas use 'bird', não 'bird.war' - cada um dos vários plug-ins de construção adiciona a extensão de arquivo apropriada automaticamente (war, jar, ear)
ZachOfAllTrades
11
Ou, de forma mais geral, podemos usar:<finalName>${project.artifactId}</finalName>
Guillaume Husta
Essa resposta resolveu meu problema em que uma guerra de submódulo estava sendo gerada com o nome do pai, o que eu não queria. O problema era que o elemento <finalName> foi definido no POM pai. A exclusão desse elemento resultou no arquivo war gerado com o nome correto do submódulo.
Oliver Hernandez
Em IDEA 20156 2.4, tive o problema adicional de continuar gerando o arquivo de guerra antigo toda vez que tentava implantar em um Payara Glassfish 4.1. Quando isso acontecer, vá para Abrir Configurações do Módulo -> Artefatos -> Layout de Saída e renomeie o arquivo de guerra para o resultado desejado. Eu precisava disso porque a raiz de contexto muda com o nome do arquivo war no IDEA, o que é uma dor quando você tem uma configuração diferente no arquivo .properties.
Dr4gon de
25

Você precisa configurar o plugin war:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <warName>bird.war</warName>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

Mais informações aqui

Andres Olarte
fonte
11
Para sua informação: Esta resposta não é mais válida (desde maven-war-plugin versão 3.0.0 e em diante). Consulte issues.apache.org/jira/browse/MWAR-373 .
Auke,
<warName> funciona (pelo menos no war-plugin em 3.2.3), mas sempre acrescenta "- <classifier> .war" onde <classifier> está vazio por padrão e pode ser definido dentro de <configuration>. Eu uso <warName> $ {project.build.finalName} ## $ {buildDateTimeFile} </warName> com "buildDateTimeFile" definido por build-helper-maven-plugin para obter "myApp ## 2020-05-29_10-24- 00.war ". Isso é especialmente útil se você criar vários arquivos war (dev / test / prod) de uma vez.
Thies
6

Você pode seguir a etapa abaixo para modificar o nome do arquivo .war se estiver usando o projeto maven.

Abra o arquivo pom.xml do seu projeto maven e vá para a tag <build></build>,

  1. Em que dar o seu nome desejado entre esta tag: <finalName></finalName>.

    ex. :<finalName>krutik</finalName>

    Depois de implantar este .war, você poderá acessar a url com:
    http: // localhost: 8080 / krutik /

  2. Se você deseja acessar o url com a barra '/' , você terá que especificar o nome conforme abaixo:

    ex: <finalName>krutik#maheta</finalName>

    Depois de implantar este .war, você poderá acessar a url com:
    http: // localhost: 8080 / krutik / maheta

Krutik
fonte
5

Pesquise pom.xml> tag de projeto> tag de construção.

Eu gostaria da solução abaixo.

<artifactId>bird</artifactId>
<name>bird</name>

<build>
    ...
    <finalName>${project.artifactId}</finalName>
  OR
    <finalName>${project.name}</finalName>
    ...
</build>

Funcionou para mim. ^^

bamossza
fonte