missing resources when using --patch-module

Alan Bateman Alan.Bateman at oracle.com
Fri Apr 3 10:53:52 UTC 2020


On 03/04/2020 10:17, Robert Scholte wrote:
> This issue was registered as SUREFIRE-1768[1]
> It contains a very small Maven project to demonstrate the issue.
>
> That project contains one method executing the following:
>
> Demo.class.getClassLoader().getResources("demo").asIterator().forEachRemaining(url -> {
>    System.out.println(url.getFile()); // I'd like to see the target/classes/demo directory here at some point.
> });
>
>
> After executing the test it shows the following result
> /E:/test-classpath-demo-master/target/test-classes/demo/
> /E:/test-classpath-demo-master/target/test-classes/demo
>
> these are similar, but more worrying: where is
> /E:/test-classpath-demo-master/target/classes/demo
>
> I rewrote it a bit by including a main method  to ensure it is not caused by surefire:
> "%JAVA_HOME%"\bin\java --module-path target/classes --patch-module test.classpath.demo=target/test-classes  --module test.classpath.demo/demo.DemoTest
>
>
> this gave me only one result (where I expected 2):
> /E:/test-classpath-demo-master/target/test-classes/demo/
>
>
> So the question is, where is
> /E:/test-classpath-demo-master/target/classes/demo/
>
Patching is to used to replace specific classes or resources in a module 
with alternative versions. It can also be used to augment a module with 
new classes or resources. In the reproducer, it looks like module 
test.classpath.demo has been patched so that "demo" is found in the 
patch rather than the original module. This is correct behavior.

If it helps, this will give a list of the resources in the module so you 
can see the effect of the patching:

         String name = this.getClass().getModule().getName();
         ModuleLayer.boot()
                 .configuration()
                 .findModule(name)
                 .orElseThrow()
                 .reference()
                 .open()
                 .list()
                 .forEach(System.out::println)

-Alan


More information about the jigsaw-dev mailing list