¿Por qué no groovy uso classpath argumento?

La invocación de una maravillosa secuencia de comandos mediante CLASSPATH prefijo de la siguiente manera funciona bien:

CLASSPATH=/path/to/classes groovy -e "(new stuff.XMLUtils()).printIt('test string')"

pero cambiando el uso de la ruta de clases arg no:

groovy -classpath /path/to/classes -e "(new stuff.XMLUtils()).printIt('test string')"

y da el error:

script_from_command_line: 1: unable to resolve class stuff.XMLUtils

¿Alguien puede explicar por qué esto es así? (Las cosas.XMLUtils es sólo un script groovy he compilado en /ruta/a/clases
)

He hecho un poco de investigación, y utilizando el siguiente script groovy para volcar el cargador de clases

def printClassPath(classLoader) {
  println "$classLoader"
  classLoader.getURLs().each {url->
     println "- ${url.toString()}"
  }
  if (classLoader.parent) {
     printClassPath(classLoader.parent)
  }
}
printClassPath this.class.classLoader

Con el -classpath arg, veo ninguna entrada en el cargador de clases para que se pasa en el classpath arg, (de hecho, el único es el directorio de trabajo actual dir), por ejemplo:

groovy.lang.[email protected]
groovy.lang.[email protected]
sun.misc.[email protected]
- file:/usr/share/java/ant.jar
- ... (removed for brevity)
- file:/home/admin/groovy/
sun.misc.[email protected]
- file:/usr/java/jdk1.6.0_23/jre/lib/ext/sunjce_provider.jar
- ...

El uso de la CLASSPATH=... versión muestra que la PWD entrada anterior se sustituye por el valor que me he fijado en la variable.

Y si puedo añadir de depuración para el groovy shell ejecutable, la diferencia en java llamado es que la -classpath arg versión añade ninguna entrada para java la classpath de entrada (que es en última instancia, ¿por qué se está dando una clase que no se encuentra el error), pero el CLASSPATH=... versión no agregar la ruta de acceso.

Es esto un error en groovy?

EDICIÓN: simple ejemplo de fallo de

- - - - xu.groovy
package stuff
def printIt(string) { println string }
- - - -

groovyc -d classes xu.groovy
groovy -cp classes -e "(new stuff.xu()).printIt('test')"  # fails
CLASSPATH=classes groovy -e "(new stuff.xu()).printIt('test')"  # works

Si puedo quitar el paquete, y las referencias a stuff el ejemplo de fallo funcionará bien.

OriginalEl autor Mark Fisher | 2012-02-22

3 respuestas

  1. 4

    Responder a esta conmigo, porque he encontrado una solución para el problema.

    Yo estaba utilizando el valor predeterminado de groovy paquetes de yum en fedora, sin embargo, encontró muchos problemas (errores de inicio de groovysh etc, incapaz de encontrar jline paquete, etc), y tienen totalmente trasladó a usar las versiones descargadas de codehaus.org y especificar manualmente GROOVY_HOME y edición de ruta para invocar el descargado uno en su lugar.

    Ahora todos mis ejemplos funcionan como se esperaba.

    OriginalEl autor Mark Fisher

  2. 3

    Estoy en MSYS/Win32 + groovy 2.2 RC1 y tienen otra vuelta de tuerca:

    groovy -cp “./*” secuencia de comandos.groovy //Funciona!

    groovy -cp some.jar secuencia de comandos.groovy //… no

    Por alguna razón, ninguno de los de arriba iba a salir en mi caso.

    OriginalEl autor Simon Thum

  3. 0

    Que extraño. Sólo traté de repetir explicó su problema, pero todo parece funcionar bien (he hecho pruebas con Groovy-Versión 1.8.6, 1.7.7 y 1.7.0 en mi Ordenador Ubuntu).

    Así que versión usas y cuál es tu sistema operativo?

    En el Groovy Bug Tracker he encontrado con el siguiente error: Opción de línea de comandos para classpath (–cp/–classpath) se rompe en Windows. Pero este error sólo afecta a las versiones antiguas de Groovy (1.5.2, 1.5.3 y 1.5.4). Así que tal vez una actualización de Groovy ayudará a solucionar su problema…

    PS: Normalmente acabo de comentar esto, pero por desgracia no he puntos suficientes para hacerlo :).

    Estoy usando Linux, Fedora 15. La versión de groovy Groovy Version: 1.8.0 JVM: 1.6.0_22.
    Todavia no hay una maravillosa versión 1.8.0 disponible en el sitio web oficial, así que no te puedo ayudar. He hecho una prueba con groovy versión 1.8.2, pero todo funciona bien. Así que te recomiendo actualizar groovy. Saludos
    Intenta agregar un paquete a la secuencia de comandos se prueba? He sido capaz de ejecutar correctamente -classpath o CLASSPATH=... si puedo quitar el paquete de instrucción y tienen todo el valor de nivel de paquete, pero tan pronto como puedo añadir el package stuff línea a la parte superior y compilar, groovy no parece encontrar con la -classpath arg. He probado esto en otra máquina que ejecuta 1.8.4 y sigue el mismo problema. He actualizado mi pregunta con un ejemplo detallado.
    Lo siento, pero tu ejemplo (con package stuff declaración) funciona bien en mi máquina…

    OriginalEl autor Stephan Kulla

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *