【问题标题】:Moving from plain Groovy to Gradle从普通的 Groovy 迁移到 Gradle
【发布时间】:2012-07-17 16:01:38
【问题描述】:

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

目前我所有的测试都在一个扩展GroovyTestCaseMyTest 类中。我可以用一个小 bash 脚本来运行它,比如

#! /bin/bash

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

groovy -cp "$LIBS" path/to/MyTest.groovy

这个布局有很多我不喜欢的地方:

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

Gradle 似乎正是我需要的工具。但是我找到的所有文档都假设以前了解 Java、Ant、Maven 和整个生态系统。

创建一个工作的 Gradle 项目的基本步骤是什么?

我已经按照here 的建议重新组织了目录结构,但我不明白如何声明依赖项。例如这个 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'
}

我得到错误

unable to resolve class org.apache.log4j.Level
 @ line 5, column 1.
   import org.apache.log4j.Level
   ^

如果我将存储库更改为

repositories {
  mavenCentral()
  flatDir { dirs 'lib' }
}

从我的lib 目录中获取log4j,我得到了

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'.

【问题讨论】:

  • 发布您的 gradle 构建脚本和您遇到的实际错误可能会有所帮助...
  • 事实上,我意识到我在别处复制了一个基本的 build.gradle,其中包含 groovy group: 'org.codehaus.groovy', name: 'groovy', version: '1.7.0' 行。我将其更改为groovy group: 'org.codehaus.groovy', name: 'groovy', version: '1.8.0',现在编译错误消失了。我将进行更多实验并更新问题

标签: testing groovy jenkins gradle


【解决方案1】:

直接的问题是您需要将 log4j 作为编译时依赖项导入。

解决办法是改变

runtime group: 'org.apache.log4j', name: 'log4j', version: '1.2.0'

compile group: 'org.apache.log4j', name: 'log4j', version: '1.2.0'

基本上,运行时依赖使代码在运行时可用(用于反射、传递依赖等),但在编译时不可用。如果您要针对 log4j 进行编译,则需要编译时间。

所有在编译时可用的东西在运行时自动可用。

接下来您要做的就是为您的 maven 风格的依赖项使用更简洁的语法。

group: 'org.apache.log4j', name: 'log4j', version: '1.2.0'

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

group: 'org.codehaus.groovy', name: 'groovy', version: '1.8.0'

可以表示为'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'
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2013-06-23
    • 2022-11-23
    • 1970-01-01
    相关资源
    最近更新 更多