【问题标题】:Maven - Load resources from JAR file?Maven - 从 JAR 文件加载资源?
【发布时间】:2019-11-05 08:50:04
【问题描述】:

在使用 Maven 将资源捆绑到 JAR 文件中时,我感觉我遗漏了一些关键的东西。我的目录结构是标准的 Maven 目录结构。

使用 IDE 时,我将资源文件引用为 \main\resources\public\images\path,它工作正常,但当 Maven css js 和图像不工作并且网站看起来很糟糕时。如果我查看 jar,我会找到所有的 css、js 和图像。当我尝试在浏览器中打开 css 链接时,出现 404 错误。这是我的 pom.xml https://shrib.com/#XGISjWGN7QRfa2EIZD4r。在eclipse中它工作正常。 我使用Spark.staticFiles.location("public");来加载资源。

【问题讨论】:

  • 请给我们看一些代码,以便我们更好地帮助您。这令人困惑并且没有多大意义,因此请尝试通过向我们提供更多信息来帮助我们帮助您。将您的 pom 文件粘贴到您的问题中,在三个反引号 (```) 之间。向我们展示您正在使用的一些代码以及您的 html。
  • Jar 文件用于 java 并放在您的类路径中并从那里引用 - 您永远不应在代码中引用 main/resources。 Maven会将资源目录的内容打包到jar的根目录下。 HTML、CSS 和 Javascript 通常不打包在一个 jar 中——它们通常分开保存并部署到 http 服务器上的文件系统中。虽然可以将它们打包到 jar 中,但这并不是进行 Web 内容开发的好方法。
  • 感谢您的回复。此图显示在 winrar ibb.co/8PvfYf1 上打开的 jar 文件

标签: java maven jar fatjar


【解决方案1】:

我无法评论 Spark,但是当您创建工件(jar,胖与否)时,它只是不包含 main/resources 文件夹(使用 winrar 之类的工具打开 jar 并检查自己)。

另一个困难是,如果您使用与 File 抽象配合使用的东西 - 它可能在工件内部是错误的。 File 描述了文件系统上的一个位置,而您正试图从工件中读取一些内容。

通常你可以在读取资源的代码里面使用:

getClass().getResourceAsStream("/public/impages/path/sample.js") 

【讨论】:

  • 感谢您的回复。在我的代码中,我使用Spark.staticFiles.location("public");,它运行良好。并且在我用winrar打开它的jar文件中,公共文件夹存在所有css js和图像但不起作用。如果我打开其中一个资源的路径,我得到 404 not found 。
猜你喜欢
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 2015-11-16
  • 2015-05-03
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 2018-06-03
相关资源
最近更新 更多