如何让自动模块在Java 9中找到自己的资源?

时间:2017-04-23 16:40:23

标签: java java-9

我正在尝试使用Java 9运行我的应用程序,但不幸的是,当它尝试使用classLoader.getResource(name)加载资源时,其中一个普通的jar依赖项会获得null。

当然,这适用于Java 8。

我使用模块文件声明了对相关模块的依赖关系,通过jar名称引用模块的名称(糟糕),并使用{{添加jar原样(没有Java 9的自定义)) 1}}选项。

这是我的近似模块文件声明:

--module-path

我用这个命令运行:

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

我可以看到资源存在于jar文件中的正确路径中。

我已经尝试将我的应用程序作为jar(如上所示)和类文件运行:

NullPointerException

在后一种情况下,错误是不同的,但相关:Ivy甚至找不到它试图从自己的jar加载的属性文件!

是否有任何解决方法,这是一个已知的错误,还是我做错了什么?

1 个答案:

答案 0 :(得分:3)

尝试添加'打开'申报自动模块'常春藤'。这样就可以访问它的资源了:

java --add-opens ivy/<dot.separated.path.to.resources>=ALL-UNNAMED --module-path my-mod.jar:ivy-2.4.0.jar -m my.mod