Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java/OpenJDK: How to add JAR to classpath

Tags:

java

linux

I am running a 3rd-party jar file (no UI) on the command line like this:

 /usr/bin/java -jar exchange-sync.jar

After my distribution (Debian Buster) upgraded to the latest OpenJDK 11 this command is no longer working. This is what I am now getting:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/ws/http/HTTPException
        at microsoft.exchange.webservices.data.core.ExchangeService.findItems(ExchangeService.java:976)
        at microsoft.exchange.webservices.data.core.ExchangeService.findAppointments(ExchangeService.java:1264)
        at microsoft.exchange.webservices.data.core.ExchangeService.findAppointments(ExchangeService.java:1285)
        at com.zerodes.exchangesync.exchange.ExchangeSourceImpl.getAllAppointments(ExchangeSourceImpl.java:399)
        at com.zerodes.exchangesync.sync.SyncCalendarsImpl.generatePairs(SyncCalendarsImpl.java:45)
        at com.zerodes.exchangesync.sync.SyncCalendarsImpl.syncAll(SyncCalendarsImpl.java:98)
        at com.zerodes.exchangesync.App.main(App.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.ws.http.HTTPException
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)

I've already figured out that I now need to install the jaxws-api Debian Package, which provides the missing classes in /usr/share/java/jaxws-api.jar.

Which java command line do I need in order to include the classes from the installed jar file? I have already tried this, but I am getting the same error:

/usr/bin/java -cp /usr/share/java/jaxws-api.jar -jar exchange-sync.jar

BTW: I am a Java noob and I don't want to mess with recompiling things. I am also sure that javax.xml.ws.http.HTTPException resides in jaxws-api.jar, as I have browsed that JAR file with vim and found that class in it.

like image 278
Gordon Shumway Avatar asked Jan 26 '26 10:01

Gordon Shumway


1 Answers

OK, I finally figured this out by myself. This is how you correctly add modules, which the JAR expects to be present:

/usr/bin/java --module-path /usr/share/java/jaxws-api.jar --add-modules jaxws.api -jar exchange-sync.jar

So it does not really have anything to do with the classpath, it's just about adding the module.

like image 142
Gordon Shumway Avatar answered Jan 28 '26 22:01

Gordon Shumway



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!