我有一个简单的多模块Maven项目。第一个模块是有角度的前端,第二个模块是spring-boot应用程序。
我配置了前端Maven模块来构建角度应用程序并将汇编的文件收集到frontend.jar
中。结果,我具有以下存档结构:
jar -tf frontend.jar | sort
---------------------------
META-INF/
META-INF/MANIFEST.MF
META-INF/maven/
META-INF/maven/sample-project/
META-INF/maven/sample-project/frontend/
META-INF/maven/sample-project/frontend/pom.properties
META-INF/maven/sample-project/frontend/pom.xml
static/
static/3rdpartylicenses.txt
static/assets/
static/assets/img/
static/assets/img/loading.gif
static/favicon.png
static/index.html
static/main.8e44da4898d2a7a95ed3.js
static/polyfills.d72edd4c76dc8f27444a.js
static/runtime.a66f828dca56eeb90e02.js
static/styles.0afb74a990d73ad0b544.css
在那之后,我在前端模块上添加了spring-boot .pom
文件依赖性,并构建了整个项目。
<dependency>
<groupId>sample-project</groupId>
<artifactId>frontend</artifactId>
<version>${version}</version>
</dependency>
最后,我启动Spring Boot Web应用程序后发现,当我转到localhost:port/
url时,我得到了我的角度应用程序。
接下来的问题是:spring-boot如何理解它应该提供frontend
依赖关系中的静态内容?请注意,spring-boot模块资源中没有静态文件夹。
答案 0 :(得分:1)
在Java中,“罐子”只是组织用于部署的应用程序的方式。您不能根据类或资源的实际jar或磁盘上的位置对其进行寻址(除非您正在编写自己的ClassLoader
)。这样的物理细节在运行时不可用。从运行时的角度看,一切都变得平坦,有点像docker层。
因此,实际上没有“哪个类来自哪个依赖项”的概念。这有时会导致细微的错误,但这也是诸如jarjar,OSGi和新的Java 9模块之类的技术存在的原因。
通常,Spring Boot提供/ static下classpath中可用的所有内容。没有资源来自“哪个jar”或“哪个目录”的概念。