2015-08-07 21 views
5

Voglio aggiungere apache cli alla mia applicazione, ma ho un problema. Questi errori indicano quando provo a farlo funzionare: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 

Ecco il mio codice:

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

Ho anche aggiunto in pom.xml questo:

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

ma non è così aiuto:/Ho aggiunto anche manualmente commons-cli-1.3.1.jar e successive commons-cli-1.2.jar ma entrambi non aiutano.

@edit

Ps. Lo sto eseguendo come "java-jar filename.jar".

+0

Questo jar viene aggiunto a classpath quando si tenta di aggiungerlo. –

+0

L'ho aggiunto in eclipse (BuildPath -> ConfigureBuildPath -> AddJARs). – Marek

risposta

3

lista provare in classpath tutti i vasi che si sta utilizzando:

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

è necessario indicare java quali librerie da utilizzare per eseguire il codice.

0

Se si utilizza Maven, è possibile utilizzare il plug-in AppAssembler. Sarà confeziona vostro vaso in una struttura di directory che contiene i

  1. vasetti dipendenti
  2. il vaso si è creato e
  3. script
  4. Windows/Linux per eseguirla

    appassembler-maven-plugin

2

Con alcune modifiche minime sono in grado di eseguire questo codice: -

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 

Nel mio pom.xml: -

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

commons-cli-1.2.jar non è visibile al codice.

Problemi correlati