Maven: Jak zmienić nazwę pliku wojennego dla projektu?


94

Mam projekt birdz następującymi komponentami wpom.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>

a moduł sieciowy jako

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

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

moduł web tworzy plik wojenny o nazwie web-1.0-SNAPSHOT.war
Jak mogę, używając maven zmienić to na bird.war?


Odpowiedzi:


212

Możesz użyć następujących elementów w module sieciowym, który generuje wojnę:

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

Prowadzi to do pliku o nazwie bird.war, który jest tworzony, gdy używany jest cel „wojna: wojna”.


kiedy kompiluję swój projekt o nazwie „bird.war” otrzymuję wojnę o nazwie „bird.war.war”.
Kalaschni

@Kalaschni po prostu użyj „bird”, a nie „bird.war” - każda z różnych wtyczek do kompilacji automatycznie dodaje odpowiednie rozszerzenie pliku (war, jar, ear)
ZachOfAllTrades

11
Lub bardziej ogólnie możemy użyć:<finalName>${project.artifactId}</finalName>
Guillaume Husta

Ta odpowiedź rozwiązała mój problem, w którym wojna podmodułu była generowana z imieniem rodzica, czego nie chciałem. Problem polegał na tym, że element <finalName> został ustawiony w nadrzędnym POM. Usunięcie tego elementu spowodowało wygenerowanie pliku wojny z poprawną nazwą podmodułu.
Oliver Hernandez

W IDEA 20156 2.4 miałem dodatkowy problem polegający na tym, że za każdym razem, gdy próbowałem wdrożyć na Payara Glassfish 4.1, generował stary plik wojenny. Kiedy to się stanie, przejdź do Otwórz ustawienia modułu -> Artefakty -> Układ wyjściowy i zmień nazwę pliku wojny na pożądany wynik. Potrzebowałem tego, ponieważ kontekstowy katalog główny zmienia się wraz z nazwą pliku wojny w IDEA, co jest uciążliwe, gdy masz inny skonfigurowany w pliku .properties.
Dr4gon

26

Musisz skonfigurować wtyczkę wojny:

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

Więcej informacji tutaj


11
FYI: Ta odpowiedź jest już nieaktualna (od wersji maven-war-plugin 3.0.0 i nowszych). Zobacz issue.apache.org/jira/browse/MWAR-373 .
Auke,

<warName> działa (przynajmniej w war-pluginie w 3.2.3), ale zawsze dodaje "- <classifier> .war", gdzie <classifier> jest domyślnie pusty i można go ustawić w <configuration>. Używam <warName> $ {project.build.finalName} ## $ {buildDateTimeFile} </warName> z „buildDateTimeFile” ustawionym przez build-helper-maven-plugin, aby uzyskać „myApp ## 2020-05-29_10-24- 00. wojna ”. Jest to szczególnie przydatne, jeśli tworzysz wiele plików wojennych (dev / test / prod) za jednym razem.
Thies

6

Możesz wykonać poniższy krok, aby zmodyfikować nazwę pliku .war, jeśli używasz projektu maven.

Otwórz plik pom.xml swojego projektu maven i przejdź do tagu <build></build>,

  1. W które dają pożądany nazwę między tym tagiem: <finalName></finalName>.

    dawny. :<finalName>krutik</finalName>

    Po wdrożeniu tego pliku .war będziesz mógł uzyskać dostęp do adresu URL za pomocą:
    http: // localhost: 8080 / krutik /

  2. Jeśli chcesz uzyskać dostęp do adresu URL za pomocą ukośnika „/” , musisz podać nazwę, jak poniżej:

    np .: <finalName>krutik#maheta</finalName>

    Po wdrożeniu tego pliku .war będziesz mógł uzyskać dostęp do adresu URL za pomocą:
    http: // localhost: 8080 / krutik / maheta


5

Wyszukaj pom.xml> tag projektu> tag kompilacji.

Chciałbym rozwiązać poniżej.

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

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

Pracował dla mnie. ^^

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.