【问题标题】:Maven and IntelliJ resourcesMaven 和 IntelliJ 资源
【发布时间】:2018-08-21 15:07:37
【问题描述】:

这似乎是一个简单的问题,但我似乎找不到任何解决方案,或者我不理解我阅读的一些帖子。

我有一个包含一些资源的 Maven 项目,位于“/src/main/resources/”文件夹下。让它成为一个 text.txt 文件。有人告诉我,我放入该文件夹或 pom.xml 文件中声明的任何文件夹中的任何文件都将放在“/”中(项目根文件夹,当您解压缩独立 jar 文件时可以看到)已将其编译到工作 jar 中。

因此,按照这种逻辑,当 Maven 将文件打包到 jar 中时,我应该能够通过“text.txt”访问这些文件。但是这样做意味着 IntelliJ 看不到“text.txt”处的文本文件,因为它位于“/src/main/resources/text.txt”处。我是否正确理解了打包过程以及应该将哪个路径放入我的代码中?

先谢谢你了。


编辑:

正如一些人所指出的,我需要更具体地说明这一点。

假设我在 src/main/java//Main.java 有我的 Main.java,这是其中的代码:

import java.io.*;
import java.nio.file.Files;

public class Main {
    public static void main(String[] args) throws IOException {
        //stub
        System.out.println("Entered the program");
        File file=new File("src/main/resources/text.txt");
        System.out.println("String in text file: " + new String(Files.readAllBytes(file.toPath())));
    }
}

我在 src/main/resources/text.txt 也有 text.txt 文件

当我按下 Shift+F10(类似于按下运行按钮)时,它编译并运行得很好

这是我的 POM 文件的一部分:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.n157239.maven_rss.Main</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

然后我运行 mvn clean compile assembly:single 以便 Maven 可以生成一个独立的 jar 文件,该文件在 target/ 中具有依赖关系。

当我从命令行运行 jar 文件时,我收到一条错误消息,提示没有 text.txt 文件。

即使我把java代码改成File file=new File("text.txt");,从命令行运行jar还是报错。

【问题讨论】:

  • 你可以把你的文本文件放在 yourproject/src/main/resources 和你的 java 代码在 yourproject/src/main/java 看看这里maven.apache.org/guides/introduction/…
  • 你需要回去重写这个问题——你想问的具体是什么?将文件打包到 jar 中后,您能看到文件吗?您在查看一般文件时遇到问题吗?
  • 是的,我已经这样做了,但问题是我应该选择文本文件的哪个路径,以便它可以在 IntelliJ IDEA 和使用 maven clean compile assembly:single 打包的 jar 中工作
  • 在生产环境中运行时,您不应该从 src 目录中读取任何内容 - 假设运行您的程序的 PC 上甚至不存在 src 目录。使用 Lai 的答案,您应该能够在 IntelliJ 和命令行中运行。请注意,您不能将文件作为文件打开,而是使用类加载器直接将其作为 InputStream 打开。

标签: java maven intellij-idea


【解决方案1】:

如果您将文件放在/src/main/resources/ 中,您只需指定文件名即可读取 this.getClass().getClassLoader().getResourceAsStream("YourFile");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 2013-09-14
    • 2012-08-10
    • 1970-01-01
    • 2023-03-27
    • 2015-03-19
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多