gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:49:25 25 4
gpt4 key购买 nike

使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com