gpt4 book ai didi

java - 默认情况下,IntelliJ 将哪些文件夹添加到其不同运行配置的类路径中?

转载 作者:行者123 更新时间:2023-12-01 12:34:49 26 4
gpt4 key购买 nike

我有以下文件夹结构

src/
src/main/
src/test/
src/test/package/
src/test/package/FooTest.java
src/test/resources/
src/test/resources/foo/
src/test/resources/foo/a.txt

这是 FooTest:

import org.junit.Test;

public class FooTest {

@Test
public void foo() {
System.out.println(null != getClass().getResourceAsStream("foo/a.txt"));
}

public static void main (String... args) {
System.out.println(null != FooTest.class.getClass().getResourceAsStream("foo/a.txt"));
}
}

当我将其作为 JUnit 测试运行时,我得到 true 打印输出,当我将其作为应用程序运行时,它是 false

模块设置如下所示:

Module setup

因此,test/resources 未定义为测试资源文件夹。这就是为什么我不明白为什么我一次得到 true 而下一次得到 false

有人可以解释一下 IntelliJ 一般如何为不同的运行配置(应用程序、JUnit 测试、Cucumber 测试)设置类路径,特别是为什么 a.t​​xt 似乎位于 JUnit 测试的类路径上,即使它不是配置为?

最佳答案

如果您从 println 中“提取”不同的方法调用,您将看到两种方法的差异:

public class FooTest {

@Test
public void foo() {
Class cls = getClass(); // cls is FooTest
InputStream inputStream = cls.getResourceAsStream("foo/a.txt");
System.out.println(null != inputStream);
}

public static void main (String... args) {
Class cls1 = FooTest.class; // cls1 is FooTest
Class cls2 = cls1.getClass(); // cls2 is java.lang.Class
InputStream inputStream = cls2.getResourceAsStream("foo/a.txt");
System.out.println(null != inputStream);
}
}

使用FooTest.class获取相关类就足够了。

getResourceAsStream 使用相对于 FooTest 的相对搜索路径 foo/a.txt

关于java - 默认情况下,IntelliJ 将哪些文件夹添加到其不同运行配置的类路径中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25683965/

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