2013-08-08 1 views
7

У меня есть оба JDK 1.6 и 1.7, установленные в моей системе (Linux, в каталоге/opt). Я добавил каталог bin для JDK 1.6 в свой путь, так что это версия Java, используемая по умолчанию.Как настроить Maven для использования JDK6 по умолчанию, но JDK7 по мере необходимости

Я работаю над проектом, который требует JDK 1.7 и некоторых, для которых требуется 1.6. Раньше у меня были настройки JDK 1.7 в Eclipse, но я хотел преобразовать этот проект в Maven, чтобы каждый мог использовать свой предпочтительный редактор.

Возможно ли указать местоположение 1.7 на установке/конфигурации Maven (а не в файле POM), так что по умолчанию он использует 1.6, а 1.7 при указании проекта требуется его в POM? Насколько мне известно, все, кто работает над проектом, должны иметь одинаковое содержимое в своих файлах POM, поэтому я не хочу устанавливать местоположение каталога Java 7 здесь (так как это будет отличаться на всех компьютерах).

$ mvn --version 
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 13:51:28+0000) 
Maven home: /opt/apache-maven-3.0.5 
Java version: 1.6.0_45, vendor: Sun Microsystems Inc. 
Java home: /opt/jdk1.6.0_45/jre 
Default locale: en_GB, platform encoding: UTF-8 
OS name: "linux", version: "3.8.0-27-generic", arch: "amd64", family: "unix" 

Добавление следующее:

<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> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.6</version> 
      <configuration> 
       <outputDirectory>${project.build.outputDirectory}/resources</outputDirectory> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

приводит:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project golemlite: Fatal error compiling: invalid target release: 1.7 -> [Help 1] 

ответ

4

Взгляните here. Вы можете установить свойство в своем файле settings.xml и использовать его в pom. Имейте в виду, что каждый должен будет определить это свойство.

Что касается вашего примера:

<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> 
     <fork>true</fork> 
     <executable>${JAVA_1_7_HOME}/bin/javac</executable> 
    </configuration> 
    </plugin> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.6</version> 
     <configuration> 
      <outputDirectory>${project.build.outputDirectory}/resources</outputDirectory> 
     </configuration> 
    </plugin> 
</plugins> 
</build> 

и в настройках:

<settings> 
    [...] 
    <profiles> 
    [...] 
    <profile> 
     <id>compiler</id> 
     <properties> 
      <JAVA_1_7_HOME>/path/to/jdk7</JAVA_1_7_HOME> 
     </properties> 
    </profile> 
    </profiles> 
    [...] 
    <activeProfiles> 
    <activeProfile>compiler</activeProfile> 
    </activeProfiles> 
</settings> 
+0

Это выглядит путь ; предположительно 'settings.xml' должен храниться вне VCS (устанавливается как отдельная загрузка)? – ataulm

+0

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

+1

Ах, даже если установить переменную окружения достаточно, это выглядит так: во избежание создания файла настроек (но требующего, чтобы каждый разработчик установил эту переменную) – ataulm

1

Вы можете поместить файл с именем mvn.sh возле вашего pom.xml, в котором вы установили JAVA_HOME все, что вы хотите. Затем создайте проект вроде ./mvn clean install. И не забудьте проверить его на VCS.

1

Maven использует любую версию в вашей системной переменной JAVA_HOME. Поэтому мне нравится добавлять в мои .bash_profile функции для обмена между ними только в моей текущей оболочке, поэтому вы можете оставить Java 6 по умолчанию, но позвольте себе тривиально переключиться на Java 7 или даже на 8, когда вам нужно построить новый проект.

Gist to Change Java Versions on Demand

Если ваш терминал не колотить, то вам, возможно, потребуется изменить это решение.

Лично я предпочитаю это устанавливать его в вашем файле settings.xml, хотя он немного больше работает, поскольку он позволяет использовать одно и то же решение для всех инструментов сборки и даже для запуска встроенных jars-тагов для других версий Java.

Так решение можно добавлять что-то вроде этого, чтобы ваш .bash_profile (ясно настраивая пути соответственно туда, где когда-либо установлены версии Java на вашем компьютере):

function java6 
{ 
    JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0_65-b14-462.jdk/Contents/Home 
    export JAVA_HOME 
} 

function java7 
{ 
    JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home 
    export JAVA_HOME 
}