我刚刚在一个新的ubuntu系统上安装了maven,其中包括maven-compiler-plugin。我有一个以前构建正常的java项目,默认为javac源和目标为5(jdk 1.5)。但是,该项目现在正尝试在新系统上使用jdk1.3进行编译。有没有一种简单的方法可以配置系统使用> = jdk5?
以下是系统的一些配置细节:
$ java -version
java version "1.6.0_45"
$ dpkg -s maven
Package: maven
Status: install ok installed
Priority: optional
Section: java
Installed-Size: 1489
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: all
Version: 3.0.4-2
$ dpkg -s libmaven-compiler-plugin-java
Package: libmaven-compiler-plugin-java
Status: install ok installed
Priority: optional
Section: java
Installed-Size: 75
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: all
Source: maven-compiler-plugin
Version: 2.0.2-6
我检查了maven-compiler-plugin-2.0.2.pom文件,plexus-compiler-javac.originalVersion等设置为1.5.3。
我知道我可以在每个项目的基础上通过在插件上下文中包含源/目标标记来设置它,但是我想将maven-compiler配置为默认为jdk5或更高版本而不必跨越大量的项目。
我该怎么做?
答案 0 :(得分:19)
在你的pom中指定以下命令将编译器设置为JDK5:
<properties>
<maven.compiler.source>1.5</maven.compiler.source>
<maven.compiler.target>1.5</maven.compiler.target>
</properties>
即
<project>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
...
</project>
我在依赖项之前指定了我的,尽管只要它是项目元素的一部分,你应该能够将它放在pom中的任何位置。
我之前遇到过与Maven类似的问题,这为我解决了这个问题。基本上它的作用是将-source
和-target
标志设置为指定的值并将其传递给编译器。较新的插件默认为1.5。
为了使用默认方法而不指定属性,您需要运行更高版本的Maven。
我想您也可以通过IDE设置模板,将其包含在所有新的pom文件中。当然实际的实现取决于你的IDE ......
有关详细信息,请参阅The apache maven compiler plugin documentation以及Setting the source and compiler examples。
答案 1 :(得分:6)
我尝试了 maven-compiler-plugin 方法,因为有像 maven-surefire-plugin 和 maven-cobertura-plugin这样的插件,这很麻烦/ strong>由于不兼容问题仍然失败。
更好的方法是使用maven-toolchain-plugin。
第1步 创建 /.m2 / toolchains.xml
<?xml version="1.0" encoding="UTF8"?>
<toolchains>
<!-- JDK toolchains -->
<toolchain>
<type>jdk</type>
<provides>
<version>1.8</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>1.7</version>
<vendor>sun</vendor>
</provides>
<configuration>
<jdkHome>/Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home</jdkHome>
</configuration>
</toolchain>
<toolchain>
<type>jdk</type>
<provides>
<version>1.6</version>
<vendor>apple</vendor>
</provides>
<configuration>
<jdkHome>/Library/Java/JavaVirtualMachines/1.6.0_65-b14-462.jdk/Contents/Home</jdkHome>
</configuration>
</toolchain>
<!-- other toolchains -->
<!--
<toolchain>
<type>netbeans</type>
<provides>
<version>5.5</version>
</provides>
<configuration>
<installDir>/path/to/netbeans/5.5</installDir>
</configuration>
</toolchain>
-->
第2步 将 maven-toolchain-plugin 添加到项目 pom.xml 中的插件部分。
*如果使用maven 3,请确保进入 pluginManagement 以及*
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-toolchains-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>toolchain</goal>
</goals>
</execution>
</executions>
<configuration>
<toolchains>
<jdk>
<version>1.7</version>
<vendor>sun</vendor>
</jdk>
</toolchains>
</configuration>
</plugin>
Voila所有其他插件选择正确的 JDK 。希望能帮助到你。我今天在这个问题上花了差不多半天。
答案 2 :(得分:1)
旧版本的maven-compiler插件(如2.0.2-6)中,源和目标的默认值为1.3。 使用至少3.0版本的Maven编译器插件将其恢复到原始行为,或者只是配置该插件以获取适当值的源和目标。
答案 3 :(得分:1)
我使用以下设置来设置maven默认的java编译器版本。
首先,修改maven settings.xml:
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
第二,在eclipse首选项中,将java home指向jdk home
答案 4 :(得分:0)
建议:使用最新的maven编译器插件。
要更改默认值,您应设置源和目标。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
答案 5 :(得分:0)
最简单的解决方案是使用最新版本的Maven(3.1.1),特别是为您定义maven的配置和版本的所有项目创建父pom.xml文件 - 通过pluginManagement编译器插件或更好的所有插件。
答案 6 :(得分:0)
基于Chinto's answer,我将其运行在Windows计算机上:
<?xml version="1.0" encoding="UTF8"?>
<toolchains>
<!-- JDK toolchains -->
<toolchain>
<type>jdk</type>
<provides>
<version>1.8</version>
<vendor>openjdk</vendor>
</provides>
<configuration>
<jdkHome>C:\path\to\openJDK1.8.0</jdkHome>
</configuration>
</toolchain>
</toolchains>