首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDK 9+ BuiltinClassLoader ModuleReference解决方案将使用类路径(而不是Jar)查找参考资料

JDK 9+ BuiltinClassLoader ModuleReference解决方案将使用类路径(而不是Jar)查找参考资料
EN

Stack Overflow用户
提问于 2018-04-05 13:56:22
回答 1查看 376关注 0票数 0

在我的jdk.internal.loader上下文中执行主要方法(我使用IntelliJ 2018.1)时,我遇到了JPMS IntelliJ.BuiltinClassLoader的麻烦。

如果使用以下标准方法将资源加载到in模块类中

代码语言:javascript
复制
 MyMainClass.class.getResourceAsStream("/some-resource")

资源是未找到,因为ModuleReference不是jar,而是类路径。

代码语言:javascript
复制
 [module org.ubl.scb, location=file:///home/christopher/IdeaProjects/systematik-catalogue-builder/web-anno/out/production/classes/]

nameToModule映射中的所有其他条目如下所示:

代码语言:javascript
复制
key = "logback.core"
value = "[module logback.core, location=file:///home/christopher/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar]"

当然,类中永远找不到资源,但如果位置是jar根,则可能是资源。

这是窃听器还是我漏掉了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-04-06 04:00:01

这是与IDE相关的编译器输出问题。该项目使用分级构建。gradle构建的默认输出将创建如下所示的目录结构:

代码语言:javascript
复制
build
 -classes
   -java
      -main
       module-info.class  
 -libs
 -resources

但是,要在JPMS项目中运行测试或执行主要方法,gradle还不能工作(目前为止)。我使用内置IntelliJ编译器,它生成与gradle完全不同的输出结构。默认值如下所示:

代码语言:javascript
复制
out
  -production
    -classes
       -some/package/name
       some-resource
       module-info.class

如果发生变化,必须使用Build (ctrl + F9)重新构建项目,以生成此输出结构。在这种情况下,我假设缺少的“一些资源”尚未复制到IntelliJ输出结构中(可能是因为我还没有重新构建项目),所以BuiltinClassLoader不会在那里找到它。资源被复制到一个名为"classes“(与JAR相同)的目录中,这可能会让人感到困惑,但这就是它的实现方式。

IDE根本不使用Gradle生成输出..。这也会对必须添加到IDE设置中的任何编译器选项(如--add-modules )产生影响,即使它们是在gradle构建脚本中指定的。..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49674206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档