2011-08-21 39 views
1

我想使用一些Jython代碼作爲Groovy閉包,所以我相信我需要將Jython文件導入到Groovy腳本中,並將其傳遞到Groovy的MethodClosure()函數中以生成閉包。如何將Jython文件導入到Groovy中?

例如,我把這個變成一個Groovy文件:

import rand$py 

cl = MethodClosure(rand$py.Rand(), "nextDouble") 

顯然jythonc也已被棄用,我找不到它在我的系統上,因此我從另一個導入它產生的蘭德$ py.class .py文件並在其他文件上運行Jython。 rand $ py.class與Groovy文件位於同一目錄中。

這裏是我得到的錯誤,當我嘗試執行Groovy的文件:

Exception in thread "main" java.lang.NoClassDefFoundError: org/python/core/PyRunnable 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:634) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) 

     ........ 

    at com.tinkerpop.gremlin.jsr223.ScriptExecutor.evaluate(ScriptExecutor.java:34) 
    at com.tinkerpop.gremlin.jsr223.ScriptExecutor.main(ScriptExecutor.java:20) 
Caused by: java.lang.ClassNotFoundException: org.python.core.PyRunnable 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 

它看起來像它的發現,因爲不知何故,知道這是一個Python文件(或它知道,因爲$ PY在他們的名字?)。我通常不在JVM中工作,所以我可能錯過了一些基本的東西。

編輯:我改變import rand$pyimport bogus$py,看它是否產生同樣的錯誤,並沒有因此它看起來像它的某些部分是尋找類文件:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
Script1.groovy: 80: unable to resolve class bogus$py 
@ line 80, column 1. 
    import bogus$py 
^

1 error 

回答