使用maven + netbeans定位旧的java版本而不安装旧的java版本?

时间:2014-11-08 06:20:43

标签: java maven netbeans javac java-6

我希望在Netbeans和编译期间出现错误时使用java.nio.file。*等新功能,这些功能尚未存在于Java 6中。只是在maven编译器插件配置中指定源和目标版本不起作用:maven编译源,netbeans不关心使用非Java-6的东西。

2 个答案:

答案 0 :(得分:1)

在使用Java 7和/或8进行编译时,通过设置源版本会影响两个不同的事情。无论是否安装Java 6,将源级别设置为6都将阻止您使用诸如try with resources,multi之类的功能-catch或lambda表达式。但是,仅此一项不会阻止您使用较新版本中定义的 API

要获得后者,您还需要指定引导类路径。以下代码中显示了此示例。

https://github.com/antlr/antlr4/blob/master/pom.xml#L114-L115

在该示例中,引导类路径的使用仅限于使用sonatype-oss-release进行的编译,只有要求机器才能安装旧的JRE(不一定是JDK)发布版本。此设置使新用户更容易贡献,但这意味着我必须在合并之前使用发布版本双重检查拉取请求。我相信这个项目的长期可维护性已经取得了成功。

请记住,OSX使用不同的位置安装Java 6,甚至使用与Linux和Windows使用的文件名不同的文件名,这解释了为什么路径是按照您在示例中看到的方式进行参数化的。

答案 1 :(得分:0)

好吧,似乎唯一的可能性是强制使用jdk 6.配置bootclasspath需要一个本地化的pom.xml,指向特定于机器的目录,这更糟糕。

        <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.7)</version>
                            </requireJavaVersion>
                        </rules>
                    </configuration>
                </execution>
            </executions>
        </plugin>