无法在外部tomcat中部署springboot应用程序

时间:2018-12-21 13:29:07

标签: java maven spring-boot tomcat

尝试在外部tomcat中部署springboot应用程序时,我无法部署。在pom.xml中,如果我排除了tomcat依赖项,那么我就不会遇到编译时错误。由于我在项目中使用过tomcat jar类。请让我知道如何部署该项目。

2 个答案:

答案 0 :(得分:1)

我遇到了与您相同的问题,并且提出了解决方案。可能不是最好的,但是它可以工作...

首先,您需要两个应用程序:

Application.java

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

WarApplication

@SpringBootApplication
public class WarApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(WarApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(WarApplication.class, args);
    }
}

此后,您需要使用以下命令来修改您的pom.xml

<profiles>
    <profile>
        <id>tomcat</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <project.packaging>war</project.packaging>
            <project.start-class>com.whatever.WarApplication</project.start-class>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </profile>

    <profile>
        <id>springboot</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <project.packaging>jar</project.packaging>
            <project.start-class>com.whatever.Application</project.start-class>
        </properties>
    </profile>
</profiles>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <inherited>true</inherited>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <!-- Package as an executable jar/war -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <configuration>
                    <profiles>
                        <profile>tomcat</profile>
                        <profile>springboot</profile>
                    </profiles>
                    <mainClass>${project.start-class}</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

基本上,您只是根据要部署的位置进行配置文件。但是,如果只需要在tomcat上进行部署,则可以删除配置文件。此pom中的重要是什么,它是tomcat配置文件中的<scope>provided</scope>Here是Spring文档中传统部署的链接。

答案 1 :(得分:1)

作为@Gableg的回答,

在pom.xml中:

<packaging>war</packaging>设置为“不打架”。

基本上@Gableg的两个条件和我上面指定的条件就足够了。 树状条件足以使应用程序可在外部tomcat中部署。

我在下面引用了该视频。它确实有用。

https://www.youtube.com/watch?v=05EKZ9Xmfws