groovy - 为什么 groovy 不使用类路径参数?

标签 groovy

使用 CLASSPATH 前缀调用 groovy 脚本如下工作正常:

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

但将其更改为使用类路径 arg 不会:
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 中的一些常规脚本
)

我已经做了一些调查,并使用以下 groovy 脚本来转储类加载器
def printClassPath(classLoader) {
  println "$classLoader"
  classLoader.getURLs().each {url->
     println "- ${url.toString()}"
  }
  if (classLoader.parent) {
     printClassPath(classLoader.parent)
  }
}
printClassPath this.class.classLoader

-classpath arg,我在类加载器中没有看到传入的类路径 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 shell 可执行文件中,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

如果我删除包和对 stuff 的引用失败的例子可以正常工作。

最佳答案

自己回答这个问题是因为我找到了解决问题的方法。

我在 Fedora 中使用来自 yum 的默认 groovy 包,但是发现了许多问题(启动 groovysh 等时出错,无法找到 jline 包等),并且已经完全转向使用从 codehaus.org 下载的版本,并手动指定 GROOVY_HOME 和编辑改为调用下载的路径。

现在我所有的例子都按预期工作。

关于groovy - 为什么 groovy 不使用类路径参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9394305/

相关文章:

java - Groovy 脚本中 Java 代码的性能

rest - 在模拟服务 URL 中使用通配符

java - 从 Grails 启动命令行程序?

grails - XmlSlurper的Grails/Groovy问题..帮助

java - 点语言标识符的正则表达式

java - 如何使用java6代码计算文件的硬链接(hard link)、所有者和组?

javascript - 在grails gsp标签中输入jquery语句

groovy - 在多个settings.gradle中重用代码

grails - 需要一个带有多个参数的groovy-wslite POST示例

eclipse - Groovy 不推荐使用的方法和 Eclipse - 排序