如何告诉Eclipse/buildship/gradle将依赖关系添加到模块path



我正在尝试使用eclipse,buildship,gradle开发Java 9应用程序。

蚀:氧气BuildShip:2.2.0Gradle:4.3.1

我正在寻找一种告诉buildship/gradle将项目和外部依赖项 modulepath 而不是 classpath 。/p>

这是我配置Eclipse Project Java构建路径的表示形式的代表。

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添加到模块path中,则可以看到Coreutil模块。但是,这是一个问题,因为在某些情况下,手动添加60多个库是不切实际的。此外,每次i 刷新gradle project 都将从模块化中删除。

感谢您的帮助。

gaëtan

与gradle(感谢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
}

这是一个更通用的解决方案,其中所有项目依赖项都添加到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)  
}

最新更新