2015-08-07 22 views
5

Chcę dodać apache cli do mojej aplikacji, ale mam problem. Błędy te pokazują, kiedy próbuję go uruchomić:java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException

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 

Oto mój kod:

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(); 
} 

Dodałem również w tym pom.xml:

<dependency> 
    <groupId>commons-cli</groupId> 
    <artifactId>commons-cli</artifactId> 
    <version>1.2</version> 
</dependency> 

ale nie help:/Również ręcznie dodałem najpierw commons-cli-1.3.1.jar, a później commons-cli-1.2.jar, ale oba nie pomagają.

@edit

Ps. Używam go jako "java -jar filename.jar".

+0

Ten słoik jest dodawany do ścieżki klas podczas próby dodania. –

+0

Dodałem go w Eclipse (BuildPath -> ConfigureBuildPath -> AddJARs). – Marek

Odpowiedz

3

Spróbuj aukcja w ścieżki klasy wszystkich słoikach, że używasz:

java -classpath lib/*.jar:other/location/lib/*jar:. my.package.Program 

Musisz powiedzieć bibliotek Java, który ma być używany do uruchamiania kodu.

0

Jeśli używasz Mavena, możesz użyć wtyczki AppAssembler. Będzie pakuje swój dzban w strukturze katalogów, który zawiera

  1. słoiki zależnych
  2. utworzony słoika i
  3. skrypty
  4. Windows/Linux, aby wykonać to

    appassembler-maven-plugin

2

Po kilku minutowych zmianach mogę wykonać ten kod: -

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 

W moim pom.xml: -

<dependency> 
    <groupId>commons-cli</groupId> 
    <artifactId>commons-cli</artifactId> 
    <version>1.2</version> 
    </dependency> 

commons-CLI-1.2.jar nie jest widoczny na kodzie.

Powiązane problemy