【发布时间】:2017-04-23 16:40:22
【问题描述】:
我试图让我的应用程序使用 Java 9 运行,但不幸的是,当它尝试使用 classLoader.getResource(name) 加载资源时,一个普通的 jar 依赖项会得到一个 null。
这当然适用于 Java 8。
我使用模块文件声明了对相关模块的依赖关系,通过其 jar 名称(糟糕)引用模块的名称,并使用 @987654323 按原样添加了 jar(Java 9 没有自定义) @ 选项。
这是我的大概模块文件声明:
module my.mod {
requires ivy; // the file is called ivy-2.4.0.jar
}
我用这个命令运行:
java --module-path my-mod.jar:ivy-2.4.0.jar -m my.mod
当我运行应用程序时,如果库不尝试加载该资源,它会正常工作......但如果这样做,它会在尝试使用该资源的行处获得 NullPointerException。
我可以看到资源存在于 jar 文件的正确路径中。
我尝试将我的应用程序作为 jar(如上所示)和类文件运行:
java --module-path modules-dir:ivy-2.4.0.jar -m my.module/my.Main
在后一种情况下,错误是不同的,但相关:Ivy 甚至找不到它尝试从自己的 jar 加载的属性文件!
是否有任何解决方法,这是一个已知的错误,还是我做错了什么?
【问题讨论】:
-
您从哪里获得 Java 9?发布了吗? 2017 年 06 月 15 日
-
获取SDKMAN 并使用
sdk install java 9ea167安装。这是一个 EA(抢先体验)版本。 -
只是无法得到问题,my-mod.jar 与 my.mod 模块文件有什么关系?你想让 my-mod.jar 依赖 ivy-2.4.0.jar 吗?
-
如您在上面的模块文件中所见,是的。