在我的jdk.internal.loader上下文中执行主要方法(我使用IntelliJ 2018.1)时,我遇到了JPMS IntelliJ.BuiltinClassLoader的麻烦。
如果使用以下标准方法将资源加载到in模块类中
MyMainClass.class.getResourceAsStream("/some-resource")资源是未找到,因为ModuleReference不是jar,而是类路径。
[module org.ubl.scb, location=file:///home/christopher/IdeaProjects/systematik-catalogue-builder/web-anno/out/production/classes/]nameToModule映射中的所有其他条目如下所示:
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根,则可能是资源。
这是窃听器还是我漏掉了什么?
发布于 2018-04-06 04:00:01
这是与IDE相关的编译器输出问题。该项目使用分级构建。gradle构建的默认输出将创建如下所示的目录结构:
build
-classes
-java
-main
module-info.class
-libs
-resources但是,要在JPMS项目中运行测试或执行主要方法,gradle还不能工作(目前为止)。我使用内置IntelliJ编译器,它生成与gradle完全不同的输出结构。默认值如下所示:
out
-production
-classes
-some/package/name
some-resource
module-info.class如果发生变化,必须使用Build (ctrl + F9)重新构建项目,以生成此输出结构。在这种情况下,我假设缺少的“一些资源”尚未复制到IntelliJ输出结构中(可能是因为我还没有重新构建项目),所以BuiltinClassLoader不会在那里找到它。资源被复制到一个名为"classes“(与JAR相同)的目录中,这可能会让人感到困惑,但这就是它的实现方式。
IDE根本不使用Gradle生成输出..。这也会对必须添加到IDE设置中的任何编译器选项(如--add-modules )产生影响,即使它们是在gradle构建脚本中指定的。..。
https://stackoverflow.com/questions/49674206
复制相似问题