Maven: ¿Cómo cambiar el nombre del archivo war para el proyecto?


91

Tengo un proyecto birdcon los siguientes componentes enpom.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>

y el módulo web como

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

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

El módulo web crea el archivo war llamado web-1.0-SNAPSHOT.war
¿Cómo puedo, usando maven, cambiar el nombre de esto a bird.war?


Respuestas:


205

Puede utilizar lo siguiente en el módulo web que produce la guerra:

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

Esto conduce a un archivo llamado bird.war que se creará cuando se use el objetivo "war: war".


cuando compilo mi proyecto con el nombre "bird.war" obtengo una guerra que es namend "bird.war.war".
Kalaschni

@Kalaschni solo usa 'bird', no 'bird.war': cada uno de los diversos complementos de compilación agrega la extensión de archivo adecuada automáticamente (war, jar, ear)
ZachOfAllTrades

11
O de manera más general, podemos usar:<finalName>${project.artifactId}</finalName>
Guillaume Husta

Esta respuesta resolvió mi problema donde se generaba una guerra de submódulo con el nombre del padre, que no quería. El problema era que el elemento <finalName> se estableció en el POM principal. Eliminar ese elemento resultó en el archivo war generado con el nombre correcto del submódulo.
Oliver Hernandez

En IDEA 20156 2.4 tuve el problema adicional de que seguía generando el antiguo archivo de guerra cada vez que intentaba implementarlo en un Payara Glassfish 4.1. Cuando eso suceda, vaya a Configuración del módulo abierto -> Artefactos -> Diseño de salida y cambie el nombre del archivo war al resultado deseado. Necesitaba esto porque la raíz de contexto cambia con el nombre del archivo war en IDEA, lo cual es un problema cuando tienes un archivo diferente configurado en .properties.
Dr4gon

25

Necesita configurar el complemento 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>

Más info aquí


11
Para su información: esta respuesta ya no es válida (desde la versión 3.0.0 de maven-war-plugin en adelante). Consulte issues.apache.org/jira/browse/MWAR-373 .
Auke

<warName> funciona (al menos en war-plugin en 3.2.3) pero siempre agrega "- <classifier> .war" donde <classifier> está vacío por defecto y se puede configurar dentro de <configuration>. Utilizo <warName> $ {project.build.finalName} ## $ {buildDateTimeFile} </warName> con "buildDateTimeFile" establecido por build-helper-maven-plugin para obtener "myApp ## 2020-05-29_10-24- 00.war ". Esto es especialmente útil si crea varios archivos war (dev / test / prod) de una sola vez.
Thies

6

Puede seguir el paso a continuación para modificar el nombre del archivo .war si está utilizando el proyecto maven.

Abra el archivo pom.xml de su proyecto maven y vaya a la etiqueta <build></build>,

  1. En eso, ingrese su nombre deseado entre esta etiqueta: <finalName></finalName> .

    ex. :<finalName>krutik</finalName>

    Después de implementar este .war, podrá acceder a la URL con:
    http: // localhost: 8080 / krutik /

  2. Si desea acceder a la URL con barra oblicua '/' , deberá especificar el nombre que se muestra a continuación:

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

    Después de implementar este .war, podrá acceder a la URL con:
    http: // localhost: 8080 / krutik / maheta


5

Busque pom.xml> etiqueta de proyecto> etiqueta de compilación.

Me gustaría una solución a continuación.

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

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

Trabajó para mi. ^^

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.