gpt4 book ai didi

java - 如何将资源添加到同名文件夹中的两个模块化 jar 中?

转载 作者:行者123 更新时间:2023-12-04 12:27:32 26 4
gpt4 key购买 nike

假设我们有两个带有两个不同模块的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com