Java 根据活动的spring概要文件创建一个maven依赖项
因此,我正在构建一个SpringBootWeb应用程序,将其打包为war,并部署到tomcat应用服务器 tomcat的pom.xml中有以下依赖项:Java 根据活动的spring概要文件创建一个maven依赖项,java,spring,maven,tomcat,spring-boot,Java,Spring,Maven,Tomcat,Spring Boot,因此,我正在构建一个SpringBootWeb应用程序,将其打包为war,并部署到tomcat应用服务器 tomcat的pom.xml中有以下依赖项: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided&l
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
org.springframework.boot
弹簧启动机tomcat
假如
需要提供此依赖关系的范围,以便能够将其部署到tomcat实例。但是,当我想通过spring boot CLI或IntelliJ的默认spring boot运行配置运行war时,我需要删除提供的
,以便它运行嵌入式tomcat
我的问题是,是否有某种方法可以基于活动的spring概要文件或其他方法有条件地提供依赖关系?您无法通过spring概要文件控制依赖关系。但是,您可以通过maven配置文件控制弹簧配置文件,它可以解决您的问题 您可以在应用程序中声明几个maven概要文件,并为每个概要文件提供不同的依赖项集。 然后您可以配置maven配置文件以使用特定的spring配置文件。
请看一看此类配置的示例在您的特定情况下,您只需执行以下操作: 在使用嵌入式tomcat运行spring boot的依赖项中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
这是一个可以同时使用jar和war包装的解决方案: pom.xml
...
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>...</artifactId>
<groupId>...</groupId>
<version>0-SNAPSHOT</version>
<packaging>${packaging.type}</packaging>
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<start-class>...</start-class>
<packaging.type>jar</packaging.type>
...
</properties>
<dependencies>
<dependency>
<!-- Brings in Embedded Tomcat dependencies -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
...
</dependencies>
<profiles>
<profile>
<id>tomcat-war</id>
<properties>
<packaging.type>war</packaging.type>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
...
</profiles>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
...
将工件构建为战争:
mvn clean package -Ptomcat-war
主类,该类位于pom.xml中的
:
package ...
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
上一次尝试(大约3个月前)我可以将我的war部署到tomcat上,即使其中包含嵌入式tomcat。它工作得很好。这场战争只不过是比它应该的规模大了一点而已!不确定这种方法在最新版本的spring boot中是否仍然有效。请不要。。。不,真的不。。。让它保持原样,并使用maven spring引导任务从Intellij中运行应用程序。此外,当运行war时,应该没有问题,因为spring将提供的依赖项打包在一个单独的目录中,spring Boot仍然会扫描这些依赖项。@M.Deinum您应该将其作为一个答案发布—这对我来说很有用
mvn clean package
mvn clean package -Ptomcat-war
package ...
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}