首页 > 解决方案 > 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 文件中?

截屏:

截屏

标签: javavisual-studio-codejava-11java-modulejava-platform-module-system

解决方案


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>

module-info.java 中没有问题

由于您的项目既不使用 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>

module-info.java 中没有问题

通过帮助他们应用该vscode 错误报告中提到的mrJar插件,我已经成功解决了其他 Stackers 的 JPMS 问题。因此,如果您愿意使用 Gradle 而不是 Maven,我同样可以建议您如何配置该插件。


推荐阅读