我有一个maven项目,它构建了一个包含2个构造函数的xmlreader类。一个采用外部文件名和一个默认加载资源。
默认构造函数适用于test,但在使用默认参数执行程序时找不到该文件。更改我访问资源的方式会导致测试失败并且maven停止构建。我已经解压缩了jar,文件位于那里。
这是构造函数:
public XmlReader() {
this.filename = getClass().getResource("/Default.xml").getPath();
this.git = new GitClass();
this.cucumber = new CucumberClass();
this.execute = new ExecuteClass();
}
ERRORMESSAGE:
5030 [main] ERROR - File file:/Users/andreasjoelsson/XmlReader/target/XmlReader-1.0-SNAPSHOT.jar!/Default.xml not found.
5030 [main] DEBUG - Context: init of reader: false
JUnit测试:
@Test
public void test2() {
XmlReader testObject = new XmlReader();
// Subject to change as it's the default config to run.
assertEquals(true, testObject.init());
assertEquals(25, testObject.getExecute().getMaxUsers());
assertEquals(true, testObject.getExecute().isRepeatFeature());
assertEquals(1, testObject.getExecute().getSecondsBetweenIncrease());
assertEquals(2, testObject.getExecute().getUsersIncreasedEachInterval());
assertEquals(20, testObject.getExecute().getWaitAfterRampSeconds());
System.out.println(testObject.toString());
}
所以我执行测试的包工作正常,但是当我在maven之外运行它时。
答案 0 :(得分:2)
当您将这些文件作为硬盘文件系统的一部分使用时,您无法使用属于JAR的文件。
在开发期间,您拥有工作区中的所有源文件。因此文件系统中确实存在物理文件。 new File(fileName)
或getResource(resourceName).getPath()
等语句可以很好地运作。
在处理JAR内的资源时,首先必须通过Class.getResource(resourceName)
或ClassLoader.getResource(resourceName)
检索资源。您将获得一个没有文件协议的URL,这也是您无法在其上调用getPath()
的原因。您必须使用URL.openStream()
检索输入流。这样你就可以阅读你的资源了(不要忘记之后关闭你的资源)。
答案 1 :(得分:0)
您需要的是在项目中创建一个名为src但具有不同名称的源文件夹。 要在Windows上引用此文件夹中的文件,您只需要指示项目的名称和资源名称:
getResource("ProjectName/Default.xml")
我希望这有帮助!