Почему Groovy не использует путь к классам аргумент?

Вызов отличного сценария с использованием префикса CLASSPATH, как показано ниже, работает нормально:

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

но изменение его на использование аргумента пути к классам не работает:

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

и дает ошибку:

script_from_command_line: 1: unable to resolve class stuff.XMLUtils

Может ли кто-нибудь объясните почему это? (Файл stuff.XMLUtils - это просто отличный скрипт, который я скомпилировал в / path / to / classes )

Я провел небольшое расследование и использовал следующий отличный скрипт для сброса загрузчика классов

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

С аргументом -classpath arg, я не вижу записи в загрузчике классов для переданного в classpath arg, (фактически, единственный каталог - это текущий рабочий каталог), например:

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
- ...

Использование CLASSPATH = ...Версия показывает, что указанная выше запись PWD заменена значением, которое я установил в переменной.

И если я добавлю отладку в исполняемый файл оболочки groovy, разница в вызове java будет в том, что версия аргумента -classpath arg не добавляет записи в запись пути к классам java (что в конечном итоге является причиной того, что класс не обнаружена ошибка), но версия CLASSPATH = ... добавляет путь.

Это ошибка в Groovy?

РЕДАКТИРОВАТЬ: простой пример с ошибкой

- - - - 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

Если я удалю пакет и ссылки на материал , пример с ошибкой будет работать нормально.

6
задан Mark Fisher 27 February 2012 в 21:14
поделиться