2013-06-03 3 views
4

У меня возникла проблема с собственностью maven для каждого профиля. У меня есть два профиля, каждый из которых имеет одинаковое свойство «prop.key» с разными значениями. Когда я звоню mvn clean package -PA -PB или mvn clean package -PB -PA, оба значения используют то же значение 'B-1.0-SNAPSHOT'. Я использую maven 3.0.4.maven same property per profile

Ниже моей POM:

<?xml version="1.0" encoding="UTF-8"?> 
<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>com.test.module</groupId> 
    <artifactId>test-module</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 
    <properties> 
     <prop.key>UNKNOWN</prop.key> 
    </properties> 

    <profiles> 
     <profile> 
      <id>A</id> 
      <properties> 
       <prop.key>A-${project.version}</prop.key> 
      </properties> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-antrun-plugin</artifactId> 
         <version>1.2</version> 
         <executions> 
          <execution> 
           <id>A</id> 
           <phase>package</phase> 
           <configuration> 
            <tasks name="a" description="a-desc"> 
             <echo message="RUN A = ${prop.key}" level="info"/> 
            </tasks> 
           </configuration> 
           <goals> 
            <goal>run</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 

     <profile> 
      <id>B</id> 
      <properties> 
       <prop.key>B-${project.version}</prop.key> 
      </properties> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.apache.maven.plugins</groupId> 
         <artifactId>maven-antrun-plugin</artifactId> 
         <version>1.2</version> 
         <executions> 
          <execution> 
           <id>B</id> 
           <phase>package</phase> 
           <configuration> 
            <tasks name="b" description="b-desc"> 
             <echo message="RUN B = ${prop.key}" level="info"/> 
            </tasks> 
           </configuration> 
           <goals> 
            <goal>run</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
</project> 

Я нашел 'similar topic', но с противоположным результатом! Это ошибка или функция maven?

Благодарим вас за любые предложения и помощь.

ответ

3

Вы можете написать mvn package -PA,B для краткости.

Результат тот же: [echo] RUN A = B-1.0-SNAPSHOT и [echo] RUN B = B-1.0-SNAPSHOT

Это правильное поведение мавена.

Одно свойство может иметь только одно конкретное значение за ход. Вы можете перезаписать «значение по умолчанию» с версией в профиле. Но если вы переопределите его в двух профилях и активируете оба, один из профилей «выигрывает».

Невозможно иметь одно значение для профиля для одного и того же имущества. Профили не имеют собственной переменной. Свойства всегда глобальны.

+0

Marc von Renteln, танк для вашего комментария. Можно использовать файлы фильтрации и * .properties, но это не поможет в моем случае. Я нашел обходное решение, которое копирует каталог с текущим результатом. –

+0

@Marc, как вы решаете, какой профиль «выигрывает»? Является ли это последовательностью параметров прохождения в '-P' или что-то еще? – Mukund

0

Я думаю, вы получите это поведение, потому что последний параметр для профиля выбирается. Постарайся

mvn clean package -PA,B 

См Maven introduction to profiles.

Профили могут быть явно указаны с использованием опции -P CLI.

Этот параметр принимает аргумент, который представляет собой список профилей с запятой. Когда этот параметр указан, профили , кроме указанных в аргументе параметра, не будут активированы.

Смежные вопросы