是否可以创建一个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.random这两个Example.groovyExampleTest.groovy,但即使Example.groovyExampleTest.groovy刚刚在/Project/some/random目录中,我似乎无法工作,如何importExample课堂ExampleTest.groovy从运行命令行或如何导入整个测试some.random包像一个单独的脚本UseExample.groovy

这可能吗,或者我必须先编译该软件包才能使用它?

因基克里斯

达格特(Daggett)的答案奏效,但要求将所有imported(并以groovy形式提供)的所有其他库添加到classpath列表中。然后我发现groovy可执行文件也有一个classpath参数,因此以下是Daggett回答的简化版本,用于在不使用java可执行文件运行常规脚本时

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

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

+-- Project
    +-- main
    |   +-- my
    |       +-- example
    |           +-- ExampleClass.groovy
    +-- test
    |   +-- my
    |       +-- example
    |           +-- TestExampleClass.groovy
    +-- UseExampleClass.groovy

如果UseExampleClass.groovy包含import my.example.ExampleClass,则Java命令为:

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导致unable to resolve class my.example...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有一种方法可以仅使用时间就可以从一个屏幕切换到另一个屏幕,而无需使用任何事件?

我如何在constraintlayout创建一个容器,这样我就可以设置背景?

同一个 SQL Server 临时表是否可以被多个独立执行的 Python 脚本持久化和使用而无需每次都重新创建?

是否可以创建无需在scala中导入就可以访问的方法?

在结构归纳证明中概括一个要求就可以使用归纳假设

如果无需编写代码就可以制作游戏,为什么要编码一个?

是否可以仅使用交换机就可以构建完全功能的LAN,而无需任何路由器?

链式请求,这样我就可以在第二个请求中使用第一个请求中的数据

无需阅读就可以窥视Conn

在C#中创建一个dll的步骤,然后可以从php中使用它

是否有一个 android 项目可以提供所有视图而无需从头开始创建它们?

每次发出一个zip 2时就可以观察到

只需添加一个类就可以制作SVG动画

无论如何,是否知道前一个种子就可以计算下一个种子?

是否可以创建一个可被任何进程使用的“文件”,而无需实际将文件保存在磁盘上?

是否可以导出由JetBrains MPS创建的DSL编译器并独立使用(例如,从另一个Java程序调用它)

是否可以在python中导入一个模块,然后将其删除,但仍然可以在程序中使用它?

考虑到两者都在同一个文件夹中,而无需指定文件路径,就可以将数据从一个关闭的工作簿传输到一个打开的工作簿中

一个不同的CPP文件如何仅通过定义就可以使用另一个功能?C ++

如何使用数组的索引值并将其传递给HTML模态,这样我就可以在那里显示数据而无需在angular 7中使用循环

无需在VBA中编写宏就可以确定元素在特定范围内是否唯一:是否有公式可以做到这一点?

是否可以在Js中使用await而无需异步

如何检查是否无需克隆就可以访问存储库?

Scanf对标准输入采用两个循环值,但仅需一个就可以结束循环

最多更改一个数字就可以获得多少个可被3整除的数字

在HTML中,如何构建文件选择器,而无需使用动作侦听器就可以更改显示的图像?

为什么在JavaScript中定义函数之前就可以使用它?

如何自动安装辅助的内部HDD,以便从启动就可以使用它的符号链接?

是否有一个单声道回购库,该库可让我们使用带有类型建议的打字稿包而无需编译?