在不编译的情况下动态加载groovy类/脚本?
我在包层次结构中有一组groovy脚本。我有1个主脚本,我想从中调用其他脚本。例如,我有以下脚本(其中包含同名的公共类/接口): 有没有一种方法可以在编译时不知道被调用的类名的情况下从另一个脚本调用一个脚本?我想做一些类似于动态类加载的事情,比如:在不编译的情况下动态加载groovy类/脚本?,groovy,classloader,Groovy,Classloader,我在包层次结构中有一组groovy脚本。我有1个主脚本,我想从中调用其他脚本。例如,我有以下脚本(其中包含同名的公共类/接口): 有没有一种方法可以在编译时不知道被调用的类名的情况下从另一个脚本调用一个脚本?我想做一些类似于动态类加载的事情,比如: class MainScript { public static void main (String[] args) { MyInterface instance = Class.forName("package.utils.Util
class MainScript {
public static void main (String[] args) {
MyInterface instance = Class.forName("package.utils.Util1");
}
}
是啊!Groovy是一种动态语言。你可以
问题是,要使用class.forName加载类,必须在类路径的某个位置编译该类。我需要做的是加载它而不必编译。当我尝试您的建议时,我得到ClassNotFoundException:(也许这有帮助:。请参阅Java应用程序内部动态使用Groovy部分。是的,就是这样-请参阅Arturo的评论以获得我问题的答案。感谢Arturo。该链接似乎不再处于活动状态。这是新位置:
class MainScript {
public static void main (String[] args) {
MyInterface instance = Class.forName("package.utils.Util1");
}
}
package.MyInterface
class MyInterfaceImpl1 {
def greet() {
"Hello"
}
}
package.MyInterface
class MyInterfaceImpl2 {
def greet() {
"Hi!"
}
}
def name = 'MyInterfaceImpl1' // Choose whatever you want at runtime
def className = Class.forName("MyInterface.$name")
def instance = className.newInstance()
assert instance.greet() == 'Hello'