[英]How to invoke groovy with 'java' from command line
我必須將一些groovy代碼發送給一些只安裝了java的用戶(沒有grooy,沒有$ groovy_home等)。 我試圖從命令行調用groovy,但我沒有運氣。 這是我的bat文件:
java -classpath .;lib;bin;bin-groovy introspector.AclCollector
這是我的例外:
Exception in thread "main" java.lang.NoClassDefFoundError: groovy/lang/GroovyObject
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Caused by: java.lang.ClassNotFoundException: groovy.lang.GroovyObject
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 12 more
Could not find the main class: introspector.AclCollector. Program will exit.
有人有線索嗎? 我在\\ lib目錄中有'groovy-all-1.6-beta-1.jar'。
你在這里有一個從Java調用的Groovy app的另一個例子(在這種情況下,來自ant,但總體思路是一樣的)。
java -cp [...];%GROOVY_HOME%/embeddable/groovy-all-1.5.4.jar;[..]
正如frankowyer所提到的,你在java的classpath參數中明確列出了確切的groovy jar。
由於您的客戶端沒有特殊的環境變量,只需將%GROOVY_HOME%/...
替換為完整路徑:
我認為你需要在類路徑中明確列出groovy jar
避免不同機器上不同類路徑出現問題的一種方法是將所有必需的依賴項捆綁到一個jar中,這樣也可以更輕松地分發給用戶。 這可以通過這個'GroovyWrapper'腳本完成。 默認情況下,默認情況下包含默認的jar(embeddable / groovy-all- .jar和lib / commons .jar),如果您需要其他JARS,則可以輕松添加它們。
有關完整腳本和說明,請參閱http://docs.codehaus.org/display/GROOVY/WrappingGroovyScript 。
這是一個如何使用GroovyWrapper的示例:
假設您有groovy腳本HelloWorld.groovy,使用GroovyWrapper構建HelloWorld.jar,如下所示:
$ groovy GroovyWrapper -c -m HelloWorld
GroovyWrapper將腳本HelloWorld.groovy編譯為HelloWorld.class,並創建一個自執行jar的HelloWorld.jar。
現在,只需運行以下命令即可使用HelloWorld.jar啟動HelloWorld腳本:
$ java -jar HelloWorld.jar
VonC的偉大答案:
.......由於您的客戶沒有特殊的環境變量,只需將
%GROOVY_HOME%/
...替換為完整路徑:groovy.jar or goovy-all-VERSION.jar (to minimize any conflict with other libraries)........
這適用於Windows Vista:
在系統屬性中| 環境變量| 用戶變量:變量名稱GROOVY_HOME
設置為C:\\groovy\\Groovy-1.8.5
,變量名稱CLASSPATH
值設置為包括.;%GROOVY_HOME%\\embeddable\\groovy-all-1.8.5.jar
不要犯下我做的錯誤(旋轉我的車輪),不要用“。”來預先結束'groovy-all'的路徑。 (點和分號):因為路徑需要你找到主類的基礎文件夾(看起來很奇怪)
注意[〜]!
java -cp .:~/path-to-groovy-all.jar YourClassName # does not work
java -cp ~/path-to-groovy-all.jar:. YourClassName # works
java -cp .:/full/path/to/goovy-all.jar YourClassName # works
在第一行中,tilde不會被bash處理,並且java無法理解它。
在第二行波浪線被替換為bash,一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.