Maven: come rinominare il file war per il progetto?


91

Ho un progetto birdcon i seguenti componenti inpom.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 il modulo web come

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

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

il modulo web crea il file war denominato web-1.0-SNAPSHOT.war
Come posso, usando Maven rinominarlo in bird.war?


Risposte:


205

Puoi usare quanto segue nel modulo web che produce la guerra:

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

Questo porta alla creazione di un file chiamato bird.war quando viene utilizzato l'obiettivo "war: war".


quando compilo il mio progetto con il nome "bird.war" ottengo una guerra che si chiama "bird.war.war".
Kalaschni

@Kalaschni usa semplicemente 'bird', non 'bird.war' - ciascuno dei vari plugin di build aggiunge automaticamente l'estensione di file appropriata (war, jar, ear)
ZachOfAllTrades

11
O più in generale, possiamo usare:<finalName>${project.artifactId}</finalName>
Guillaume Husta

Questa risposta ha risolto il mio problema in cui veniva generata la guerra di un sottomodulo con il nome del genitore, cosa che non volevo. Il problema era che l'elemento <finalName> era impostato nel POM padre. L'eliminazione di quell'elemento ha prodotto il file war generato con il nome corretto del sottomodulo.
Oliver Hernandez

In IDEA 20156 2.4 ho avuto l'ulteriore problema che continuava a generare il vecchio file war ogni volta che provavo a distribuire su un Payara Glassfish 4.1. Quando ciò accade, vai su Apri impostazioni modulo -> Artefatti -> Layout di output e rinomina il file war con il risultato desiderato. Ne avevo bisogno perché la root di contesto cambia con il nome del file war in IDEA, il che è un problema quando hai una configurazione diversa nel file .properties.
Dr4gon

25

Devi configurare il plugin di guerra:

<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>

Maggiori info qui


11
FYI: Questa risposta non è più valida (dalla versione 3.0.0 del plugin maven-war in poi). Vedi issues.apache.org/jira/browse/MWAR-373 .
Auke

<warName> funziona (almeno in war-plugin in 3.2.3) ma aggiunge sempre "- <classifier> .war" dove <classifier> è vuoto di default e può essere impostato all'interno di <configuration>. Uso <warName> $ {project.build.finalName} ## $ {buildDateTimeFile} </warName> con "buildDateTimeFile" impostato da build-helper-maven-plugin per ottenere "myApp ## 2020-05-29_10-24- 00.war ". Ciò è particolarmente utile se crei più file war (dev / test / prod) in una volta sola.
Thies

6

È possibile seguire il passaggio seguente per modificare il nome del file .war se si utilizza il progetto maven.

Apri il file pom.xml del tuo progetto maven e vai al tag <build></build>,

  1. In che dare il vostro nome desiderato tra questo tag: <finalName></finalName>.

    ex. :<finalName>krutik</finalName>

    Dopo aver distribuito questo .war sarai in grado di accedere all'URL con:
    http: // localhost: 8080 / krutik /

  2. Se desideri accedere all'URL con la barra "/", dovrai specificare il nome come di seguito:

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

    Dopo aver distribuito questo .war sarai in grado di accedere all'URL con:
    http: // localhost: 8080 / krutik / maheta


5

Cerca pom.xml> tag progetto> tag build.

Vorrei una soluzione di seguito.

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

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

Ha funzionato per me. ^^

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.