【问题标题】:set the default jdk for maven-compiler-plugin为 maven-compiler-plugin 设置默认 jdk
【发布时间】:2013-10-24 16:11:25
【问题描述】:

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

我该怎么做?

【问题讨论】:

  • 你在项目的pom.xml中设置了java编译器版本吗?试试这个maven.apache.org/plugins/maven-compiler-plugin/examples/…
  • 这不是非常老的maven-compiler-plugin版本吗?
  • 我总是为每个项目设置它,因为它更安全。如果您要更新 jvm 级别,那么您仍然需要检查每个项目。
  • $ mvn compile -V Apache Maven 3.0.4 Maven 主页:/usr/share/maven Java 版本:1.6.0_45,供应商:Sun Microsystems Inc. Java 主页:/usr/lib/jvm/ jdk1.6.0_45/jre 默认语言环境:en_US,平台编码:UTF-8 操作系统名称:“linux”,版本:“3.2.0-35-virtual”,arch:“amd64”,家族:“unix”
  • 关于在我的项目的 pom.xml 中设置编译器版本:“我知道我可以通过在我的原始问题中包含...在每个项目的基础上进行设置”,但我们有大量项目,我不想在所有项目中维护编译器插件。想要对其进行配置以解决问题。

标签: java maven


【解决方案1】:

在您的 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.xml 中的任何位置。

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

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

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

有关详细信息,请参阅 The apache maven compiler plugin documentationSetting the source and compiler examples

【讨论】:

    【解决方案2】:

    我尝试了 ma​​ven-compiler-plugin 方法,但由于有 ma​​ven-surefire-pluginma​​ven-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 步ma​​ven-toolchain-plugin 添加到项目 pom.xmlplugins 部分。

    *如果使用 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。希望能帮助到你。我今天在这个确切的问题上花了将近半天的时间。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我使用以下设置来设置 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

        【讨论】:

          【解决方案5】:

          建议:使用最新的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

          【讨论】:

          • 来自我原来的帖子:“我知道我可以通过在插件上下文中包含源/目标标记来在每个项目的基础上设置它,但我想将 maven-compiler 配置为默认值到 jdk5 或更高版本,而无需跨大量项目执行此操作。”
          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

            基于 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>
            

            【讨论】:

              猜你喜欢
              • 2015-01-18
              • 1970-01-01
              • 1970-01-01
              • 2018-02-21
              • 1970-01-01
              • 2016-04-08
              • 1970-01-01
              • 2014-02-23
              • 2017-11-09
              相关资源
              最近更新 更多