我试图让我的应用程序与Java 9一起运行,但不幸的是,当它尝试使用加载资源时,其中一个普通的jar依赖项classLoader.getResource(name)会获得null.
当然,这适用于Java 8.
我使用模块文件声明了对相关模块的依赖,通过其jar名称引用模块的名称(糟糕),并使用该--module-path选项添加jar原样(没有Java 9的自定义).
这是我的近似模块文件声明:
module my.mod {
requires ivy; // the file is called ivy-2.4.0.jar
}
Run Code Online (Sandbox Code Playgroud)
我用这个命令运行:
java --module-path my-mod.jar:ivy-2.4.0.jar -m my.mod
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,如果库不尝试加载该资源,它可以正常工作......但如果它运行,它会NullPointerException在它尝试使用该资源的行处获得一个.
我可以看到资源存在于jar文件中的正确路径中.
我已经尝试将我的应用程序作为jar运行(如上所示)并且只运行类文件:
java --module-path modules-dir:ivy-2.4.0.jar -m my.module/my.Main
Run Code Online (Sandbox Code Playgroud)
在后一种情况下,错误是不同的,但相关:Ivy甚至找不到它试图从自己的jar加载的属性文件!
有没有解决方法,这是一个已知的错误,还是我做错了什么?
尝试将“opens”声明添加到自动模块“ivy”中。这允许访问它的资源:
java --add-opens ivy/<dot.separated.path.to.resources>=ALL-UNNAMED --module-path my-mod.jar:ivy-2.4.0.jar -m my.mod
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |