2015-12-19 5 views
2

Если добавить следующее свойство в моем POM, то maven-war-plugin использует его правильно:Maven войны-плагин игнорирует пользователя свойство war.warName

<properties> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
</properties> 

Однако, если добавить следующее свойство плагин игнорирует его (генерироваться WAR имеет имя по умолчанию, т.е. артефакта-версия):

<properties> 
    <war.warName>${project.artifactId}</war.warName> 
</properties> 

Вот две выдержки из документации maven-war-plugin:

warName:

  • Название созданной WAR.
  • Тип: java.lang.String
  • Требуется: Да
  • недвижимости
  • Пользователь: war.warName
  • Значение по умолчанию: $ {} project.build.finalName

failOnMissingWebXml:

  • Независимо от того, следует ли сбой сборки, если файл web.xml отсутствует г. Установите значение false, если вы хотите, чтобы WAR была построена без файла web.xml. Это может быть полезно, если вы создаете оверлей, у которого нет файла web.xml.
  • Тип: булево
  • С: 2,1-альфа-2
  • Обязательный: Нет
  • Пользователь недвижимости: failOnMissingWebXml
  • По умолчанию: истинно

(Источник: https://maven.apache.org/plugins/maven-war-plugin/war-mojo.html)

Почему поведение отличается от failOnMissingWebXml и??

Кроме того, если другие плагины могут использовать значение ${project.build.sourceEncoding}, почему не может maven-war-plugin использовать значение $ {project.build.finalName}?

<properties> 
    <!-- plugins use these values correctly --> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 

    <!-- not "found" by maven-war-plugin --> 
    <war.warName>${project.artifactId}</war.warName> 
    <project.build.finalName>${project.artifactId}</project.build.finalName> 
</properties> 

Большое спасибо! :)

EDIT: Начиная с версии 2.4 из maven-war-plugin war.warName работает как ожидалось, однако я до сих пор не понимаю, почему настройка project.build.finalName не работает.

+0

какая версия плагина войны maven вы используете? –

+1

Ha! У меня ничего не было в , поэтому версия по умолчанию, используемая maven, равна 2.2. Я заставляю его использовать 2.6, а war.warName используется правильно ... Спасибо. Их документация должна быть обновлена, хотя ... – nyg

ответ

2

Проблема заключается в том, просто, что вы ошибаетесь причина user property свойство предназначено для использования, как правило, из команды, как это:

mvn -Dwar.warName=xxx war:war 

Если вы хотите использовать его в файле пом вы должны использовать его как это:

<plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <warName>WhatEverYouLike</warName> 
     </configuration> 
     </plugin> 
     ... 
    </plugins> 
    </build> 
    ... 

И вы не должны использовать свойства в своем пом, чтобы определить такие вещи. Для этого лучше использовать тег конфигурации.

${project.build.finalName} следует использовать так:

<project..> 
    <build> 
    <finalName>WhatYouLIke</finalName> 
    .. 
    </build> 
</project> 

Структуру можно увидеть, если вы смотрите в maven model.

Использование ${project.build.sourceEncoding} - это просто соглашение в плагинах Maven, поэтому вы можете определить это свойство, которое подхвачено большим количеством плагинов, которые будут использоваться для кодирования источника (я должен признать, что это немного вводит в заблуждение). Первоначальная идея заключалась в том, что что-то в модели maven представляло кодировку, которая означала бы ее изменить, что на самом деле невозможно в данный момент.

+0

Спасибо, теперь это имеет больше смысла. – nyg

+0

Я не согласен с тем, что пользовательские свойства предназначены для использования только из командной строки. Потому что тот же механизм применяется, например, к maven.compiler.source. Он задается в разделе свойств и оценивается модулем maven-compiler. Пользовательское свойство 'war.warName' действительно не рассматривается плагином maven-war и даже не упоминается в документации о новых версиях плагина, таких как 3.1.0. –

+0

Вещь с 'war.WarName' проста, что она была удалена с помощью версии 3+ (https://issues.apache.org/jira/projects/MWAR/versions/12331760). Кроме того, намерение состоит в том, чтобы иметь некоторые свойства только для удобства, например, 'maven.compiler.target',' maven.compiler.source'..but, они даже не правильны и не могут привести к тому, что настройки 'target/source' недостаточно .. – khmarbaise