Hi, This has been discussed on StackOverflow in threads like https://stackoverflow.com/q/51094274/4611488
The question can be simplified like this: //--- import javax.xml.transform.Transformer; public class Test { Transformer transformer; } //--- Which of the following compiler invocations should accept / reject the program: $ javac Test.java $ javac -classpath xml-apis-1.4.01.jar Test.java $ javac -classpath xml-apis-1.4.01.jar --limit-modules=java.base,java.xml Test.java $ javac -classpath xml-apis-1.4.01.jar --limit-modules=java.base Test.java From my understanding, only the first and the last invocations should succeed. In both other cases the code in Test.java (associated to the unnamed module) can access package javax.xml.transform both from module java.xml and from the unnamed module containing xml-apis-1.4.01.jar. (I say "the unnamed module" but I don't seen any impact if an implementation would choose to support several unnamed modules). Also ecj has some issues in this area, but I want to be sure my corrections go in the right direction. Is javac applying some tricks like deciding that the content of xml-apis-1.4.01.jar is not observable if that would create a conflict with a JDK module? best, Stephan