Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Java => Mensaje iniciado por: Juanma91 en 5 Noviembre 2013, 01:34 AM

Título: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: Juanma91 en 5 Noviembre 2013, 01:34 AM
wenas gente! no consigo importarla.. la cuestión es que quiero en la linea de comandos ejecutar ...

javac aplicacionCLI

me salta...
C:\Users\Juanma\Desktop>javac aplicacionCLI.java
aplicacionCLI.java:6: error: package org.apache.commons.cli does not exist
import org.apache.commons.cli.*;
...
8 errors


Alquien me podría explicar QUE TENGO QUE HACER PARA IMPLEMENTAR LA LIBRERIA COMMONS CLI BIEN PARA YO PODER EJECUTAR MIS APLICACIONES DESDE DONDE YO QUIERA????
Título: Re: Como importar la libreria Apache Commons cli en el classpath
Publicado por: egyware en 5 Noviembre 2013, 03:17 AM
C:\Users\User>javac
Usage: javac <options> <source files>
where possible options include:
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
  -nowarn                    Generate no warnings
  -verbose                   Output messages about what the compiler is doing
  -deprecation               Output source locations where deprecated APIs are u
sed
  -classpath <path>          Specify where to find user class files and annotati
on processors
  -cp <path>                 Specify where to find user class files and annotati
on processors
  -sourcepath <path>         Specify where to find input source files
  -bootclasspath <path>      Override location of bootstrap class files
  -extdirs <dirs>            Override location of installed extensions
  -endorseddirs <dirs>       Override location of endorsed standards path
  -proc:{none,only}          Control whether annotation processing and/or compil
ation is done.
  -processor <class1>[,<class2>,<class3>...] Names of the annotation processors
to run; bypasses default discovery process
  -processorpath <path>      Specify where to find annotation processors
  -d <directory>             Specify where to place generated class files
  -s <directory>             Specify where to place generated source files
  -implicit:{none,class}     Specify whether or not to generate class files for
implicitly referenced files
  -encoding <encoding>       Specify character encoding used by source files
  -source <release>          Provide source compatibility with specified release

  -target <release>          Generate class files for specific VM version
  -version                   Version information
  -help                      Print a synopsis of standard options
  -Akey[=value]              Options to pass to annotation processors
  -X                         Print a synopsis of nonstandard options
  -J<flag>                   Pass <flag> directly to the runtime system
  -Werror                    Terminate compilation if warnings occur
  @<filename>                Read options and filenames from file


Ojo con javac compilas...
javac *.java -cp path/to/classpath;path/to/library.jar

Espero que te sirva.
Saludos!
Título: Re: Como importar la libreria Apache Commons cli en el classpath
Publicado por: Juanma91 en 5 Noviembre 2013, 13:20 PM
No lo he solucionado.. lo que quiero es añadir commons cli al classpath para que me pueda complicar mi clase utilidadcli.java

AYUDA!
Título: Re: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: egyware en 5 Noviembre 2013, 13:31 PM
Bueno... primero que nada debes tener commons cli descargado, no crees?
http://commons.apache.org/proper/commons-cli/
http://commons.apache.org/proper/commons-cli/download_cli.cgi

y luego para compilar debes hacer esto.

javac TuClaseConCli.java -cp commons-cli-1.2/commons-cli-1.2.jar

y luego para ejecutar haces lo mismo
java TuClaseConCli -cp commons-cli-1.2/commons-cli-1.2.jar

¿Te sirve?
Título: Re: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: Juanma91 en 5 Noviembre 2013, 16:57 PM
Ok, me compila bien, pero a la hora de usar java TuClaseConCli -cp commons-cli-1.2/commons-cli-1.2.jar [/b] ME DICE QUE NO ENCUENTRA LA CLASE PRINCIPAL...  QUE ASCO JEJEJEJ
Título: Re: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: egyware en 5 Noviembre 2013, 17:53 PM
Ojo que el nombre "TuClaseConCli" es solo un ejemplo.

Recuerda para ejecutar una clase debes usar "java" y debes indicarle cual es la clase que contiene el metodo main.

Código (java) [Seleccionar]

/* File: TuClase.java */
public class TuClase
{
  //debe tener este metodo, poder invocarlo desde el comando java
public static void main(String args[])
{
  //tu codigo...
  System.out.println("Tu codigo");
}
}


C:\ java TuClase

Saludos!
Título: Re: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: Juanma91 en 5 Noviembre 2013, 18:41 PM
El codigo que uso es el siguiente..

javac CalculadoraCLI.java -cp jar/commons-cli-1.2.jar

2) Me genera el .class correctamente

3) ahora... javac CalculadoraCLI.java -cp jar/commons-cli-1.2.jar

4) No se encuentra la clase CalculadoraCLI.java

5) tiene un metodo main

6) no se que hacer ya..
Título: Re: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: egyware en 5 Noviembre 2013, 18:46 PM
Bueno postea tu clase y el código del error completo, para observar el problema.


PS: Ojo!!!! para invocar o ejecutar una clase solo debes hacer "java CalculadoraCLI" sin .java ni .class
Título: Re: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: Juanma91 en 5 Noviembre 2013, 18:53 PM
C:\Users\Juanma\Desktop>java CalculadoraCLI
Error: no se ha encontrado o cargado la clase principal CalculadoraCLI



Él codigo es un ejemplo que vi en internet para ver si podia ejecutarlo en la linea de comandos

import org.apache.commons.cli.*; 
 
import java.io.OutputStream; 
 
/**
* Ejemplos del uso de la librería "Apache Commons CLI" 
* @author Carlos García. Autentia.
*/ 
public class CalculadoraCLI { 
 
    /**
     * -ip address [-port puerto]  [err|console] [-help | -h]
     */ 
    public static void main(String[] args) { 
        final int DEF_PORT = 60001;     // Puerto por defecto 
         
        int               port    = 0; 
        String            ip      = null;     
        OutputStream      output  = null; 
        CommandLineParser parser  = null; 
        CommandLine       cmdLine = null;         
 
      /////////////////////////////////////////////////////////////////////// 
      // Fase 1: Configuramos las opciones de validación de entrada. 
      /////////////////////////////////////////////////////////////////////// 
             
        Options options = new Options(); 
        options.addOption("ip",     true,  "IP de destino"); 
        options.addOption("port",   true,  "Puerto destino"); 
        options.addOption("h",      "help", false, "Imprime el mensaje de ayuda");   
         
        // No pueden aparecen las dos opciones simultáneamente. 
        OptionGroup group =  new OptionGroup(); 
        group.addOption(new Option("err",     "Salida estándar de errores")); 
        group.addOption(new Option("console", "Salida estándar")); 
        options.addOptionGroup(group); 
         
         
        try { 
             
          /////////////////////////////////////////////////////////////////////// 
          // Fase 2: Parseamos la entrada con la configuración establecida 
          /////////////////////////////////////////////////////////////////////// 
       
            parser  = new BasicParser(); 
            cmdLine = parser.parse(options, args); 
             
          /////////////////////////////////////////////////////////////////////// 
          // Fase 3: Analizamos los resultados y realizamos las tareas pertinentes 
          /////////////////////////////////////////////////////////////////////// 
             
            // Si está la opcion de ayuda, la imprimimos y salimos. 
            if (cmdLine.hasOption("h")){    // No hace falta preguntar por el parámetro "help". Ambos son sinónimos 
                new HelpFormatter().printHelp(CalculadoraCLI.class.getCanonicalName(), options ); 
                return; 
            } 
             
            // Si el usuario ha especificado el puerto lo leemos         
            if (cmdLine.hasOption("port")){ 
                port = Integer.parseInt( cmdLine.getOptionValue("port") );   
            } else { 
                port = DEF_PORT; 
            } 
             
            // Leemos la dirección IP. Sino existe generamos un error pues es un parámetro requerido. 
            ip =  cmdLine.getOptionValue("ip"); 
            if (ip == null){ 
                throw new org.apache.commons.cli.ParseException("La direccion IP es requerida"); 
            } 
             
            if (cmdLine.hasOption("console")){ 
                output = System.out; 
            } else if (cmdLine.hasOption("err")){ 
                output = System.err; 
            } else { 
                output = null; 
            } 
             
             // .............................................................. 
             // Aquí irían las tareas que tuviera que realizar la aplicación   
             // .............................................................. 
             
            System.out.println("OK"); 
             
        } catch (org.apache.commons.cli.ParseException ex){ 
            System.out.println(ex.getMessage()); 
             
            new HelpFormatter().printHelp(CalculadoraCLI.class.getCanonicalName(), options );    // Error, imprimimos la ayuda 
        } catch (java.lang.NumberFormatException ex){ 
            new HelpFormatter().printHelp(CalculadoraCLI.class.getCanonicalName(), options );    // Error, imprimimos la ayuda 
        } 
    } 
Título: Re: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: Juanma91 en 5 Noviembre 2013, 19:06 PM
¿ Puede ser por mis variables Path y classpath?

he creado uno con un main de imprima hola y ese si me deja , pero...


C:\Users\Juanma\Desktop>java holita
hola

C:\Users\Juanma\Desktop>java CalculadoraCLI -cp jar/commons-cli-1.2.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cl
i/ParseException
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseExcepti
on
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 6 more

C:\Users\Juanma\Desktop>
Título: Re: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: egyware en 5 Noviembre 2013, 19:12 PM
¡Encontré el problema!

Y pido mil disculpas, fue un error mio que pase por alto


java -cp commons-cli-1.2.jar;. CalculadoraCLI


En la configuración del classpath debes especificar buscar en el directorio actual (el punto), ya que solo buscaba en la biblioteca de commons-cli.

Ups!!


PS: Otra cosa, el orden influye también.

Java [Opciones] MainClass
Si lo dejas al revés te dará error también.

Saludos!!
Título: Re: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: Juanma91 en 5 Noviembre 2013, 19:19 PM
Por fin!! Muchas gracias amigo! Me has "salvado" un poco la vida, llevaba dias tras esto sin poder sacarle punta  ;-)
Título: Re: AYUDA! Como importar la libreria Apache Commons cli en el classpath
Publicado por: ~ Yoya ~ en 6 Noviembre 2013, 16:12 PM
Lo ideal es utilizar el archivo MANIFEST.MF, hay indicas la MainClass y también el classpath de las librerías, de forma que no tienes que especificar la clase principal ni el classpath a la hora de ejecutarlo.

Saludos.