【问题标题】:Tests fail in JenkinsJenkins 测试失败
【发布时间】:2011-09-16 04:08:29
【问题描述】:

我有一个在 Jenkins 中构建和测试的 maven 项目。在我的本地机器上,测试运行成功,但在 Jenkins 中,无法加载测试所需的文件。我使用this.getClass.getResourceAsStream("testfile.dat") 来加载资源。詹金斯似乎没有将资源文件复制到运行测试的目录中。这是一个 Maven 问题吗?如何建议 Jenkins/Maven 将资源复制到测试类路径?

【问题讨论】:

  • 需要从哪里复制?他们在src/test/resources 中是否像他们应该的那样?
  • 他们在src/test/resources/my/package。现在我已将它们移至src/test/resources 并将我的测试类更改为this.getClass.getResourceAsStream("/testfile.dat")。现在找到了文件。所以我认为你解决了我的问题。如果您发表您的评论作为答案,我会接受它:)

标签: java resources maven junit jenkins


【解决方案1】:

我也遇到过类似的问题,但是出于各种原因我不想将资源移动到 src/test/resources。 不过,我可以通过将所有子文件夹显式添加到 pom.xml 来解决问题,如下面的 sn-p 所示:

<build>
  <resources>
    <resource>
        <directory>myFolder/subFolder1</directory>
    </resource>
    <resource>
        <directory>myFolder/subFolder2</directory>
    </resource>
    <resource>
        <directory>myFolder/subFolder3</directory>
    </resource>
  </resources>
    [....]
</build>

【讨论】:

    【解决方案2】:

    将您的测试资源放在您的 Maven 项目的 src/test/resourcestree 中。当您的测试运行时,Maven 将确保它们位于类路径中,因此可以使用 getResourceAsStream(...) 找到它们。

    【讨论】:

    • 根据我的经验,在标准资源文件夹下有子目录没有问题,Maven 将它们全部复制。我也认为按包对资源进行分组是一种很好的做法。
    • @Waldheinz - 我并不是要暗示有问题!
    【解决方案3】:

    当您将getResourceAsStream 与未指定包的字符串参数一起使用时(如您的示例“testfile.dat”),资源必须位于与@987654322 完全相同的包(又名文件夹)中@ 对象,您正在调用 getResourceAsStream 方法。你应该检查类和它的资源是否真的在同一个包中。

    您可能想看看 Maven 在打包项目时生成的 target 文件夹,您可以找到您的资源在哪里结束。

    【讨论】:

    • 嗯......我们正在谈论一个测试资源。它不应该出现在打​​包程序生成的工件中......或目标文件夹中。
    • @Stephen C 但我所说的仍然适用,只是它不在“main”文件夹下,而是在“test”文件夹下(你必须查看target/test-classes 而不是target/classes)。
    猜你喜欢
    • 2016-05-23
    • 2017-05-21
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2013-05-23
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多