我正在使用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
运行时,spring boot会找到静态内容并且工作正常。但是,将target
文件夹作为java -jar App.jar
运行将无法找到静态内容。
如何从目标文件夹运行App.jar
并让spring boot找到静态内容?它与classpath有关吗?我试图用-cp
选项指定类路径,但它不起作用。
答案 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
或者它可能需要成为一条绝对的道路。告诉我它是否有效;我没有得到这个项目的尝试。