假设我们有两个带有两个不同模块的 jar 文件。两个 jar 文件都在其 jar 中名为图像的文件夹中包含一些资源(比如 png 文件)。当我现在尝试在 Java 中启动模块时,出现以下错误:
Error occurred during initialization of boot layer
java.lang.LayerInstantiationException: Package images in both module A and module B
虽然我的图像文件夹并不是一个包,而只是一个包含资源的文件夹。那么如何将两个带有图像文件夹的模块放到我的模块路径上呢?
最佳答案
How to add resources to two modular jars in same-named folders?
虽然可以通过将资源放在不是有效包名称的路径下来做到这一点,例如
META-INFO/resources
或其他带有 -
的路径中的连字符,我建议不要这样做,因为此类资源未封装,并且可能无法通过某些 API 唯一识别。换句话说:应用程序中的任何代码都可以加载不在有效包内的资源,而不仅仅是包含该资源的 jar 中的模块代码。
以及:如果资源没有基于其在 jar 中的路径的唯一名称,则
ClassLoader.findResource
只能找到具有相同名称的资源之一。应用程序接口(interface)。我的建议是在你的模块中创建一个与模块同名的包,使用
.images
后缀。例如mod.foo.images
,然后将您的资源放入该包中。然后使用 modular resource loading API 加载资源:MyClass.class.getModule().getResourceAsStream("mod/foo/images/my_image.jpg")
这样,资源只能由同一模块中的代码加载( mod.foo
,只要你把它放在模块路径上),并避免资源名称的任何歧义。
关于java - 如何将资源添加到同名文件夹中的两个模块化 jar 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69526033/