【问题标题】:Why do my tests fail to run when migrating from maven2 to buildr?为什么从 maven2 迁移到 buildr 时我的测试无法运行?
【发布时间】:2009-07-22 14:36:34
【问题描述】:

我有一个简单的 maven2 java 项目(JMS 中继系统)。在我们发布第一个版本后,我们发现我们花在配置 maven 上的时间比实际编码要多。

对于下一个版本,我们想清理构建过程,有人建议迁移到构建器。所以我的任务就是这样做。

我根据他们网站上的文档设置了 buildr (1.3.4)。然后从项目的根目录输入 buildr 命令,然后通知 buildr 根据我的 pom.xml 创建构建文件。处理得很好并编译了所有代码。在 buildr 开始运行测试之前,一切都变得很糟糕。这是输出:

Test framework error: taskdef class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask cannot be found

显然指定的类不在我的类路径中。但是,构建器文档说包含基本测试所需的所有必需项目。他们的文档没有说他们需要任何特定的 ant 库或 ant 版本。虽然我确实安装了 ant 1.7.0(但不包含在我的类路径中)。

有人见过这个吗?


更新

我在 maven 存储库中找到了臭名昭著的 ant-optional jar。包括在我的 test.with 选项中并没有解决问题。

使用 --trace 运行 buildr 命令会提供这些额外信息...

Tests failed!
/pathtoruby/buildr-1.3.4/lib/buildr/core/test.rb:455:in `run_tests'
/pathtoruby/buildr-1.3.4/lib/buildr/core/test.rb:199:in `initialize'

【问题讨论】:

    标签: java maven-2 migration buildr


    【解决方案1】:

    发现问题... 显然需要一个 ant-junit.jar,但无论出于何种原因,在我的本地存储库中,它归根用户所有,而不是我的本地用户帐户(OSX 系统)。所以建造者无法访问它。我从本地存储库中删除了这些项目并重新运行了 buildr(它下载了所需的项目)。


    更新

    这也引起了其他一些问题。似乎我的本地存储库中的其他一些项目具有奇怪的权限。我最终只是归档了我的存储库并让 maven 重建它。这解决了我所有的问题。我现在有一个不错的构建文件,它只有 25 行代码,而我之前的 pom.xml 文件超过 100 行。

    【讨论】:

      【解决方案2】:

      您收到该错误是因为 JUnitTask 不在类路径中。我对 Buildr 不是很熟悉,所以不能说您是否需要指定 JUnit jar,但如果 Buildr 使用系统类路径,请尝试将 JUnit 添加到其中,看看会发生什么。

      一旦您确认您的构建将在 JUnit 侵入类路径的情况下运行,然后您可以尝试更改您的配置,直到它按预期运行,或者保持原样。

      您可以发布对文档相关部分的引用吗?我没有看到任何内容(在我对该网站的简短阅读中)说包含了必需的项目。

      有没有可能你还没有下载所有的 gem?如果你运行“gem update --system”来更新Ruby,那么“gem update buildr”就可以确保所需的依赖已经全部安装完毕。

      【讨论】:

      • "test.compile 任务将首先运行 compile 任务,然后使用相同的依赖项来编译测试类。你已经假设了。它还添加了测试框架(例如 JUnit、TestNG)和 JMock 到依赖列表。对你来说工作更少。如果你需要更多的依赖,添加它们的最好方法是调用 test.with。这个方法将依赖添加到 compile.dependencies(用于编译)和 test.dependencies(用于运行)。你可以分别管理这两个依赖列表,但在更多情况下使用 test.with 就足够了。找到buildr.apache.org/testing.html
      • 我已经确认 ruby​​ 是最新的,并且已经多次卸载并重新安装了 buildr。
      • 似乎 org.apache.tools.ant.taskdefs.optional.junit.JUnitTask 在 maven 存储库中不可用。这不是一个 junit 库,而是一个用于 junit 任务的 ant 包装器。
      • 我不确定您的意思是什么,Maven 不需要为 JUnit 使用任何 ant 包装器,因此存储库中缺少它不会影响 Maven 的执行。
      • Maven 不需要,但 buildr 在调用其测试任务类时需要它。
      猜你喜欢
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2022-07-18
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      相关资源
      最近更新 更多