【问题标题】:Resources file is found by Gradle but not by Eclipse [duplicate]Gradle 找到了资源文件,但 Eclipse 没有找到 [重复]
【发布时间】: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.javamyproj/src/main/resources/file.datmyproj/src/test/java/MyTest.java

【问题讨论】:

  • 你是否在eclipse启动配置中将参数传递给gradle?或者直接在 java 启动配置中,如果你没有使用 gradle 运行?
  • 我在 Eclipse 中我的项目的运行配置中传递参数,我尝试了几种方法/src/main/resources/file.datfile.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


【解决方案1】:

Eclipse 的挫折和祝福:您的所有资源(包括文件和图片)都必须位于项目的构建路径中。确保确实如此。如果仍然是这种情况,请考虑不要使用查找要读取的文件的方法:一种好的旧时尚

Scanner in=new Scanner(new File("src/main/resources/file.dat"));
通常会起作用。
我希望这对您有所帮助,并祝您好运。

【讨论】:

  • 那么没有必要将 gradle 项目导入 eclipse 并使用所有文件都转到必须可用于环境的资源文件夹的约定。
  • 我遇到了这个,觉得要详细说明一下。确实,Eclipse 很固执,总是需要自己的构建文件。但是,gradle eclipse 命令将为您生成 eclipse .classpath 文件。您只需要将项目导入为 Gradle 项目,或者如果您已经这样做了则刷新它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2015-06-08
相关资源
最近更新 更多