Eclipse javac command line options mitgeben

Erneut holt mich eine Umstellung von Java 9 ein: javax.xml.ws.http.HTTPException bzw. das ganze Paket javax.xml.ws ist nicht mehr dabei, oder doch, aber nicht standardmäßig im Classpath.

Beim Komplilieren lässt sich das mit --add-modules java.xml.ws umgehen, die genaue Diskussion siehe:

Es funktioniert alles, der einzige Schönheitsfehler besteht darin, dass Ecplise zurecht meckert “The import java.xml.ws can not be resolved!”, da das Projekt ein Java-10-Projekt ist.

Ich müsste nun also auch Eclipse irgendwo für diese Datei oder dieses Projekt die command lne option --add-modules java.xml.ws mitgeben können. Probiert habe ich:

  1. Window - Preferences - Compiler - Building
  2. Project - Properties - Java Compiler - Building
  3. Rechtsklick auf die Datei - Properties - Run/ Debug Settings

Letzteres sieht am vielversprechensten aus, leider sind die Felder rechts (“New…”, “Edit…” und so weiter) ausgegraut, so dass ich nichts hinzufügen kann.

Ich mag es nicht, wenn meine Projekte “rot” sind, ich lasse sie nicht mal “gelb”, daher würde ich sehr gern den Fehler wegbekommen, auch wenn er “nur” ein optisches Problem darstellt.

Hat jemand einen Tipp, wie ich das lösen kann?

Ich kann leider keine genaue Aussage machen, da ich noch bei Java 8 hänge.
Aber kannst du über den Build Path deines Projektes was machen, dass er die benötigten Sachen kennt?

Dafür müsste ich die irgendwo im JDK versteckten Jars als externe Jars angeben… ich schaue mal.

Da wäre ein c:\Program Files\Java\jdk-10\lib\missioncontrol\plugins\javax.xml_1.3.4.v201005080400.jar in welchem javax\xml enthalten ist, aber darin kein ws drin ist. Mmh… auch in den anderen Jars, die mit javax anfangen, finde ich keines mit HTTPException.class.

In der Datei src.zip gibt es sogar die Datei java.xml.ws\javax\xml\ws\http\HTTPException.java. Aber das ist ja leider kein Jar-File.

Edit: Vermutlich könnte ich mir ein eigenes Jar bauen mit HTTPException, ProtocolException und WebServiceException, aber das scheint mir ein ziemlich hässlicher Workaround zu sein, da hoffe ich erstmal auf andere Tipps.

Du kannst das über Maven (oä) einbinden: https://mvnrepository.com/artifact/javax.xml.ws/jaxws-api/2.3.0

Aus dem JDK wird es in naher Zukunft gänzlich entfernt.

Das heißt dann aber auch, dass es das irgendwo als jar geben muss, oder? Woher holt sich Maven das? Ich lad mal die Jar-Datei aus dem Link runter…

Maven holt sich das aus einem Repository wo es das Jar-File findet. Das ist entweder das lokale Repository auf deinem Rechner, ein konfiguriertes Repository oder Maven Central. (Wobei anzumerken ist, dass es immer lokal installiert wird, wenn Maven es runtergeladen hat).
Das Repository hat im Prinzip die Ordnerstruktur der group sowie artifact id zusammen mit der angegebenen Version und danach sucht Maven das entsprechende pom.xml und die Jar Datei.

Die Lösung von mrBrown funktioniert. Damit ist Eclipse ruhig gestellt.

Leider kann man das jar nicht beim Komplilieren einsetzen, da er wohl die versteckte eigene Version heranzieht, statt die aus dem Jar:

error: package javax.xml.ws.http is not visible
	import javax.xml.ws.http.HTTPException;
	                   ^
	  (package javax.xml.ws.http is declared in module java.xml.ws, which is not in the module graph)

Aber wenn das später aus dem JDK ganz entfernt wird, sollte die Verwendung des Jars auch hier die Lösung darstellen.

Du musst das Module als benötigt in deiner module-info angeben (oder mit --add-modules arbeiten, aber wenn es eh ein Java 10-Projekt ist…)