我正在这样的命令行上运行第三方的jar文件(无UI):
/usr/bin/java -jar exchange-sync.jar
在我的发行版(Debian Buster)升级到最新的OpenJDK 11之后,此命令不再起作用。这就是我现在得到的:
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)
我已经发现我现在需要安装jaxws-api
Debian软件包,该软件包在/usr/share/java/jaxws-api.jar
中提供了缺少的类。
我需要哪个Java命令行才能包含已安装的jar文件中的类?我已经尝试过了,但是出现了同样的错误:
/usr/bin/java -cp /usr/share/java/jaxws-api.jar -jar exchange-sync.jar
顺便说一句:我是Java新手,我不想弄乱重新编译的东西。我还确定javax.xml.ws.http.HTTPException
驻留在jaxws-api.jar
中,因为我已经用vim浏览了该JAR文件并在其中找到了该类。
答案 0 :(得分:1)
好的,我终于自己弄清楚了。这是您正确添加JAR期望存在的模块的方式:
/usr/bin/java --module-path /usr/share/java/jaxws-api.jar --add-modules jaxws.api -jar exchange-sync.jar
因此,它实际上与类路径没有任何关系,仅与添加模块有关。