Java/OpenJDK:如何将JAR添加到类路径中

3

我正在命令行上运行一个第三方的jar文件(没有用户界面),像这样:

 /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.HTTPExceptionjaxws-api.jar中,因为我用vim浏览了那个JAR文件,并在其中找到了该类。


“-jar” 不允许修改类路径,它使用清单文件中所包含的内容。 - talex
1个回答

3

好的,我最终自己弄清楚了。这是正确添加模块的方法,JAR文件需要这些模块存在:

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

所以这与类路径没有任何关系,只是要添加模块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接