如何在NetBeans 8上使用Maven项目的旧版Java(不是默认版本)

时间:2014-11-21 21:34:31

标签: java maven netbeans

我需要使用Java 6,但即使在我完成所有配置之后,NetBeans也没有使用它。它使用我的IDE的Java 8默认运行Maven。相同的配置在Eclipse上运行良好,所以我不知道我做错了什么。

我不想在nb-configuration.xml中定义编译器,因为我必须提交文件。我希望NetBeans能够从POM中得到它。

一般信息:

  • 我正在使用在Java 8上运行的NetBeans 8.0.1(完全更新)
  • NetBeans 8需要JDK 7+才能工作
  • 使用Maven 3.2.3,但嵌入式(Maven 3.0.5也不起作用)
  • 所有Maven插件都是最新的

要重现,只需在NetBeans中创建任何类型的Maven项目。在我的情况下,我尝试使用Java,Web和EJB,但没有一个工作。

下图显示JDK已正确添加到IDE中。

工具> Java平台

添加了JDK 1.6。

enter image description here

我尝试过的POM配置:

属性

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

编译器插件

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
        </configuration>
    </plugin>

Enforcer插件

执行Java 6会出现以下错误:

Detected JDK Version: 1.8.0-25 is not in the allowed range [1.6,1.7).
------------------------------------------------------------------------
BUILD FAILURE

执行者的配置:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>1.3.1</version>
        <executions>
            <execution>
                <id>enforce-versions</id>
                <goals>
                    <goal>enforce</goal>
                </goals>
                <configuration>
                    <rules>
                        <requireJavaVersion>
                            <version>[1.6,1.7)</version>
                        </requireJavaVersion>
                    </rules>
                </configuration>
            </execution>
        </executions>
    </plugin>

测试Java 6的代码

以下代码编译:

import java.nio.file.Files;
import java.time.LocalTime;

public class JavaVersionChecker {

    public static void main(String[] args) {

        System.out.println(Files.class); // Java 7 API
        System.out.println("Time: " + LocalTime.now()); // Java 8 API

        // Print Java version
        System.out.println(System.getProperty("java.version"));
    }

}

测试输出

使用Java 7和8 API编译测试代码,但只接受Java 6。

------------------------------------------------------------------------
Building java6_project 1.0-SNAPSHOT
------------------------------------------------------------------------

--- exec-maven-plugin:1.2.1:exec (default-cli) @ java6_project ---
class java.nio.file.Files
Time: 19:24:05.997
1.8.0_25
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 0.610 s
Finished at: 2014-11-21T19:24:06-02:00
Final Memory: 6M/123M
------------------------------------------------------------------------

IDE应检测到JDK 6

enter image description here

2 个答案:

答案 0 :(得分:3)

根据评论的建议,我使用提示属性进行配置工作,该属性在生成的 nb-configuration.xml 中也有很好的记录。

添加到pom.xml的配置:

<properties>
    <netbeans.hint.jdkPlatform>JDK_1.6</netbeans.hint.jdkPlatform>
</properties>

据我所知,NetBeans的编译版本需要通过专有参数设置,设置非常简单。

有用的nb-configuration.xml详细信息:

  

影响IDE各个部分的属性,尤其是代码   格式化等。您可以复制并粘贴单个   属性,进入pom.xml文件,IDE将接收它们。那   多个项目可以共享相同的设置(对于   格式化规则例如)。此处定义的任何值都将覆盖   pom.xml文件的值,但仅适用于当前项目。

答案 1 :(得分:0)

此错误是由nb-configuration.xml中的旧条目引起的

按照@BonanzaOne的建议将此属性添加到pom.xml对我来说没有用。

通过更改

<netbeans.hint.jdkPlatform>JDK_1.6.0_34</netbeans.hint.jdkPlatform>

<netbeans.hint.jdkPlatform>JDK_1.6</netbeans.hint.jdkPlatform>

直接在nb-configuration.xml中,Netbeans自动选择现有的JDK 1.6。