代码之家  ›  专栏  ›  技术社区  ›  kinsley kajiva

Java Gradle缺少已存在或已导入的库模式->任务:compileJava

  •  1
  • kinsley kajiva  · 技术社区  · 2 年前

    所以我在Intelli J Idea中的许多基于JavaFX Gradle的项目中都遇到了这些问题。这迫使我不得不手动下载库文件,并将它们作为解决方案纳入我的项目。

    我做的gradle项目在我做项目的时候总是失败 > Task :compileJava 例如,在IDE中,让我产生问题的是,我已经成功地从maven导入了socket io库 implementation 'io.socket:socket.io-client:2.0.1' ,我成功地导入了它,并为它编写了一些示例代码,我还添加了

    requires engine.io.client;
        requires socket.io.client;
    

    在模块信息文件中。所以当它运行的时间失败时

    error: module not found: socket.io.client
        requires socket.io.client;
       error: module not found: engine.io.client
        requires engine.io.client;
    

    我在JDK 13、16、17上试过,看看我是否遗漏了一些东西,但仍然无法运行,所以我现在注意到,在我之前的JavaFX项目中,我成功地摆脱了这种趋势。

    所以,如果有人知道Gradle设置有什么问题,请帮助。

    1 回复  |  直到 2 年前
        1
  •  1
  •   jewelsea    2 年前

    这个答案概括了一种方法,而不是具体的解决方案。

    socket.io.client engine.io.client 不是模块名。

    这个 socket.io-client library Java平台不是模块化的(据我所知),所以它将是一个 automatic module .

    模块的名称将从jar名称派生。我不知道模块名称的确切翻译 . - 可以重新映射(或不映射)以使模块名有效的字符。首先尝试确切的Jar文件名。每个jar只能有一个模块。

    除了需要正确的名称外,jar还需要位于模块路径上。Maven将为自动模块自动执行此操作,Gradle不会。我不是Gradle的专家,所以不会为Gradle提供建议。

    如果您在模块信息中使用了正确的名称,并确保jar位于模块路径上,那么它可能会工作,或者它可能与Java模块系统不兼容,您不容易修复(即,损坏的模块必须由模块维护人员修复)。

    您可以向库维护人员提出一个问题,供他们创建 module-info.java 并更新关于如何在Java模块环境中使用其库的文档。

    如果您试图使用的库在用作模块时与Java模块系统不兼容,那么您可以尝试通过删除 模块信息。JAVA 并添加适当的命令行开关。要了解如何做到这一点,请参阅 openjfx.io .

    推荐文章