2017-07-28 1 views

Antwort

2

Wenn Sie keine Modul-Info definieren, würde IDEA die Anwendung und Ihre Abhängigkeiten auf den Klassenpfad setzen. Da Sie eine Modul-Info haben, ist es ein explizites Modul, also muss es auf dem Modul-Pfad sein. Normalerweise würden Sie Ihre Abhängigkeiten jetzt als automatische Module behandeln.

Wie auch immer, Ihre Abhängigkeiten haben zumindest einen guten Grund, auf dem Klassenpfad zu sein. Wir haben das hier besprochen Why Java 9 does not simply turn all JARs on the class path into automatic modules?

Zum Beispiel hängt mein Modul von einem automatischen Modul ab, das jedoch ein Glas braucht, das noch kein automatisches Modul werden kann. Auf der Kommandozeile würde das so aussehen:

java -cp legacy.jar -p "mymodule.jar; automodule.jar;" -m mymodule/com.example.mymodule.Application

IMO intellij unterstützt das derzeit nicht. Als Workaround, um mindestens die gesamte Anwendung auf dem Klassenpfad auszuführen, könnten Sie die Modellinformationen für das Deaktivieren/Nicht-Jigsaw-Modul für einen Moment umbenennen.

+2

Ich verstand die Frage, dass er es vorzieht, das gesamte Projekt aus dem Klassenpfad zu führen. Warum? Wer weiß, vielleicht um Kompatibilität zu testen. Vielleicht, um Probleme mit Abhängigkeiten zu umgehen, die nicht in automatische Module umgewandelt werden können (z. B. weil sie ein Paket aufteilen). – Nicolai

+0

Wahr, ich habe meine Antwort bearbeitet – Daniel

+0

Ich glaube nicht, dass die Frage beantwortet wird - soweit ich sehen kann, bietet IntelliJ keine Option, um Klassenpfad anstelle des Modulpfades zu verwenden, wenn JDK9 verwendet wird. Und der Grund dafür? Praktisch ist das gesamte Java-Ökosystem mit Modulen inkompatibel - es gibt geteilte Pakete in allen wichtigen Open-Source-Projekten, ungültige Modulnamen (jedes Jar mit dem Wort native in ihm zum Beispiel, wie Netty, Cassandra usw.) überall. Das Arbeiten mit Modulen ist momentan ein harter Kampf, gegen den niemand kämpfen will. –

Verwandte Themen