java - 使用 Jenkins 的 recsource 文件路径不正确

标签 java jenkins workspace getresource

我正在使用资源目录中的文件,使用代码调用它: XmlDataLoader.class.getClassLoader().getResource("testData").getPath()

它在我的本地机器上运行良好,文件路径正确: C:/Work/PROJECT_NAME/test/selenium/target/classes/testData

然后我希望它在 linux 环境中的服务器上的 Jenkins 作业中使用,但我得到 NullPointerException:

[WARNING] File 'var/lib/jenkins/workspace/project/test/selenium/target/classes/testData/' does not exist

这是因为路径中“project”和“test”文件夹之间丢失了“workspace”目录。正确的路径应该是: var/lib/jenkins/workspace/project/ws/test/selenium/target/classes/testData 所需文件确实存在,但由于某种原因 Jenkins 构建 路径不正确,丢失了 /ws/目录。 谁能帮我一下吗?为什么 class.getClassLoader().getResource("testData").getPath()在服务器上不能正常工作?

我在 Maven pom 文件中设置了资源:

<resource> <directory>resources</directory> </resource>

最佳答案

使用 .getResource("testData") 可能会导致问题,因为您永远不知道资源是否可访问。

At runtime, the resource folder is seldom in the same location on disk as it is in our source code.所以我们需要另一种访问文件的方式。

因此,首选方法是使用 getResourceAsStream(String),它会返回一个您可以直接读取的 InputStream。

最好从类路径而不是特定文件位置加载资源:

try (InputStream inputStream = getClass().getResourceAsStream("/testData");
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
String contents = reader.lines()
  .collect(Collectors.joining(System.lineSeparator()));
}

关于java - 使用 Jenkins 的 recsource 文件路径不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32251857/

相关文章:

java - Eclipse 文件夹结构

jenkins:清理未使用的工作区

java - 如何从 JDBC 方法返回多行?

linux - 在 Jenkins 管道作业中将变量传递给 bash 脚本

java - jenkins 使用 hibernate create-drop 选项进行部署

jenkins - Jenkins 代理响应时间是如何计算的?

XCode 7.3 - 工作区使用

Java如何使用类对象进行List初始化

java - Hive UDF 在 select 中抛出 Class Not Found 异常

java - 音频输入流 : any way keep track of number of bytes read from source stream?