2

需要一些帮助来解决问题。在我的一个 java 类中,我需要访问一个文件。该文件必须与所讨论的 java 类位于同一位置(在源代码中)。这是代码的摘录。

String fileName = "myfile.myext"    
resource = "./" + fileName
String fileContent = IOUtils.toString(clazz.getResourceAsStream(resource));

这在我的 Eclipse 开发框中工作得很好。然而,当我把它放在 Jenkins(这是我的 CI 服务器)上的那一刻,它就不起作用了。我检查了以下内容

  1. 文件“myfile.myext”存在于部署在 Jenkins 上的 jar 中。
  2. 如果我尝试以这种方式读取类的内容,Jenkins 代码不仅找不到“myfile.myext”,而且找不到“someOther.class”。这里的“someOther.class”是一个实际的类,它是一段代码。

一些可能相关的事情

  1. 在 Jenkins 中部署的东西是“myProduct.jar”和“myProduct_test.jar”。我的 Junits 仅在“myProduct_test.jar”中,而不在“myProduct.jar”中。相反,我所有的产品代码都只存在于“myProduct.jar”中,而“myProduct_test.jar”只是使用类路径中的那个 jar。

Net net,在 Jenkins 中,我无法从代码库中获取测试用例来读取文件。在 Eclipse 中我可以。

以前有人遇到过/解决过这个问题吗?

4

1 回答 1

1

这里的问题是,当您在 Eclipse 中运行程序时,代码是从包含代码的目录运行的,而 Jenkins 从其他目录运行它。因此,./不引用包含代码的目录。

您可以使用该getResourceAsStream方法从类路径中的位置加载资源,并且显然也可以处理 JAR 捆绑。这篇关于资源加载的文章应该可以解释一些事情。

但是,这种方法只应该真正用于用户永远不需要与之交互的文件。例如,如果要存储用户编辑的配置文件,则应将其放在其他位置,例如Application Data 目录

于 2013-06-07T17:56:20.767 回答