【发布时间】:2015-06-01 10:13:18
【问题描述】:
在我的 gradle java 项目中,如果我运行./gradlew run -PappArgs="['file.dat']",它会被编译并且我的应用程序成功使用位于/src/main/resources/ 中的文件。我已将 Eclipse 与 gradle 集成,并将我的项目导入 Eclipse。当我在 Eclipse 中使用项目的 Run Configurations 参数列表中指定的 filname 运行应用程序时,它无法使用以下代码找到 file.dat:
import java.io.InputStream;
import java.util.Scanner;
public class MyClass {
public static void main(String[] args) {
final String fileName = args[0];
Scanner scanner = null;
try {
InputStream f = MyClass.class.getResourceAsStream(fileName);
scanner = new Scanner(f, "UTF-8"); // fails here saying f is null
} finally {
if (scanner != null) scanner.close();
}
}
}
项目树是经典的:myproj/src/main/java/MyClass.java、myproj/src/main/resources/file.dat 和 myproj/src/test/java/MyTest.java。
【问题讨论】:
-
你是否在eclipse启动配置中将参数传递给gradle?或者直接在 java 启动配置中,如果你没有使用 gradle 运行?
-
我在 Eclipse 中我的项目的运行配置中传递参数,我尝试了几种方法
/src/main/resources/file.dat、file.dat、./src/main/resources/file.dat。没有任何效果。在 gradle 中,我在命令行中传递了我的参数file.dat。 -
您的
Class在包裹中吗? (类路径的根是src/main/resources;所以如果你想使用MyClass.class.getResource加载并且MyClass 在包com.example中,你的文件必须进入src/main/resources/com/example。或者更好地使用InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileName) -
我在
static main,所以不能使用this。没有包裹。我所有的课程都在/src/main/java/文件夹中并使用默认包。
标签: java eclipse gradle file-not-found