我已经用Google搜索了这个问题,但我没有找到任何针对此案例的内容。我发现很多"如何将Spring Boot WAR部署到Tomcat"但没有关于使用Spring Boot包装现有的Tomcat WAR。
我试图用Spring Boot" wrapper"来包装现有的WAR。这样就不必重新配置现有的代码库。 This solution不起作用,因为它取决于在绝对位置可用的WAR,而我们正在尝试打包"应用程序" Spring Boot WAR中的WAR。然后我们可以像这样添加WAR的上下文:
Context context = tomcat.addWebapp("myapp", Thread.currentThread().getContextClassLoader().getResource("myapp.war").getPath());
这几乎正常。我对某个特定问题有疑问。将现有WAR文件放入Spring Boot项目时,它将被放入/WEB-INF/lib-provided
而不是/WEB-INF/classes
。我无法找到一种方法让嵌入式Tomcat从此位置添加WAR文件。 ClassLoader不会加载它,因为它不在WEB-INF/classes
下。
是否有一种从/WEB-INF/lib-provided
获取此WAR的灵巧方式(或任何方式)?
答案 0 :(得分:1)
对于其他需要执行此操作的人,答案是使用maven-dependency-plugin
并设置spring-boot-maven-plugin
以从资源中排除WAR文件(否则您将获得两个WAR副本)你的Spring Boot WAR):
<!-- include your WAR as a resource instead of a dependency -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>generate-resources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<excludeTransitive>true</excludeTransitive>
<includeArtifactIds>my-war-name-here</includeArtifactIds>
<stripVersion>true</stripVersion>
<outputDirectory>${project.basedir}/src/main/resources</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.3.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<!-- Don't copy the war as a dependency, it's included as a resource -->
<excludeArtifactIds>my-war-name-here</excludeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>