14

我刚刚在一个新的 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 或更高版本,而不必在大量的项目。

我怎样才能做到这一点?

4

7 回答 7

19

在您的 pom 中指定以下内容以将编译器设置为 JDK5:

<properties>
    <maven.compiler.source>1.5</maven.compiler.source>
    <maven.compiler.target>1.5</maven.compiler.target>
</properties>

IE

<project>
    <properties>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    ...
  </project>

我在依赖项之前指定了我的,尽管只要它是项目元素的一部分,你应该能够将它放在 pom.xml 中的任何位置。

我之前在 Maven 上遇到过类似的问题,这为我解决了这个问题。本质上,它所做的是将-sourceand-target标志设置为指定的值并将其传递给编译器。较新的插件默认为 1.5。

为了在指定属性的情况下使用默认方法,您需要运行更高版本的 Maven。

我想你也可以通过你的 IDE 设置一个模板,将它包含在所有新的 pom 文件中。当然,实际的实现将取决于您的 IDE ......

有关更多详细信息,请参阅apache maven 编译器插件文档以及设置源代码和编译器示例

于 2013-10-24T17:45:18.937 回答
7

我尝试了maven-compiler-plugin方法,但它被证明很麻烦,因为有像maven-surefire-pluginmaven-cobertura-plugin这样的插件由于不兼容问题仍然失败。

更好的方法是使用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中的plugins部分。

*如果使用 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>

瞧,您的所有其他插件都选择了正确的JDK。希望能帮助到你。我今天在这个确切的问题上花了将近半天的时间。

于 2015-01-20T05:40:52.237 回答
1

在旧版本的 maven-compiler 插件(如 2.0.2-6)中,源和目标的默认值是 1.3。至少使用 3.0 版本的 Maven 编译器插件来将其恢复为原始行为,或者只需配置该插件以将源和目标设置为适当的值。

于 2013-10-24T16:21:02.323 回答
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

于 2017-02-19T03:47:26.110 回答
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>

更多信息:maven-compiler-plugin

于 2013-10-24T16:26:32.827 回答
0

最简单的解决方案是使用最新版本的 Maven (3.1.1),特别是为您定义 maven-compiler-plugin 的配置和版本的所有项目创建一个父 pom.xml 文件通过 pluginManagement 或更好的所有插件。

于 2013-10-24T17:28:32.110 回答
0

根据Chinto 的 回答,我让它在我的 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>
于 2020-07-16T15:37:46.253 回答