从普通的Groovy转移到Gradle

And*_*rea 2 testing groovy gradle jenkins

我在Groovy中有一个很小的应用程序.目前我可以在命令行上测试它,但我需要将它与Jenkins服务器集成.因此,我曾考虑将其与Gradle集成,以Jenkins可以读取的标准格式生成测试输出.(请考虑一下我是Groovy,Gradle,Jenkins和JVM环境的新手).

目前,我所有的测试都在一个MyTest扩展的类中GroovyTestCase.我可以用一个像bash这样的小脚本来运行它

#! /bin/bash

DIR=$( cd "$( dirname "$0" )" && pwd )
LIBS="$DIR/lib/*"

groovy -cp "$LIBS" path/to/MyTest.groovy
Run Code Online (Sandbox Code Playgroud)

在这种布局中有很多我不喜欢的东西:

  • 首先,我想将测试分成多个类并将它们加入到测试套件中,但测试用例的优势在于它可以在Groovy中自动运行
  • 其次,正如我所说,我希望能够获得Jenkins消费的测试报告
  • 第三,我不知道是否将所有必需的罐放入lib目录是一个好习惯 - 可能不是.

Gradle似乎正是我需要的工具.但是我发现的所有文档都假定了Java,Ant,Maven和整个生态系统的先前知识.

创建有效的Gradle项目的基本步骤是什么?

我按照此处的建议重新组织了目录结构,但我不明白如何声明依赖项.例如,使用此build.gradle

apply plugin: 'groovy'

repositories {
  mavenCentral()
}

dependencies {
  groovy group: 'org.codehaus.groovy', name: 'groovy', version: '1.8.0'
  runtime group: 'org.apache.log4j', name: 'log4j', version: '1.2.0'
}
Run Code Online (Sandbox Code Playgroud)

我得到了错误

unable to resolve class org.apache.log4j.Level
 @ line 5, column 1.
   import org.apache.log4j.Level
   ^
Run Code Online (Sandbox Code Playgroud)

如果我将存储库更改为

repositories {
  mavenCentral()
  flatDir { dirs 'lib' }
}
Run Code Online (Sandbox Code Playgroud)

获得log4j从我的lib目录,我得到

A problem occurred evaluating root project 'alfred'.
Cause: Could not find method flatDir() for arguments [build_3urmo05tgpv3e97u7h8ij47i3$_run_closure1_closure3@64c7f7c4] on root project 'alfred'.
Run Code Online (Sandbox Code Playgroud)

Sea*_*lly 6

当前的问题是您需要将log4j作为编译时依赖项导入.

修复是改变

runtime group: 'org.apache.log4j', name: 'log4j', version: '1.2.0'
Run Code Online (Sandbox Code Playgroud)

compile group: 'org.apache.log4j', name: 'log4j', version: '1.2.0'
Run Code Online (Sandbox Code Playgroud)

基本上,运行时依赖性使代码在运行时可用(用于反射,传递依赖等),但不能在编译时使用.如果你正在编译log4j,你需要编译时间.

编译时可用的所有内容在运行时自动可用.

接下来要做的就是为maven风格的依赖项使用terser语法.

group: 'org.apache.log4j', name: 'log4j', version: '1.2.0'
Run Code Online (Sandbox Code Playgroud)

可以表达为 'org.apache.log4j:log4j:1.2.0'

group: 'org.codehaus.groovy', name: 'groovy', version: '1.8.0'
Run Code Online (Sandbox Code Playgroud)

可以表达为 'org.codehaus.groovy:groovy:1.8.0'

把它们放在一起,你的build.gradle文件应如下所示:

apply plugin: 'groovy'

repositories {
  mavenCentral()
}

dependencies {
  groovy 'org.codehaus.groovy:groovy:1.8.0'
  compile 'org.apache.log4j:log4j:1.2.0'
}
Run Code Online (Sandbox Code Playgroud)