Suponiendo que tenemos dos archivos jar con dos módulos diferentes. Ambos archivos jar incluyen algunos recursos (digamos archivos png) en una carpeta llamada imágenes en su jar. Cuando intento iniciar un módulo en Java, aparece el siguiente error:
Error occurred during initialization of boot layer java.lang.LayerInstantiationException: Package images in both module A and module BAunque mi carpeta de imágenes no pretende ser un paquete, es solo una carpeta que contiene recursos. Entonces, ¿cómo puedo obtener dos módulos con una carpeta de imágenes en mi ruta de módulo?
¿Cómo agregar recursos a dos frascos modulares en carpetas con el mismo nombre?
Si bien es posible hacer esto colocando los recursos en una ruta que no sea un nombre de paquete válido, como META-INFO/resources u otra ruta con un guión - , recomendaría no hacerlo ya que dichos recursos no son encapsulado, y es posible que no sea identificable de forma única con algunas API.
En otras palabras: CUALQUIER código en la aplicación puede cargar un recurso que no está dentro de un paquete válido, no solo el código del módulo en el contenedor que contiene el recurso.
Además de: si el recurso no tiene un nombre único basado en su ruta dentro del jar, la API ClassLoader.findResource solo puede encontrar uno de los recursos con el mismo nombre.
Mi consejo sería crear un paquete en su módulo que tenga el mismo nombre que el módulo, con el sufijo .images . por ejemplo, mod.foo.images , y luego coloque sus recursos en ese paquete. Luego cargue el recurso con la API de carga de recursos modulares :
MyClass.class.getModule().getResourceAsStream("mod/foo/images/my_image.jpg") De esa manera, el recurso solo se podría cargar por código en el mismo módulo ( mod.foo , siempre que lo coloque en la ruta del módulo), además de evitar cualquier ambigüedad con los nombres de los recursos.