Web*_*Inc 7 java warnings netbeans compilation path
这台机器安装了多个版本的 Java JDK 和多个 IDE 的多个版本(Netbeans、IntelliJ、Eclipse 等)。最近,我添加了 JDK 15.0.2 和 Netbeans 12.2。当尝试编译一个简单的“Hello World”时,结果如下:
ant -f C:\\Data\\NetBeans\\grading\\TestGrading -Dnb.internal.action.name=run.single -Djavac.includes=testgrading/HelloWorld.java -Drun.class=HelloWorld run-single
init:
Deleting: C:\Data\NetBeans\grading\TestGrading\build\built-jar.properties
deps-jar:
Updating property file: C:\Data\NetBeans\grading\TestGrading\build\built-jar.properties
Compiling 1 source file to C:\Data\NetBeans\grading\TestGrading\build\classes
**warning: [options] system modules path not set in conjunction with -source 11**
**1 warning**
compile-single:
run-single:
Hello World!
BUILD SUCCESSFUL (total time: 1 second)
Run Code Online (Sandbox Code Playgroud)
如您所见,该文件已编译并运行,但警告引起了我的担忧。我在搜索中找不到类似的警告...(所有警告均指“未设置引导类路径”而不是“未设置系统模块路径”
我已更新我的环境变量以反映最新的 JDK,其中包含以下条目:JAVA_HOME=C:\Program Files\Java\jdk-15.0.2
当我更新 JDK 和 IDE 时,我缺少哪些未正确更新的设置?或者我完全找错地方了?或者我是否需要完全卸载以前的版本,如果是这样,这会对使用我仍想保留的以前版本编写的以前的代码产生什么影响?
提前致谢!
我偶然发现了这个问题并解决了!虽然新安装更改了库属性中的 Java 平台,以正确指向 JDK 15 作为新版本(默认),但在源区域底部,源/二进制格式仍然显示 JDK 11。手动将其更改为JDK 15 使警告消失了。警告消息应该说明“源/二进制格式”与 Library Java Platform 不匹配 - 检查相应版本。
我对这个问题发布了一个新的答案,因为我觉得以前在这里忽略了一些重要的东西,但应该向将来遇到的读者指出。让我们先尝试回答实际问题,然后给出更详细的解释。
当我更新 JDK 和 IDE 时,我缺少哪些未正确更新的设置?或者我完全找错地方了?
此消息是(Java 编译器)的输出javac,并且当参数与启动-source的 JDK 版本不同时默认创建(自 JDK14 起)。javac没有唯一的解决方案,您必须首先考虑是否-source(以及-target)仍然满足您的需求。这意味着:
备注1:-source不能完全独立于 进行处理-target,因为第一个必须 <= 第二个(例如,您不能针对 JDK 17 开发源代码并在 JDK 8 上运行 - 这很酷,但不受支持)。
Remark2:在 Maven 中,参数命名为maven.compiler.source和maven.compiler.target,在 Gradle 中sourceCompatibility为 和targetCompatibility,我不知道 Ant 的参数(请检查下面的第三个链接)。
如果您想要/需要保留当前的兼容性设置,那么您基本上有两个选择:
-source和替换-target为--release。此选项隐式包含针对目标 JRE/JDK 的 API 版本的检查!因此该消息也会消失。--system选项。设置该参数还可以考虑 API。它大致是 的替代品,不同之处在于它不指向“rt.jar”,而是指向根目录,就像所做的那样。将其视为“旧 JAVA_HOME”选项。javac--sourcejavac-bootclasspathJAVA_HOME当然,如果您可以完全切换到更新的 JDK/JRE-source版本来运行,并且可以进行相应的调整(无论如何-target我建议使用)。--release
实际的问题(这就是我写这么多的原因)是,既没有-source也不-target包含对 API 的检查,因此出现了警告。例如(没有通过--release或进行 API 检查--system),可以同时编译-target 1.7 和引用,这已在 JDK 8 中添加。当使用较新的 JDK 运行测试时,您甚至可能在本地(CI 中都没有)注意到java.util.function.Consumer。它只是停止在生产中工作。
也可以看看:
| 归档时间: |
|
| 查看次数: |
8937 次 |
| 最近记录: |