org.json 无法解析为模块?

org.json cannot be resolved to a module?

我正在学习 Java。为了在我的应用程序中阅读 JSON,我下载了 this JSON library;这是一个自动模块。

我将该库包含在我的模块描述符中,例如:

module art
{
    exports  art.anixt;
    exports  art.coartl;
    exports  art.runeape;
    requires org.json;    // org.json cannot be resolved to a moduleJava(8389908)
}

我的 settings.json 在 vscode:

{
    "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 — 由于这个未解决的 'Cannot be resolved' errors in projects with module-info.java 问题报告,vscode 脑死亡时来到 JPMS 和 module-info.java.


long-winded版本

根据我自己的经验,我个人可以保证 above-linked vscode 期记者的报道……

…I've tried both Gradle and Maven…

…I find that Gradle and Maven will automatically refresh the classpath file and remove my modifications to it, which will bring back the errors…

…there needs to be module path information set in the classpath file in order for Eclipse to be happy, but there is no good way to do with that from Gradle or Maven…

证明这是一个 vscode 问题的是完全相同的项目——除了删除你的评论之外没有改变——在 IntelliJ 中编译得很好…

由于您的项目既不使用 Maven 也不使用 Gradle — 选择使用 file-based 依赖项管理和 lib 文件夹中的 jar — 你的情况更糟,因为你已经取消了应用任何可以解决问题的 JPMS-enabling 插件的选项。

例如,通过将以下 pom.xml 与 maven-compiler-plugin 的适当配置添加到我的项目实验版本中...

…
<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…

我已经通过帮助他们申请 that mrJar plugin mentioned in that vscode bug report 成功解决了其他 Stackers 的 JPMS 问题。因此,如果您愿意使用 Gradle 而不是 Maven,我同样可以就如何配置该插件向您提供建议。