我想在我的应用程序中添加apache cli,但是我有问题。当我尝试运行它时会显示这些错误:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
这是我的代码:
CommandLineParser parser = new PosixParser();
Options options = new Options();
options.addOption("a", "abc", true, "First parameter");
try {
CommandLine commandLine = parser.parse(options, args);
System.out.println(commandLine.getOptionValue("a"));
} catch (ParseException e1) {
e1.printStackTrace();
}
我还在pom.xml中添加了这个:
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
但它没有帮助:/我还首先手动添加了commons-cli-1.3.1.jar以及后来的commons-cli-1.2.jar,但两者都没有帮助。
@edit
聚苯乙烯。我将它作为&#34; java -jar filename.jar&#34;运行。
答案 0 :(得分:4)
只需几分钟的更改,我就可以执行此代码: -
CommandLineParser parser = new PosixParser();
Options options = new Options();
options.addOption("a", true, "First parameter");
args=new String[]{"-a abc"};
try {
CommandLine commandLine = parser.parse(options, args );
System.out.println(commandLine.getOptionValue("a"));
} catch (ParseException e1) {
e1.printStackTrace();
}
Output :- abc
在我的pom.xml中: -
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
commons-cli-1.2.jar对您的代码不可见。
答案 1 :(得分:3)
尝试在类路径中列出您正在使用的所有jar:
java -classpath lib/*.jar:other/location/lib/*jar:. my.package.Program
您必须告诉java使用哪些库来运行代码。
答案 2 :(得分:0)
如果您使用的是Maven,那么您可以使用AppAssembler插件。它会将jar包装在包含
的目录结构中执行它的windows / linux脚本
答案 3 :(得分:0)
您需要将jar和依赖项一起打包。
将其添加到plugins
文件中的pom.xml
标记中:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>Your main class here</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
然后使用以下命令构建项目:
mvn clean compile assembly:single
答案 4 :(得分:0)
为我解决问题(我使用蚂蚁来构建我的项目)的原因是,在我的commons-cli
顶部列出了ivy.xml
依赖项,不知道为什么这样做会有所不同,但确实如此。
这可能与您无关,因为您使用过maven,但可能对使用ant的人有所帮助。