如何在任何地方使用groovy Script?

时间:2016-02-25 07:58:49

标签: java groovy command-line

我的简单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

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

这两个类都需要在类路径中。您可以通过多种方式实现这一目标。

使用单个.groovy文件

与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!")
    }

}

打包成.jar

更复杂的方法是使用groovyc编译类,并将编译的.class文件打包到.jar文件中。 (我知道我已经做到了这一点,但遗憾的是找不到代码)。最后,您可以像这样执行应用:java -jar example.jar