我的简单Groovy项目包含两个类。 我添加了PATH变量的包含路径。
ExampleClass.groovy
#!/usr/bin/env groovy
class ExampleClass {
static void main(String[] args) {
UtilClass util = new UtilClass()
util.testPrint("Success!")
}
}
UtilClass.groovy
#!/usr/bin/env groovy
class UtilClass {
void testPrint(String text) {
println(text)
}
}
当我在包含目录中运行“ExampleClass.groovy”时,一切都很好。 。但是当我在其他地方运行“ExampleClass.groovy”时,我明白了:
org.codehaus.groovy.control.MultipleCompilationErrorsException: 启动失败: C:\用户\ buehlmannt \ IdeaProjects \ MessageKeyRefactoring的\ src \ ExampleClass.groovy: 6:无法解析类UtilClass @第6行,第19列。 UtilClass util = new UtilClass() ^
C:\用户\ buehlmannt \ IdeaProjects \ MessageKeyRefactoring \ SRC \ ExampleClass.groovy: 6:无法解析类UtilClass @第6行,第26列。 UtilClass util = new UtilClass() ^
2个错误
我已经尝试将UtilClass添加到类路径中。但我无法调用“this.class.classLoader.rootLoader.addURL(new URL(”./“))”,因为rootLoader返回一个没有addUrl方法的ClassLoader对象。 - > Watch second answer
这样做的最佳方式是什么?
答案 0 :(得分:1)
这两个类都需要在类路径中。您可以通过多种方式实现这一目标。
与Java不同,您可以将多个Groovy类放在一个文件中:
<强> ExampleClass.groovy 强>
#!/usr/bin/env groovy
class ExampleClass {
static void main(String[] args) {
UtilClass util = new UtilClass()
util.testPrint("Success!")
}
}
class UtilClass {
void testPrint(String text) {
println(text)
}
}
就是这样。我会工作的。 注意:文件中列出类的顺序无关紧要。
这个稍微复杂一点,而且非常脆弱,因为你必须考虑这些类在文件系统中的位置:
#!/usr/bin/env groovy -cp $WHEREEVER_THE_CLASSES_ARE_LOCATED
class ExampleClass {
static void main(String[] args) {
UtilClass util = new UtilClass()
util.testPrint("Success!")
}
}
更复杂的方法是使用groovyc编译类,并将编译的.class文件打包到.jar文件中。 (我知道我已经做到了这一点,但遗憾的是找不到代码)。最后,您可以像这样执行应用:java -jar example.jar