Gradle 找到了资源文件,但 Eclipse 没有找到 [重复]
Posted
技术标签:
【中文标题】Gradle 找到了资源文件,但 Eclipse 没有找到 [重复]【英文标题】:Resources file is found by Gradle but not by Eclipse [duplicate] 【发布时间】: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/
文件夹中并使用默认包。
【参考方案1】:
Eclipse 的挫折和祝福:您的所有资源(包括文件和图片)都必须位于项目的构建路径中。确保确实如此。如果仍然是这种情况,请考虑不要使用查找要读取的文件的方法:一种好的旧时尚
Scanner in=new Scanner(new File("src/main/resources/file.dat"));
通常会起作用。我希望这对您有所帮助,并祝您好运。
【讨论】:
那么没有必要将 gradle 项目导入 eclipse 并使用所有文件都转到必须可用于环境的资源文件夹的约定。 我遇到了这个,觉得要详细说明一下。确实,Eclipse 很固执,总是需要自己的构建文件。但是,gradle eclipse 命令将为您生成 eclipse .classpath 文件。您只需要将项目导入为 Gradle 项目,或者如果您已经这样做了则刷新它们。以上是关于Gradle 找到了资源文件,但 Eclipse 没有找到 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
停止 Eclipse/Gradle 生成 .project 和 .settings/
从 Eclipse 生成 Gradle 构建文件,出现错误:需要 Gradle 版本 1.10