2017-06-28 1 views
0

Ich versuchte, die Protokollierung meiner HTTP-Verbindungen zu verbessern, indem ich die eingebauten java.util.logging-Funktionen nutze. Aber nachdem ich eine Zeile eingefügt habe, um die Anmeldung im Code zu aktivieren, erhalte ich einen Fehler in meinem Ameisenbau, den ich nicht verstehe.Paket von rt.jar "existiert nicht" beim Kompilieren mit ant

error: package sun.util.logging does not exist 
    import sun.util.logging.PlatformLogger; 
     ^

sun.util.logging.PlatformLogger in rt.jar befindet, die immer auf dem Classpath sein sollen, soweit ich weiß. Und es ist keine "interne API", die beim Kompilieren eine Warnung ausgibt. Der Code funktioniert in Eclipse einwandfrei.

Ant läuft auf JDK 1.8.0_60 wie mein Eclipse-Projekt. Ich erwarte, dass es das rt.jar von dieser Installation benutzt. Warum kann auf einige ausgewählte Klassen nicht zugegriffen werden? Oder schaue ich auf den falschen Satz von Kern-Klassen und die Java-Task verwendet ein anderes rt.jar?

Hinweis: Ich weiß, dass ich Protokollierungseigenschaften verwenden kann, um es einzurichten. Das ist nicht der Sinn dieser Frage. Ich möchte wissen, warum ant ein Problem hat, das Eclipse nicht hat.

+0

Ich fange an zu denken, dass "jemand" alle Zugriffsbeschränkungen für rt.jar in meinem Eclipse-Arbeitsbereich entfernt hat und dass ich niemals in der Lage gewesen wäre, auf "PlatformLogger" zuzugreifen. Aber die Frage bleibt, wie weiß JavaC, welche Klassen nicht durch Code referenziert werden können? – Stroboskop

Antwort

0

This question explains my problem.

Kurz gesagt: javac kompiliert nicht eigentlich gegen rt.jar. Stattdessen verwendet es jdk/lib/ct.sym, das die meisten Klassen als Stubs enthält, aber z.B. nicht PlatformLogger. Es gibt einen VM-Parameter, um ihn zu deaktivieren, aber das wird natürlich nicht empfohlen.

Eclipse auf der anderen Seite ist mit ct.sym als ein freundlicher Vorschlag, den Sie aus dem Fenster werfen können, wenn Sie wie meine Kollegen codieren möchten.

0

Verlassen Sie sich nicht auf Klassen in "Sonne.", Sie wurden entfernt - Oracle kaufte Sun vor langer Zeit. Der Standard-Java-Logger ist java.util.logging.Logger

+1

Nun, sicher. Aber sun.net.www.protocol.http.HttpURLConnection benutzt dieses intern immer noch und ich muss es irgendwie auslösen. Auch meine Frage ist, warum eine Klasse, die in der rt.jar ist nicht gefunden wird. – Stroboskop

Verwandte Themen