Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用静态内容运行spring引导jar_Java_Maven_Spring Boot - Fatal编程技术网

Java 使用静态内容运行spring引导jar

Java 使用静态内容运行spring引导jar,java,maven,spring-boot,Java,Maven,Spring Boot,我正在使用SpringBoot并将静态内容(html、css等)存储为src/main/webapp。我知道不建议这样做,因为它不会存储在jar文件中(应该是/META-INF/resources/,/resources/,/static/,/public/)。但我的问题不是在jar中存储静态内容 这是项目结构: App ├──src | └───main | ├── java | | └── ... | ├── resources

我正在使用SpringBoot并将静态内容(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
├──src
|   └───主要的
|        ├── JAVA
|        |     └── ...
|        ├── 资源
|        |     └── (这里所有的东西都在罐子里)

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

使用
-Duser.dir

我建议你试试这个:

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

或者它需要一条绝对路径。告诉我它是否有效;我还没有这个项目来试用。

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

演示如何使用
maven antrun plugin
调用Ant的
copy
命令。这将把静态文件的副本放入
target
文件夹

显然要改变执行阶段(测试阶段对于您的用例来说太具体/太晚)。
也许还可以查找是否有更专业的方法(因为委托给Ant不是超级惯用的方式)。

它不起作用:“错误:找不到或加载main class.dir=../”。我还尝试了
-Duser.dir=D:/App。
啊,这是Windows;也许你需要反斜杠?。\或D:\App。根据您正在使用的shell,您可能需要避开这些反斜杠:..\\or D:\\app如果对Spring Boot搜索的位置有任何不明确的地方,您可以使用来嗅探Windows上的所有文件访问。您可以查找java尝试查找失败的文件,这将告诉您它解析相对路径的绝对路径。这将指示
-Duser.dir
是否有任何效果(只需稍加调整),或者它是否是一条死胡同。我认为
-Duser.dir
有效果,因为现在我有一个错误:找不到或加载主类org.springframework.boot.loader.JarLauncher。@Birchlabs我想你需要合并这两个答案:)这个插件正在复制单个文件。我发现了
maven资源插件
,它可以将多个资源目录复制到独立的目录,但我认为这不是一个好的解决方案。我正在考虑像你建议的那样更改工作目录,但我认为这是一个死胡同。出于好奇:你为什么不认为构建是解决这个问题的好方法<代码>目标
是项目的输出。您想要发送或运行的所有内容都应该输出到该文件夹中。你不喜欢这些文件的副本吗?你不喜欢让他们跟上时代吗?无论源代码何时更改,都应该调用build,所以很容易保持最新。否则:ant copy任务可以创建符号链接(尽管我不推荐)。好吧,我同意你的看法。没那么糟糕:)我成功地将
webapp
文件夹手动复制到
target/src/main
。所以我想你选择maven插件也可以。我想知道这是唯一的办法吗?我找到了
spring.resources.static locations
属性,但不确定应该有什么。嗯,我认为
spring.resources.static locations
不能用于指定绝对路径。它的默认值是
/**
,但这似乎是指类路径的根,或者可能是指
usr.dir
的根。我认为你无法从那里向上导航。我认为将静态文件复制到目标文件夹是最简单的解决方案。非常感谢。