java - org.json 无法解析为模块?
问题描述
我正在学习Java。为了在我的应用程序中读取 JSON,我下载了这个 JSON 库;这是一个自动模块。
我将该库包含在我的模块描述符中,例如:
module art
{
exports art.anixt;
exports art.coartl;
exports art.runeape;
requires org.json; // org.json cannot be resolved to a moduleJava(8389908)
}
我在 vscode 中的 settings.json:
{
"files.exclude": {
"**/.classpath": true,
"**/.project": true,
"**/.settings": true,
"**/.factorypath": true
},
"java.format.settings.url": "Format.xml",
"java.format.settings.profile": "style",
"java.project.referencedLibraries": [
"lib/**/*.jar" // jar file showing in Referenced library(see screenshot)
]
}
如何在我的模块中包含 jar 文件并将其导入到我的 Java 文件中?
截屏:
解决方案
TL;DR — 由于在带有 module-info.java 问题报告的项目中这个未解决的“无法解决”错误,vscode 在涉及 JPMS 和 module-info.java 时已经脑死了。
长篇大论的版本
以我自己的经验,我可以亲自担保上述vscode问题的报告者报告的内容……</p>
„<em>...我已经尝试过 Gradle 和 Maven...</em>“</p>
…</p>
„<em>...我发现 Gradle 和 Maven 会自动刷新类路径文件并删除我对它的修改,这会带回错误...</em>“</p>
…</p>
„<em>...需要在类路径文件中设置模块路径信息才能让 Eclipse 满意,但从 Gradle 或 Maven 中没有很好的方法...</em>“</p>
证明这是一个 vscode 问题的证据是,完全相同的项目——除了删除你的评论之外没有变化——在 IntelliJ 中编译得非常好……</p>
由于您的项目既不使用 Maven 也不使用 Gradle -而是选择使用基于文件的依赖关系 mgt 和lib
文件夹中的 jar - 您的情况更糟,因为您已经消除了应用任何支持 JPMS 的插件的选项,这些插件可以解决问题。
例如,通过将以下 pom.xml 与适当的配置添加maven-compiler-plugin
到我的项目的实验版本中......</p>
…
<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20200518</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<compilerArgs>
<arg>-Xlint:unchecked</arg>
<arg>--add-modules</arg>
<arg>org.json</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
…
…Maven 施展魔法,成功处理了 module-info.java…</p>
通过帮助他们应用该vscode 错误报告中提到的mrJar插件,我已经成功解决了其他 Stackers 的 JPMS 问题。因此,如果您愿意使用 Gradle 而不是 Maven,我同样可以建议您如何配置该插件。