我正在使用资源目录中的文件,使用代码调用它:
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/