使用静态内容

时间:2017-09-06 10:54:41

标签: java maven spring-boot

我正在使用spring boot并将我的静态内容(html,css等)存储为src/main/webapp。我知道不建议这样做,因为它不会存储在jar文件中(应该在/META-INF/resources//resources//static//public/中。但我的问题不是关于在jar中存储静态内容。

这是项目结构:

App
 ├──src
 |   └───main
 |        ├── java
 |        |     └── ...
 |        ├── resources
 |        |     └── (everything here will be in jar)
 |        └── webapp <- this won't be in jar
 |               └── ...
 └ target
     └───App.jar

当我尝试将App文件夹中的jar作为java -jar target/App.jar运行时,sp​​ring boot会找到静态内容并且工作正常。但是,将target文件夹作为java -jar App.jar运行将无法找到静态内容。

如何从目标文件夹运行App.jar并让spring boot找到静态内容?它与classpath有关吗?我试图用-cp选项指定类路径,但它不起作用。

2 个答案:

答案 0 :(得分:1)

从某种观点来看,这是一个构建问题。我不是指包装问题(我知道你不想把它放进罐子里)。但是您有另一种选择:您的构建系统(例如Maven)可以将静态文件复制到目标文件夹中。

This answer演示了如何使用maven-antrun-plugin来调用Ant的copy命令。这会将您的静态文件的副本放入target文件夹。

显然改变了执行阶段(测试阶段对于您的用例来说太具体/迟了)。 也许查找是否有更多的Maveny方法(因为委托给Ant不是超级惯用的)。

答案 1 :(得分:0)

它在运行时相对于可执行文件的工作目录进行搜索。由于它使用相对路径来查找文件(例如src/main/webapp/file.txt),因此您的工作目录必须为/path/to/App

You can change the working directory使用-Duser.dir

我建议尝试这个:

java -Duser.dir=../ -jar App.jar

或者它可能需要成为一条绝对的道路。告诉我它是否有效;我没有得到这个项目的尝试。