Maven: Как переименовать файл war для проекта?

93

У меня есть проект birdсо следующими компонентами вpom.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>

и веб-модуль как

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

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

веб-модуль создает файл войны с именем. web-1.0-SNAPSHOT.war
Как я могу переименовать его с помощью maven в bird.war?

мечтатель
источник
Это помогает? stackoverflow.com/q/3265544/422353
madth3

Ответы:

210

Вы можете использовать следующее в веб-модуле, который производит войну:

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

Это приводит к созданию файла с именем bird.war, когда используется цель «war: war».

Себастьян Ле Каллоннек
источник
когда я компилирую свой проект с именем «bird.war», я получаю войну с именем «bird.war.war».
Калашни
@Kalaschni просто используйте bird, а не bird.war - каждый из различных плагинов сборки автоматически добавляет соответствующее расширение файла (war, jar, ear).
ZachOfAllTrades
11
Или, в более общем смысле, мы можем использовать:<finalName>${project.artifactId}</finalName>
Гийом Хуста
Этот ответ решил мою проблему, когда с именем родителя генерировалась война подмодуля, чего я не хотел. Проблема заключалась в том, что элемент <finalName> был установлен в родительском POM. Удаление этого элемента привело к созданию файла войны с правильным именем подмодуля.
Оливер Эрнандес,
В IDEA 20156 2.4 у меня была дополнительная проблема, заключающаяся в том, что он продолжал генерировать старый файл войны каждый раз, когда я пытался развернуть на Payara Glassfish 4.1. Когда это произойдет, перейдите в «Настройки открытого модуля» -> «Артефакты» -> «Макет вывода» и переименуйте файл войны на желаемый результат. Мне это было нужно, потому что корень контекста изменяется на имя файла войны в IDEA, что является проблемой, когда у вас есть другой настроенный файл .properties.
Dr4gon
26

Вам необходимо настроить плагин войны:

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

Больше информации здесь

Андрес Оларте
источник
11
К вашему сведению: этот ответ больше недействителен (начиная с версии maven-war-plugin 3.0.0 и новее). См. Issues.apache.org/jira/browse/MWAR-373 .
Auke
<warName> работает (по крайней мере, в war-plugin в 3.2.3), но всегда добавляет "- <classifier> .war", где <classifier> по умолчанию пуст и может быть установлен внутри <configuration>. Я использую <warName> $ {project.build.finalName} ## $ {buildDateTimeFile} </warName> с «buildDateTimeFile», установленным build-helper-maven-plugin, чтобы получить «myApp ## 2020-05-29_10-24- 00.war ». Это особенно полезно, если вы создаете несколько файлов war (dev / test / prod) за один раз.
Thies
6

Вы можете выполнить следующий шаг, чтобы изменить имя файла .war, если вы используете проект maven.

Откройте файл pom.xml вашего проекта maven и перейдите к тегу <build></build>,

  1. В том , что дать желаемое имя между этим тегом: <finalName></finalName>.

    напр. :<finalName>krutik</finalName>

    После развертывания этого .war вы сможете получить доступ к URL-
    адресу: http: // localhost: 8080 / krutik /

  2. Если вы хотите получить доступ к URL-адресу с косой чертой '/' вам нужно будет указать имя, как показано ниже:

    пример: <finalName>krutik#maheta</finalName>

    После развертывания этого .war вы сможете получить доступ к URL-адресу с помощью:
    http: // localhost: 8080 / krutik / maheta

Крутик
источник
5

Поиск pom.xml> тег проекта> тег сборки.

Я хотел бы найти решение ниже.

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

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

Работал у меня. ^^

Bamossza
источник