gpt4 book ai didi

java - jar 资源在测试中加载,但不在应用程序中加载

转载 作者:行者123 更新时间:2023-12-02 06:15:18 25 4
gpt4 key购买 nike

我有一个 Maven 项目,它构建一个具有 2 个构造函数的 xmlreader 类。一种采用外部文件名,另一种默认加载资源。

默认构造函数适用于测试,但当我使用默认参数执行程序时找不到该文件。更改访问资源的方式会使测试失败并且 Maven 停止构建。我已经提取了 jar,文件位于那里。

这是构造函数:

public XmlReader() {
this.filename = getClass().getResource("/Default.xml").getPath();
this.git = new GitClass();
this.cucumber = new CucumberClass();
this.execute = new ExecuteClass();
}

错误消息:

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 之外运行它时就不行了。

最佳答案

您无法使用 JAR 中的文件,因为它们是硬盘文件系统的一部分。

在开发过程中,您将所有源文件都放在工作区中。所以文件系统中确实存在一个物理文件。像 new File(fileName)getResource(resourceName).getPath() 这样的语句就可以很好地工作。

处理 JAR 内的资源时,首先必须通过 Class.getResource(resourceName) 或通过 ClassLoader.getResource(resourceName) 检索资源。您将得到一个没有文件协议(protocol)的 URL,这也是您无法对其调用 getPath() 的原因。您必须使用 URL.openStream() 检索输入流。这样您就可以读取您的资源(并且不要忘记之后关闭流)。

关于java - jar 资源在测试中加载,但不在应用程序中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21555921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com