【问题标题】:Difference from running application in IntellJ and running JAR file与在 IntelliJ 中运行应用程序和运行 JAR 文件的区别
【发布时间】:2020-09-30 22:18:38
【问题描述】:

我遇到了一种情况,我会在 intellJ 中运行应用程序并且一切运行顺利,然后我会使用 maven install 命令创建一个 jar 并尝试从命令行手动运行它,结果如下:

命令行

java.lang.RuntimeException: java.io.FileNotFoundException: api\src\main\resources\FAQ.pdf (The system cannot find the path specified)
        at test.test.paisy.test.test.domain.email.FaqAttachment.pdfToBytes(FaqAttachment.java:27) ~[classes!/:0.0.1-SNAPSHOT]

问题:

  1. 运行Jar和运行App有什么区别 IntelliJ
  2. 为什么找到文件路径时会报错 通过在 ItelliJ 中运行成功

文件路径

try (FileInputStream inputStream = new FileInputStream(new File("api/src/main/resources/FAQ.pdf"))) {
                this.bytes = ByteStreams.toByteArray(inputStream);

谢谢

【问题讨论】:

    标签: java file jar path


    【解决方案1】:

    首先,如果要使用相对路径,需要从src文件夹开始,像这样

    new File("src/main/resources/FAQ.pdf")
    

    但最好的方法是使用

    InputStream inputStream = ClassName.class.getClassLoader().getResourceAsStream("FAQ.pdf"); 
    

    这样路径就不会相对于该静态路径。

    不要忘记将ClassName 替换为您当前班级的名称

    确保在运行前清理构建并重新构建。

    更多详情请查看answer

    【讨论】:

    • 这个新的 FileInputStream(new File(ClassName.class.getClassLoader().getResource("FAQ.pdf").getFile())); - 如果您构建 jar,这将不起作用
    • @BorisChistov 你能解释一下原因吗?
    • 因为文件只能使用文件系统资源。你有来自 jar 内类路径的资源。
    • @BorisChistov ,是的,在您发表评论后,我正在阅读相关内容,感谢您提供的信息,我已将其从答案中删除
    【解决方案2】:

    嗯,首先在这段代码new File("api/src/main/resources/FAQ.pdf") 你有相对路径。所以它依赖于属性System.getProperty("user.dir"),并基于这个属性形成绝对路径。

    当你运行 jar 文件时,这个属性被设置为你的当前目录 例如你有目录结构

    root
      dir1
      dir2
        java-file.jar
    

    cd /root/dir1

    java -jar ../dir2/jar-file.jar - 然后你的 user.dir = /root/dir1 和你的文件将在 /root/dir1/api/src/main/resources/FAQ.pdf 中搜索

    在 Idea 中,您可以在运行配置中指定工作目录。

    从资源目录获取数据的更好方法是做这样的事情 YourClassName.class.getClassLoader().getResourceAsStream(("FAQ.pdf")

    【讨论】:

      猜你喜欢
      • 2017-05-14
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      相关资源
      最近更新 更多