Pourquoi ne pas utiliser groovy classpath argument?

Invoquant un script groovy à l'aide de CLASSPATH préfixe comme suit fonctionne très bien:

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

mais changer pour utiliser le classpath arg n'est pas le cas:

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

et donne l'erreur:

script_from_command_line: 1: unable to resolve class stuff.XMLUtils

Quelqu'un peut-il expliquer pourquoi il en est? (Le truc.XMLUtils est juste quelques groovy script que j'ai compilé dans /chemin/vers/classes
)

J'ai fait quelques recherches, et à l'aide de la suite de groovy script pour vider le chargeur de classe

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

Avec le -classpath arg, je ne vois pas d'entrée dans le chargeur de classe pour le passé dans le classpath arg (en fait, le seul répertoire de travail courant dir), par exemple:

groovy.lang.GroovyClassLoader$InnerLoader@4911b910
groovy.lang.GroovyClassLoader@18203c31
sun.misc.Launcher$AppClassLoader@35a16869
- file:/usr/share/java/ant.jar
- ... (removed for brevity)
- file:/home/admin/groovy/
sun.misc.Launcher$ExtClassLoader@77cde100
- file:/usr/java/jdk1.6.0_23/jre/lib/ext/sunjce_provider.jar
- ...

À l'aide de la CLASSPATH=... version montre que la DDT de l'entrée ci-dessus est remplacé par la valeur que j'ai mis dans la variable.

Et si j'ajoute de débogage pour le groovy shell exécutable, à la différence de java est l'appel que le -classpath arg version n'ajoute pas de l'entrée de java le classpath de l'entrée (qui est en fin de compte pourquoi c'est de donner une classe ne trouve pas d'erreur), mais le CLASSPATH=... version ajouter le chemin d'accès.

Est-ce un bug groovy?

EDIT: simple exemple d'échec 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 je supprime le paquet et les références à stuff l'exemple d'échec ne fonctionne correctement.

InformationsquelleAutor Mark Fisher | 2012-02-22