根据活动弹簧配置文件提供maven依赖关系

时间:2017-02-17 13:31:25

标签: java spring maven tomcat spring-boot

所以我正在构建一个spring boot web应用程序,打包为war,并部署到tomcat应用程序服务器。

我在tomcat的pom.xml中有以下依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

需要提供此依赖关系的范围,以便能够将其部署到tomcat实例。但是,当我想通过spring boot CLI或IntelliJ的默认spring boot运行配置来运行war时,我需要删除<scope>provided</scope>以便它运行嵌入式tomcat。

我的问题是,是否有某种方法可以根据活动弹簧配置文件或其他方法有条件地提供依赖关系?

3 个答案:

答案 0 :(得分:4)

您无法通过弹簧配置文件控制依赖关系。但是,您可以通过maven配置文件控制弹簧轮廓,它可以解决您的问题。

您可以在应用程序中声明多个maven配置文件,并为每个配置文件提供不同的依赖关系。 然后,您可以配置maven配置文件以使用特定的弹簧配置文件 看看on maven profiles以及此类配置in this thread

的示例

答案 1 :(得分:3)

在您的具体情况下,您可以这样做: 在依赖项中运行带有嵌入式tomcat的spring-boot:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>  

在tomcat下部署的配置文件

<profile>
    <id>tomcat</id>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</profile>

之后,为特定的个人资料构建

mvn clean install -Ptomcat

答案 2 :(得分:1)

这是一个适用于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>
    ...

将工件构建为jar:

mvn clean package

将工件构建为战争:

mvn clean package -Ptomcat-war

主要课程,位于 pom.xml 中的<start-class>

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);
    }
}