【问题标题】:How to to tell Eclipse/Buildship/Gradle to add dependencies to the Modulepath如何告诉 Eclipse/Buildship/Gradle 将依赖项添加到 Modulepath
【发布时间】:2017-12-15 03:28:27
【问题描述】:

我正在尝试使用 Eclipse、Buildship、Gradle 来开发 java 9 应用程序。

日食:氧气 建造船:2.2.0 摇篮:4.3.1

我正在寻找一种方法来告诉 Buildship/Gradle 将 Project 和 External Dependencies 添加到 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 中删除。

感谢您的帮助。

盖坦

【问题讨论】:

  • 您是否曾尝试使用 Buildship 2.2 ("Java 9 compatibility for Buildship plugins")?
  • 我还要再等一天(除非再次延期):Buildship 2.2 发布日期:2017 年 12 月 8 日,星期五
  • 不幸的是,Buildship 2.2 的行为方式完全相同。

标签: eclipse gradle dependencies java-9 buildship


【解决方案1】:

在 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
}

【讨论】:

  • 效果很好!搜索了很长时间,直到我找到了这个有用的答案。 :)
猜你喜欢
  • 2016-08-06
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多