当我在由mvn:assembly构建的批处理中使用args4j时,为什么会出现java.lang.NoClassDefFoundError

问题描述 投票:0回答:1

对于各种实验,我在github处理一个java项目。

在Maven构建之后,程序使用脚本bat运行。

现在我打开了一个分支,因为我会使用库args4j来解析参数。

构建工作正常,jar存在于目录lib中,但是当我运行时,我有这个Exception的堆栈跟踪

线程“main”中的异常java.lang.NoClassDefFoundError:org / kohsuke / args4j / CmdLineException,java.lang.Class.class.devlaredMethods0(本机方法),位于java.lang的java.lang.Class.privateGetDeclaredMethods(Class.java:2625)位于sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)的sun.launcher.LauncherHelper.checkAndLoadMain的java.lang.Class.getMethod(Class.java:1676)中的.Class.getMethod0(Class.java:2866) LauncherHelper.java:486)由java.net.URLClassLoader $ 1.run(URLClassLoader。)java.net.URLClassLoader $ 1.run(URLClassLoader.java:366)中的java.lang.ClassNotFoundException:org.kohsuke.args4j.CmdLineException引起: java:355)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:354)at java.lang.ClassLoader.loadClass(ClassLoader.java:425)at sun.misc .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的处理。 jar存在并通过-cp选项链接

你有什么想法(和解决方案)吗?

java maven classpath
1个回答
2
投票

您无法在命令行上组合-jar-cp参数。如果java命令看到-jar,它会将jarfile名称后的所有内容视为应用程序参数,并且它会忽略任何早期的类路径参数。

你有两个选择:

  • 使用-cp,在类路径中包含主JAR,并在命令行中输入主类的完整类名。
  • 使用-jar,并在列出所有依赖项的主JAR清单文件中添加“Class-Path”属性。

参考文献:

注意:由于您使用Maven构建JAR文件,因此还有其他选项;例如

  • 使用“Shade”插件创建一个包含单个JAR中所有依赖项的可执行文件“uber-jar”。
© www.soinside.com 2019 - 2024. All rights reserved.