如何告诉Eclipse/Buildship/Gradle将依赖项添加到Modulepath

2fjabf4q  于 2023-10-18  发布在  Eclipse
关注(0)|答案(2)|浏览(124)

我正在尝试使用Eclipse,Buildship,Gradle开发Java 9应用程序。
Eclipse:氧气生成:2.2.0 Gradle:4.3.1
我正在寻找一种方法来告诉Buildship/Gradle将 * 项目和外部资源 * 添加到 Modulepath 而不是 Classpath
下面是我在配置Eclipse项目 Java Build Path 时看到的内容。

Properties for TestMain

Java Build path

Source   |   Projects   |   Libraries   |   Order and Export
                        ---------
Modulepath
   - JRE System Library [JavaSe-9]

Classpath                            
   - Project and External Dependencies
      - Access rules: No rules defined
      - External annotations: (None)
      - Native library location: (None)
         - coreutil-9.4.1.jar
         - slf4j-api-1.7.2.1.jar
         - ...

当我尝试在 * module-info.java * 中引用自动模块coreutil时,我得到错误 *coreutil无法解析为模块 *。
如果我手动将coreutil-9.4.1.jar添加到Modulepath中,那么coreutil模块就会变得可见。然而,这是一个问题,因为在某些情况下手动添加超过60个库是不切实际的。此外,每次我 * 刷新Gradle项目 * 时,它们都会从Modulepath中删除。
谢谢你的帮助
加埃坦

bbmckpt7

bbmckpt71#

在与Gradle的Donát Csikós(感谢Donát)交谈后,将以下内容添加到build.gradle文件解决了问题:

apply plugin: 'eclipse'

eclipse.classpath.file {
    whenMerged {
        entries.findAll { isModule(it) }.each { it.entryAttributes['module'] = 'true' }
    }
}

boolean isModule(entry) {
    // filter java 9 modules
    entry.kind == 'lib'  // Only libraries can be modules
}
ni65a41a

ni65a41a2#

下面是一个更通用的解决方案,其中所有项目依赖项都添加到Eclipse的模块路径中:

apply plugin: 'eclipse'

eclipse.classpath.file {
    whenMerged {
        entries.findAll { isModule(it) }.each { it.entryAttributes['module'] = 'true' }
    }
}

boolean isModule(entry) {
    return (entry instanceof org.gradle.plugins.ide.eclipse.model.ProjectDependency) ||
           (entry instanceof org.gradle.plugins.ide.eclipse.model.Library)  
}

相关问题