2014-02-19 67 views
4

我用我的Java類GroovyClassLoader解析某(最好是複雜的)常規文件(在下一步將要執行):在MyClass.javaGroovyClassLoader進口

final Class parsedClass = groovyClassLoader.parseClass(groovyFile); 

呼叫

知道了:

  • Groovy文件需要存儲在文件系統中,因爲將需要更改,恕不重新部署。
  • 這種常規文件需要幾個進口:

GroovyFile.groovy進口

import com.my.import.one.Import1DTO 
import com.my.import.two.Import2DTO 
import com.my.import.three.Import3DTO 
import com.my.import.four.Import4DTO 
import com.my.import.five.Import5DTO 

當調用parseClass方法,此異常引起:

例外

unable to resolve class com.my.import.one.Import1DTO; 
unable to resolve class com.my.import.two.Import2DTO; 
unable to resolve class com.my.import.three.Import3DTO; 
unable to resolve class com.my.import.four.Import4DTO; 
unable to resolve class com.my.import.five.Import5DTO; 

我可以在解析基類之前獲得我期望的行爲,而無需解析每個導入類嗎?

謝謝!

回答

5

這裏是使用上GroovyClassLoader

import groovy.lang.GroovyClassLoader; 

public class MyClass { 
    public static void main(String... args) { 
     GroovyClassLoader groovyClassLoader = new GroovyClassLoader(); 

     // add "lib" to the classpath 
     groovyClassLoader.addClasspath("lib"); 

     String groovyFile = "GroovyFile.groovy"; 
     Class parsedClass = groovyClassLoader.parseClass(groovyFile); 
     System.out.println("class is " + parsedClass.toString()); 
    } 
} 

我假定的DTO寫入Groovy和我們使用「myimport」,因爲「my.import.x」的addClasspath()方法的示例MyClass.java將由於非法語法而失敗。如果我們有一個「lib」目錄像這樣,以編譯的類:

lib/com/myimport/one/Import1DTO.groovy 
lib/com/myimport/one/Import1DTO.class 
lib/com/myimport/two/Import2DTO.groovy 
lib/com/myimport/two/Import2DTO.class 

和GroovyFile.groovy存在的主要目錄。例如

import com.myimport.one.Import1DTO 
import com.myimport.two.Import2DTO 

println "hi there" 

那麼上面的Java代碼適合我。

我在類路徑(GroovyClassLoader)上使用Groovy 2.2.1和groovy-all-2.2.1.jar。

+0

謝謝!繼續你的例子,我想不需要重新部署如果我在Import1DTO.groovy,Import2DTO.groovy或GroovyFile.groovy中進行了一些更改,但會發生什麼如果我使用所需的Import3DTO.class創建一個新的Import3DTO.groovy? –