Portable retrieval of resource bundles across module path and class path

Alan Bateman Alan.Bateman at oracle.com
Fri Jul 23 16:53:40 UTC 2021


On 23/07/2021 16:58, Gunnar Morling wrote:
> :
>
>
> Yes, there is such resource which I had created for demo purposes (see 
> the jar -tf  output above):
>
> dev/morling/greeter/fr/GreetingMessages_de.properties
>
> Here's the output you requested:
>
> jar --describe-module --file 
> german/target/resourceloading-test-german-1.0-SNAPSHOT.jar
> dev.morling.greeter.german at 1.0-SNAPSHOT 
> jar:file:///.../resource-loading-test/german/target/resourceloading-test-german-1.0-SNAPSHOT.jar!/module-info.class
> requires dev.morling.greeter.base
> requires java.base mandated
> provides dev.morling.greeter.spi.GreetingMessagesProvider with 
> dev.morling.greeter.de.internal.GermanGreetingMessagesProvider
> contains dev.morling.greeter.de.internal
>
> Interestingly, the dev.morling.greeter.fr 
> <https://urldefense.com/v3/__http://dev.morling.greeter.fr__;!!ACWV5N9M2RV99hQ!ZUKmSO9QXFHdauC6gL-CiFnQwpy43SzKx1ZO-vlnoAi_ugEPld0wxPcWhKC2kMwhqg$> 
> package of the GreetingMessages_de.properties resource file isn't 
> listed there, but it does trigger the split package error later on. 
> Based on what you say, I take it that split package error *is* 
> expected in this situation, it' surprising though to not see the 
> package listed in the output of --describe-module.
>
> If you wanted to reproduce this yourself, the code is here:
>
> https://github.com/gunnarmorling/resource-bundle-test/tree/split-package 
> <https://urldefense.com/v3/__https://github.com/gunnarmorling/resource-bundle-test/tree/split-package__;!!ACWV5N9M2RV99hQ!ZUKmSO9QXFHdauC6gL-CiFnQwpy43SzKx1ZO-vlnoAi_ugEPld0wxPcWhKD4YgQf4A$>
>
> Just run "mvn clean install" on JDK 9+, then "mvn exec:exec -pl 
> :resourceloading-test-runner" for running the application, which 
> should fail.
>
Are you sure this always puts 
dev/morling/greeter/fr/GreetingMessages_de.properties into 
resourceloading-test-german-1.0-SNAPSHOT.jar? I'm quite sure the JAR 
file above doesn't have the fr resource but the JAR file in your 
previous mail seems to include it.

In any case I think this discussion comes down to how the set of 
packages for an explicit module is determined. As explicit modules 
encapsulate their resources by default then it's the set of package 
derived from the non-directory entries that map to legal package names. 
This may be determined at packaging time by the "jar" tool that records 
the set of the packages in the ModulePackages class file attribute, or 
at run-time by scanning the contents of the JAR file. (We need to do a 
better job of specifying that [1]).  So it's different to automatic 
modules where they is no encapsulation and only the .class files are 
used to determine the set of packages.

-Alan

[1] https://bugs.openjdk.java.net/browse/JDK-8230298




More information about the jigsaw-dev mailing list