我的系统上安装了JDK 1.6和1.7(Linux,在/ opt目录下)。 我已经在我的路径中添加了JDK 1.6的bin目录,所以这是默认使用的Java版本。
我正在开发一个需要JDK 1.7的项目和一些需要1.6的项目。以前我在Eclipse中设置了JDK 1.7设置,但是我想将这个项目转换为Maven,这样每个人都可以使用他们喜欢的编辑器。
是否可以在Maven安装/配置中指定1.7位置(而不是在POM文件中),以便默认情况下使用1.6,而在POM中指定项目时需要1.7?据我所知,每个从事项目的人都应该在他们的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]
答案 0 :(得分: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>
答案 1 :(得分:1)
您可以将名为mvn.sh
的文件放在pom.xml
附近,并将JAVA_HOME
设置为您想要的任何内容。然后,构建像./mvn clean install
这样的项目。并且一定不要将它检查到VCS。
答案 2 :(得分:1)
Maven使用JAVA_HOME系统变量中的任何版本。所以我想添加我的.bash_profile函数来在我当前的shell中交换它们,所以你可以默认离开Java 6,但是当你需要构建一个更新的项目时,你可以轻松地切换到Java 7甚至8。 / p>
Gist to Change Java Versions on Demand
如果您的终端不是bash,那么您可能需要调整此解决方案。
就我个人而言,我更喜欢在settings.xml中设置它,即使它稍微有点工作,因为它允许你在所有构建工具中使用相同的解决方案,甚至只是为了运行针对其他Java版本构建的jar。
因此,您可以在.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
}