Nehmen wir an, ich habe zwei Klassen (Bob und Tom), so dass Bob Tom benutzt, aber Tom braucht Bob nicht. Beide Dateien befinden sich in derselben Verzeichnisstruktur.Wie verhindere ich die implizite Java-Kompilierung, wenn die Klasse im Klassenpfad existiert?
public class Bob {
public static void main(String[] args) {
System.out.println(Tom.MESSAGE);
}
}
public class Tom {
public static String MESSAGE = "Hello World";
}
Wenn ich versuche, Bob in der typischen Art und Weise zu erstellen, kann ich es implizit Tom.java
auch zu kompilieren, da es als eine Abhängigkeit von Bob.java
erkannt wird. Das funktioniert großartig.
Aber jetzt sagen wir, dass ich Tom in einer JAR-Datei platzieren möchte. Also baue ich Tom.java
und lege die Ergebnisse in eine JAR-Datei: libTom.jar. Ich kompiliere jetzt mit dem Klassenpfad, der auf libTom.jar
zeigt. Leider sieht der Compiler die Datei Tom.java
und veranlasst, dass sie kompiliert wird, anstatt die Klasse in libTom.jar
zu verwenden. Gibt es eine Möglichkeit, den Compiler zu veranlassen, die implizite Konstruktion von Tom.java
zu überspringen, wenn die Klasse im Klassenpfad gefunden wird?
Ich erkenne, dass dieses Beispiel ziemlich erfunden ist. Seien Sie versichert, dass es einen komplizierteren, weniger erfundenen Anwendungsfall gibt, der dieses Problem umgibt. Vielen Dank.
Obwohl ich es nicht benutzt habe, hast du das "-implicit" -Flag für javac ausprobiert? Entsprechend der Hilfe-Ausgabe: "-implicit: {none, class} Geben Sie an, ob Sie Klassendateien für implizit referenzierte Dateien generieren möchten oder nicht," die sich anhören, was Sie wollen. –
Warum ist das nicht eine Antwort? @SteveB. – 11684