2015-10-27 6 views
6

У меня есть следующий pom.xml:Maven ресурсов Фильтрация со свойствами профиля

<project 
    xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>mycompany</groupId> 
    <artifactId>resource-fail</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <properties> 
     <foo.bar>BazBat</foo.bar> 
    </properties> 
    <build> 
     <resources> 
      <resource> 
       <filtering>true</filtering> 
       <directory>src/main/resources</directory> 
      </resource> 
     </resources> 
    </build> 
    <profiles> 
     <profile> 
      <id>Development</id> 
      <!-- 
      <activation> 
       <activeByDefault>true</activeByDefault> 
      </activation> 
      --> 
      <properties> 
       <foo.bar>Development</foo.bar> 
      </properties> 
     </profile> 
    </profiles> 
</project> 

Обратите внимание, что activation элемент на profile закомментирована

У меня также есть следующие в src/main/java/application.properties

myproperty=${foo.bar} 

Так что я ожидаю, что Maven просто заменит ${foo.bar} на BazBat, если профиль развития не activiated, то я ожидаю Maven заменить ${foo.bar} с Development

Когда я бегу mvn package он устанавливает значение BazBat. Хорошо, фильтрация ресурсов работает должным образом.

Однако, когда я бегу mvn package -P Development он устанавливает значение BazBat

запутывает еще больше, если раскомментировать activation элемент на профиль и запустить mvn package он установит ${foo.bar} в Development

Я даже запустить mvn help:active-profiles package, чтобы он выводил имя активного профиля, и в обоих сценариях выше он говорит, что профиль разработки активен, но фильтрация по-прежнему не работает без установленного флага activeByDefault.

Подводя итог:

  • Maven правильно переопределяет свойства со значениями из профиля, если профиль activeByDefault
  • Maven делает не переопределить свойство, если я активировать профиль с помощью переключателя командной строки

Что происходит?

Моя среда:

> mvn -version 
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T11:29:23-06:00) 
Maven home: C:\apache-maven-3.2.5 
Java version: 1.8.0_65, vendor: Oracle Corporation 
Java home: C:\Program Files\Java\jdk1.8.0_65\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos" 

Update: Я обновлен до последней мавена (3.3.3) - проблема остается. Моя новая среда:

> mvn -version 
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T06:57:37-05:00) 
Maven home: C:\apache-maven-3.3.3 
Java version: 1.8.0_65, vendor: Oracle Corporation 
Java home: C:\Program Files\Java\jdk1.8.0_65\jre 
Default locale: en_US, platform encoding: Cp1252 
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos" 

ответ

-2

Вы должны удалить пространство между -P и развитием при выполнении: МВНА пакета -PDevelopment