2016-01-05 6 views
2

Я знаю, что есть некоторые связанные темы, но все же я не могу понять, как это сделать.Maven Build Profile Activation

Я изучаю maven и в настоящее время в процессе создания профилей сборки. Я хочу, чтобы maven автоматически обнаруживал текущую установленную версию java на моей машине. Скажем, я работаю в нашем офисе, который использует (jdk7) или дом (jdk8), я хочу <source> и <target> элементов maven-compiler-plugin pom.xml для автоматического обнаружения java -version независимо от окружающей среды (офис/дома). Я читал о activation, но не могу полностью понять цель.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>${jdk.version}</source> 
       <target>${jdk.version}</target> 
      </configuration>  
     </plugin> 
    </plugins> 
    </build> 
+0

Не спрашивайте ваше намерение здесь, но почему вы работаете против java7? Последнее публичное обновление было в 2015 году, его время для продолжения. – Scorpio

ответ

1

Привет Я не думаю, что вы можете иметь свой билд, окружение знает автоматически, используя только по умолчанию, вам нужна помощь профилей и их возможность активации см here. Что вы можете сделать, это ввести два разных профиля, в каждом профиле вы можете определить желаемый JDK, и он будет активирован для вашего присутствующего, тогда вы можете настроить плагин компилятора с разными источниками/мишенями или просто установить разные значения для свойства aa, которое будет указывать версию java. Пример:

<profiles> 
<profile> 
    <id>java8</id> 
    <activation> 
     <jdk>1.8</jdk> 
    </activation> 
    <build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration>  
     </plugin> 
    </plugins> 
    </build> 
    </profile> 
<profile> 
    <id>java7</id> 
    <activation> 
     <jdk>1.7</jdk> 
    </activation> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration>  
     </plugin> 
    </plugins> 
    </build> 
    </profile> 
</profiles> 

Надежда, что помогает :)

0

Вы хотите объявить два взаимоисключающих профилей, один для jdk7 строит и один для jdk8 строит. Каждая декларация профиля имеет две важные части:

Элемент activation как условный, и вложен внутри. Включен или отключен ваш профиль? Вам необходимо настроить активацию на основе jdk. Пример для jdk7 профиля:

<activation> 
    <jdk>1.7</jdk> 
</activation> 

Далее вам необходимо определить свойство или свойства, которые получают набор, когда профиль активен. Пример jdk7:

<properties> 
    <jdk.version>1.7<jdk.version> 
</properties> 

Оба этих секций получают в сочетании с id элемента (например, <id>jdk7</id>) и вложенными в пределах profile элемента.

Если у вас возникли проблемы с активацией активации jdk, я бы предложил экспериментировать с явным триггером, например, вызывать maven с помощью mvn -P jdk7.

Из звуков, вы хотите, чтобы jdk7 и профиль jdk8 определялись в пределах вашего pom.xml. Но другой вариант состоит в том, чтобы иметь единственный профиль, который всегда включен, но определить свойство jdk.version для профиля по-разному внутри вашего файла ~/.m2/settings.xml. Файл settings.xml в офисе будет иметь свойства jdk7; дома у него будет jdk8.

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

+0

Я попытался изменить значение jdk активации на 1.4, чтобы проверить и почему я все еще получаю значение jdk.version, которое равно 1.7? – fuzzy28

+0

Если вы установите значение активации равным 1.4, свойство не будет установлено, если ваша версия jdk не равна 1.4.И если он будет установлен, он будет просто установлен в значение свойства, определенное в элементе ''. Какова была фактическая версия jdk, используемая для запуска теста? Какова была ценность вашего элемента ''? –

0

Для Java 9 можно использовать следующие профили.

<profiles> 
     <profile> 
      <id>java8</id> 
      <activation> 
       <jdk>1.8</jdk> 
      </activation> 
      (...) 
     </profile> 
     <profile> 
      <id>java9</id> 
      <activation> 
       <jdk>9</jdk> 
      </activation> 
      (...) 
     </profile> 
    </profiles>