2012-02-22 42 views
6

調用使用CLASSPATH前綴如下Groovy腳本正常工作:爲什麼groovy不使用classpath參數?

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

但改變它使用的classpath 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只是一些常規的腳本我已經編入/路徑/到/班 )

我已經做了一些調查,並使用以下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過去了,(其實,唯一的目錄是當前工作目錄)的條目,如:

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

使用CLASSPATH=...版本顯示, PWD入門abo ve被我在變量中設置的值所取代。

如果我將調試添加到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引用失敗的例子將正常工作。

回答

4

回答這個問題,因爲我找到了解決方案。

我在Fedora中使用yum的默認groovy軟件包,但發現很多問題(開始groovysh等錯誤,無法找到jline軟件包等),並完全轉移到使用codehaus.org下載的版本,並手動指定GROOVY_HOME並編輯路徑來調用下載的路徑。

現在我所有的例子都按預期工作。

0

這很奇怪。我只是試圖重複你解釋的問題,但似乎一切正常(我在我的Ubuntu計算機上使用Groovy-1.8.6,1.7.7和1.7.0進行測試)。

那麼你使用哪個版本,你的操作系統是什麼?

在Groovy Bug Tracker中,我發現了以下錯誤:Command line option for classpath (--cp/--classpath) is broken on Windows。但是這個bug隻影響到舊版本的Groovy(1.5.2,1.5.3和1.5.4)。所以也許Groovy的升級將有助於解決您的問題...

PS:通常我只是會對此發表評論,但不幸的是我沒有足夠的積分來做到這一點:)。

+0

我使用的是Linux,Fedora 15. groovy的版本'Groovy版本:1.8.0 JVM:1.6.0_22'。 – 2012-02-27 09:34:18

+0

@Mark官方網站還沒有一個常規版本1.8.0,所以我不能幫你。我也用groovy 1.8.2進行了測試,但一切正常。所以我建議你升級groovy。 Greetings – 2012-02-27 21:04:59

+0

您是否嘗試將軟件包添加到您正在測試的腳本中?我已經能夠成功運行'-classpath'或'CLASSPATH = ...',如果我刪除了package語句並將所有內容都放在默認包級別上,但是隻要將'package stuff'行添加到頂部,並且編譯時,groovy似乎沒有用'-classpath' arg找到它。我在另一臺運行1.8.4的機器上試過這個,但仍然是同樣的問題。我用一個詳細的例子更新了我的問題。 – 2012-02-27 21:11:01

3

我在MSYS /的Win32 +常規2.2 RC1,並有另一種扭曲:

常規-cp 「./*」 script.groovy //作品!

常規-cp some.jar script.groovy // ...不

出於某種原因,沒有以上會在我的情況下工作了。

相關問題