繁体   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