java - 为什么 Jenkins 无法加载资源?

标签 java eclipse jenkins junit m2e

这是我的项目布局:

src/
  test/
    resources/
        ares/
          file1.xml
          file2.xml

这是 Jenkins 工作区的布局:

 my-module/
   target/
     test-classes/
       ares/
         file1.xml
         file2.xml

在 eclipse 下,测试运行没有任何错误。 在 Jenkins 上,测试只是失败了。 Jenkins 无法定位资源。 以下是测试执行的一些输出:

eclipse

MyClass.class.getResourceAsStream(/ares/file1.xml) => java.io.BufferedInputStream@4f4b2f1a
MyClass.class.getResourceAsStream(ares/file1.xml) => null

Thread.currentThread().getContextClassLoader().getResourceAsStream(/ares/file1.xml) => null
Thread.currentThread().getContextClassLoader().getResourceAsStream(ares/file1.xml) => java.io.BufferedInputStream@5d402eeb

MyClass.class.getClassLoader().getResourceAsStream(/ares/file1.xml) => null
MyClass.class.getClassLoader().getResourceAsStream(ares/file1.xml) => java.io.BufferedInputStream@20c87621

Jenkins

MyClass.class.getResourceAsStream(/ares/file1.xml) => null
MyClass.class.getResourceAsStream(ares/file1.xml) => null

Thread.currentThread().getContextClassLoader().getResourceAsStream(/ares/file1.xml) => null
Thread.currentThread().getContextClassLoader().getResourceAsStream(ares/file1.xml) => null

MyClass.class.getClassLoader().getResourceAsStream(/ares/file1.xml) => null
MyClass.class.getClassLoader().getResourceAsStream(ares/file1.xml) => null

如您所见,Jenkins 没有找到我的资源。

我错过了什么?

最佳答案

我遇到了类似症状但不同原因和不同解决方案的问题。

在我的例子中,问题是 Jenkins 服务器是一台 Windows 机器,服务器上到资源位置的完整路径以 C:\Program Files (x86)\... 有空格。如果您需要使用 new File(getClass().getResource(fileName)) 作为 File 而不是流,这些空格将被编码为 %20。 getFile())。这里的 fileName 是一个包含资源名称的字符串。我通过添加对 URLDecoder.decode 的调用解决了这个问题。当没有空格或您不在 Windows 上时(据我所知),这不会产生任何问题,但如果您在该行的某处名称中有空格,则可以解决问题。完整的调用是:

 new File(URLDecoder.decode(getClass().getResource(fileName).getFile(), "UTF-8"))

我从几个问题中拼凑了这个,但没有一个问题将它们拼凑起来用于 Jenkins 案例,因此我在这里回答。其他相关问答:

关于java - 为什么 Jenkins 无法加载资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33691950/

相关文章:

java - Jsoup Select 具有多个查询/Jsoup select 内部是否有 OR 操作?

java - 无法启动 JBoss 7.1.1 Final

asp.net-core - Jenkins dotnet lambda deploy-serverless 由于找不到指定的命令或文件而无法执行

java - 如何在不使用 java 中的递归或循环的情况下查找阶乘?

java - 给定一个数字数组,不除法返回所有其他数字的乘积数组?

java - ADF : how to set specific view criteria in Saved Search programmatically in af:query

java - 单击 ToggleButton 并调用函数时,Android 项目崩溃

java - m2Eclips插件: Resolve Workspace Artifacts - is it a good practice

python - 更新目录时运行 Python 脚本

Jenkins环境变量在构建后的步骤中可用