我有一个server
模块,它取决于web
模块:
<dependency>
<groupId>org.ema.server</groupId>
<artifactId>web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency>
正在重新打包spring-boot-maven-plugin
以获得独立版本:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<mainClass>org.ema.server.Server</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
到目前为止一切正常。 web
模块将作为BOOT-INF/lib/web-0.0.1-SNAPSHOT.war
包含在最终jar中。
我知道Spring allows one to load additional war files for Tomcat at runtime但似乎这样的war
文件必须位于文件系统的某个位置,或者我做错了。
问题是如何保持独立的感觉,但仍然可以将war
文件添加到我的最终独立jar
并将它们部署到内置的Tomcat?
以下代码显示了如何做到这一点,但我不确定它是否可以按照我的要求完成:
@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
LOGGER.info("Adding web app");
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomcat tomcat) {
// Ignore that since it's not working anyway.
String resourcePath = getClass().getResource("/../lib/web-0.0.1-SNAPSHOT.war").getPath().toString();
try {
tomcat.addWebapp("/web", resourcePath);
} catch (ServletException ex) {
throw new IllegalStateException("Failed to add webapp", ex);
}
return super.getTomcatEmbeddedServletContainer(tomcat);
}
};
}