I problemi sono causati dalle modifiche di Project Jigsaw apportate alla build di Java 9 EA che sembra aver utilizzato. JEP 220 li descrive.
La sezione Rimosso: rt.jar
e tools.jar
descrive più in dettaglio, ma rischi e ipotesi contiene una buona sintesi:
JDK e JRE immagini sarà, come già detto, non contengono più i file lib/rt.jar
, lib/tools.jar
, lib/dt.jar
e altri file jar interni. Il codice esistente che presuppone l'esistenza di questi file potrebbe non funzionare correttamente.
Così come avete notato, quei file sono spariti. Più in basso:
File di classe e di risorse precedentemente trovati in lib/tools.jar
e visibile solo quando il file è stato aggiunto al percorso di classe sarà ora, un'immagine JDK in, essere visibili tramite il caricatore di classe di sistema o, in alcuni casi, il caricatore di classe bootstrap. I moduli contenenti questi file non saranno tuttavia menzionati nel percorso della classe dell'applicazione, , ovvero, nel valore della proprietà di sistema java.class.path
.
Quindi le classi da tools.jar
vengono spostate in moduli ma sembra che potrebbero non essere disponibili per l'utente. Si dovrebbe usare jdeps da una recente costruzione Jigsaw ...
- ... per determinare le dipendenze dei moduli:
$jdeps -M -s $your_JAR
- ... per determinare le dipendenze sulle API JDK-interne:
jdeps -jdkinternals $your_JAR
Se sei fortunato, l'API che stai usando è stata pubblicata (quindi non verrà visualizzata nella seconda analisi) o avrà un'alternativa pubblica (che la seconda analisi dovrebbe elencare).Altrimenti dovresti prendere in considerazione questo allo Jigsaw mailing list e chiedere aiuto lì, notando esplicitamente quali API stai usando e per cosa.
Questo è vero per quanto riguarda la teoria va. Il problema è che le API "pubbliche" sono spesso fornite dalle classi in 'tools.jar', quindi per mantenere il progetto costruibile per i JDK più vecchi è necessario affrontare questo problema. –