对于各种实验,我在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选项链接
你有什么想法(和解决方案)吗?
您无法在命令行上组合-jar
和-cp
参数。如果java
命令看到-jar
,它会将jarfile名称后的所有内容视为应用程序参数,并且它会忽略任何早期的类路径参数。
你有两个选择:
-cp
,在类路径中包含主JAR,并在命令行中输入主类的完整类名。-jar
,并在列出所有依赖项的主JAR清单文件中添加“Class-Path”属性。参考文献:
java
command page - 解释-jar
与-cp
注意:由于您使用Maven构建JAR文件,因此还有其他选项;例如