无法在源代码中读取文件

时间:2013-06-07 17:17:42

标签: java eclipse file jenkins

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

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

这在Eclipse的开发框中可以正常工作。但是,当我把它放在Jenkins(这是我的CI服务器)上的那一刻它不起作用。我检查了以下内容

  1. 文件“myfile.myext”存在于部署的jar中 詹金斯。
  2. Jenkins代码不仅找不到“myfile.myext”而且     如果我尝试阅读内容,它找不到“someOther.class”     这样的班级。这里“someOther.class”是一个实际的类     是一段代码。
  3. 可能相关的一些事情

    1. 在Jenkins中部署的东西是“myProduct.jar”和“myProduct_test.jar”。我的Junits只在“myProduct_test.jar”中,而不在“myProduct.jar”中。相反,我的所有产品代码仅存在于“myProduct.jar”中,而“myProduct_test.jar”仅使用来自classpath的jar。
    2. 净网,詹金斯我不能让测试用例从代码库中读取文件。在Eclipse中,我可以。

      之前有人面对/解决了这个问题吗?

1 个答案:

答案 0 :(得分:1)

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

您可以使用getResourceAsStream方法从类路径中的位置加载资源,并且显然也会处理JAR捆绑。这个article on resource loading应该有所解释。

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