是否可以创建一个可以在脚本中使用而无需编译的Groovy包?

时间:2017-05-26 07:27:54

标签: groovy

我使用groovy作为独立的脚本语言(不编译它)并且正在努力解决 使用package关键字构建多个文件,但仍然可以在其他文件中import 文件。这方面的一个例子如下:

目录结构:

+-- Project
    +-- Example.groovy
    +-- ExampleTest.groovy

使用当前设置,没有任何package个关键字,我可以拥有以下内容:

// Example.groovy
class Example {
    String message

    def Example(input = "placeholder") {
        this.message = input
    }
}

//ExampleTest.groovy
import Example

class ExampleTest extends GroovyTestCase {
    void testInitialiserWithoutArg() {
        def object = new Example()
        assertEquals(object.message, "placeholder")
    }

    void testInitialiserWithArg() {
        def object = new Example("test")
        assertEquals(object.message, "test")
    }
}

有了这个,我可以在项目目录中添加一个脚本来使用示例类或运行测试 在groovy ExampleTest.groovy的命令行上(groovy bin在PATH中)。

然后我如何将Example类放入包中,以便脚本可以导入 示例类,我可以在命令行上运行单元测试?例如:

+-- Project
    +-- some
    |   +-- random
    |       +-- main
    |       |   +-- Example.groovy
    |       +-- test
    |           +-- ExampleTest.groovy
    +-- UseExample.groovy

我向package some.randomExample.groovy添加了ExampleTest.groovy,但即使是。{ Example.groovyExampleTest.groovy只是在/Project/some/random目录中,我无法做到 似乎在importExample ExampleTest.groovy类来运行测试 命令行或如何在单独的脚本中导入整个some.randomUseExample.groovy

这是可能的,还是我必须先编译包才能使用它?

2 个答案:

答案 0 :(得分:1)

你必须配置你的ide来开始/测试你的项目。如果你想以bin/groovy的方式进行,那么这里有一个简单的命令行:

java.exe -classpath ".\embeddable\groovy-all-2.4.11.jar;.\my\test;.\my\main" groovy.ui.GroovyMain .\my\test\pack\Test.groovy 

其中:

  • \嵌入\ Groovy的全2.4.11.jar

    groovy libs的路径

  • \我\测试

    测试类/脚本的路径

  • \我\主

    主要课程/脚本的路径

  • groovy.ui.GroovyMain

    groovy脚本启动器/加载器

  • 。\ my \ test \ pack \ Test.groovy

    将要执行的入口点脚本。 即使它在类路径中,您也必须指定当前目录路径的完整或相对。

file struct:

        • A.groovy
    • 测试
        • Test.groovy

A.groovy

package pack

public class A{
    def f(p){
        println p
    }
}

Test.groovy

package pack

new A().f("hello")

答案 1 :(得分:0)

Daggett的回答有效,但要求import编辑(并且在groovy中可用)的所有其他库都添加到classpath列表中。然后我发现groovy可执行文件也有一个classpath参数,所以下面是Daggett的简化版本的答案,当时groovy脚本没有运行{{1可执行文件:

java

我还注意到类路径需要指向包的顶层目录,例如:

groovy -classpath "./path/to/ExampleClass.groovy" ./scriptThatUsesExampleClass.groovy

+-- Project +-- main | +-- my | +-- example | +-- ExampleClass.groovy +-- test | +-- my | +-- example | +-- TestExampleClass.groovy +-- UseExampleClass.groovy 包含UseExampleClass.groovy,java命令为:

import my.example.ExampleClass

对于groovy二进制文件:

path\to\Project:
> java -classpath %GROOVY_HOME%\lib\*;main groovy.ui.GroovyMain UseExampleClass.groovy

使用path\to\Project: > groovy -classpath main UseExampleClass.groovy 导致-classpath main\my\example