Verschiedene Ressourcen (infoq, jigsaw-dev, osdir) zeigen an, dass das gleiche Paket in verschiedenen Java-Modulen zu einem LayerInstantiationException
führt, auch wenn die Pakete intern im Modul sind (nicht exportiert).
Dies scheint genau das Gegenteil von dem, was die requirements sagen:Java 9 überlappende nicht exportierte Pakete
Die Java-Compiler, eine virtuelle Maschine und System-Zeit laufen muß sicherstellen, dass Module, die Pakete mit dem gleichen Namen enthält nicht miteinander interferieren . Wenn zwei unterschiedliche Module Pakete mit demselben Namen enthalten, werden aus der Perspektive jedes Moduls alle Typen und Mitglieder in diesem Paket nur von diesem Modul definiert.
Sind zwei Module, die von einer App verwendet werden, in der Lage, private Pakete mit demselben Namen zu enthalten?
EDIT
Dies ist ein issue von JMPS wie von Stanislav Lukyanov wies
Ich würde sagen, dass die beiden Klassenlader nicht in einer Eltern-Kind-Beziehung sein sollten, weil das bedeutet, dass das Kind zuerst die Eltern nach der Klasse/Paket fragt und erst dann versucht, es selbst zu laden (oder umgekehrt)) – Bax
Um dies zu vermeiden, hat Java 9 die 'getPackage' Methode zugunsten der 'getDefinedPackage' Methode veraltet.Der gleiche Paketname von zwei verschiedenen Klassenladern wird auch heute nicht als gleich angesehen; Wenn Sie beispielsweise A von B ableiten, kann B package-private Methoden von A nicht überschreiben, wenn es in einem anderen Klassenlader geladen wurde. Wenn das übergeordnete Element nicht die gleiche Klasse (!) Definiert, gibt es kein Problem, wenn das gleiche Paket verwendet wird, da es nicht gleich ist. Dieses Problem tritt nur auf, wenn Pakete von zwei Modulen innerhalb desselben Klassenladeprogramms definiert werden. –
wird jedes Modul standardmäßig von einem anderen Klassenlader geladen? – Bax