【问题标题】:org.json cannot be resolved to a module?org.json 无法解析为模块?
【发布时间】:2020-10-11 12:07:22
【问题描述】:

我正在学习 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)
}

我在 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 文件中?

截图:

【问题讨论】:

    标签: java visual-studio-code java-11 java-module java-platform-module-system


    【解决方案1】:

    TL;DR — 正如这个未解决的 'Cannot be resolved' errors in projects with module-info.java 问题报告的那样,vscode 在涉及 JPMS 和 module-info.java 时已经脑残了。


    冗长的版本

    根据我自己的经验,我可以亲自担保上述vscode问题的报告者报告的内容……

    ...我已经尝试过 Gradle 和 Maven...

    ...我发现 Gradle 和 Maven 会自动刷新类路径文件并删除我对它的修改,这会带回错误...

    ...需要在类路径文件中设置模块路径信息才能让 Eclipse 满意,但 Gradle 或 Maven 没有很好的方法来处理...

    这是一个 vscode 问题的证明是完全相同的项目 - 除了删除您的评论之外没有变化 - 在 IntelliJ 中编译得非常好......

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

    例如,通过将以下 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…

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

    【讨论】:

    • 感谢您的回答,我没有 xml 方面的经验,所以可以提供文件 xml 的路径,我需要使用 maven 还是 pom.xml 就足够了?
    • 能否提供您的文件夹结构的屏幕截图?
    • ...我需要使用 maven...“ -​​ @Srilakshmikanthan - 如果你还没有,你需要install Maven。 — “…或者 pom.xml 就足够了…”——如果你想让 vscode 将你的项目作为 Maven 项目来处理,那么它的根目录中必须有一个 pom.xml。 rootFormat.xml 文件在您的屏幕截图中的位置。 — “...请提供屏幕截图...” — 实际上,我已经有了。你可以在我的两张截图中看到我的项目的结构:sri .lakshmi.kanthan/src/main/java/art/… 然后三个子包位于art
    • 感谢您的回复,我复制了 xml,但它显示错误“根元素后面的文档中的标记必须是格式正确的.xml(MarkupNotRecognizedInMisc”是完整的 xml 还是我需要添加如果我需要的话,你能提供一些参考吗?
    • ...你能提供一些参考吗...“– @Srilakshmikanthan — Try this.
    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 2020-04-15
    • 2021-07-14
    • 2021-11-07
    • 2020-12-02
    相关资源
    最近更新 更多