簡體   English   中英

當我在由mvn:assembly構建的批處理中使用args4j時,為什么會發生java.lang.NoClassDefFoundError

[英]Why occurs a java.lang.NoClassDefFoundError when I use args4j in a batch built by mvn:assembly

對於各種實驗,我將在github中處理一個Java項目。

在Maven構建之后,該程序將使用腳本bat運行。

現在,我打開了一個分支,因為我將使用庫args4j來解析參數。

構建工作正常,罐子存在於目錄lib中 ,但是當我運行時,我具有此Exception的stacktrace

線程“主”中的異常java.lang.NoClassDefFoundError:org / kohsuke / args4j / CmdLineException在java.lang.Class.getDeclaredMethods0(本機方法)在java.lang.Class.privateGetDeclaredMethods(Class.java:2625) .class.getMethod0(Class.java:2866)at java.lang.Class.getMethod(Class.java:1676)at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)at sun.launcher.LauncherHelper.checkAndLoadMain( LauncherHelper.java:486)原因:java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)處的java.lang.ClassNotFoundException:org.kohsuke.args4j.CmdLineException java.net.URLClassLoader $ 1.run(URLClassLoader。 sun.misc上java.lang.ClassLoader.loadClass(ClassLoader.java:425)上java.net.URLClassLoader.findClass(URLClassLoader.java:354)上java.security.AccessController.doPrivileged(本地方法)上的java:355) .Launcher $ AppClassLoader.loadClass(Launcher.java:308)at java.lang.ClassLoader.loadClass(ClassLoader.java:358)...還有6個

在bat中,我配置了類路徑,以便lib中的args4j jar:這是bat腳本的說明

SET JAVA_DIR=C:\Program Files\Java\jdk1.7.0_80\bin\
>CUT
"%JAVA_DIR%\java" -jar ".\lib\buildCSS-1.0.jar"  -cp ".\lib\" -conf "./conf/environment.properties"

我不理解java.lang.NoClassDefFoundError的處理。 該罐子存在並通過-cp選項鏈接

請問您有什么想法(和解決方案)?

您不能在命令行上組合-jar-cp參數。 如果java命令看到-jar則它將jarfile名稱之后的所有內容都視為應用程序參數,並且它會忽略所有較早的classpath參數。

您有兩種選擇:

  • 使用-cp ,在類路徑中包含主JAR,然后在命令行上輸入主類的完整類名。
  • 使用-jar ,並在列出所有依賴項的主JAR清單文件中添加“ Class-Path”屬性。

參考文獻:

注意:由於您正在使用Maven構建JAR文件,因此還有其他選項; 例如

  • 使用“ Shade”插件在單個JAR中創建一個包含所有依賴項的可執行文件“ uber-jar”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM