使用idea对springboot项目打war包及遇到的问题总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013034793/article/details/83511783

使用maven创建的springboot项目的默认打包方式是jar包,而且springboot是自带Tomcat的。部署项目时需要打包成对应的war包,并将项目部署到服务器的Tomcat下,所以项目打包时就需要修改一些配置。

主要修改pom.xml文件中的一些配置

1、修改打包方式,将jar修改为war

<packaging>war</packaging>

2、在spring-boot-starter-web依赖中移除tomcat模块,改用服务器配置的Tomcat

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

针对这一点,搜索的文章中大多是这样介绍的,在我实际的配置中,并没有移除这个模块,而且打包成功,暂未发现有什么影响。

3、在pom.xml文件添加servlet依赖。

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>${servlet.version}</version>
	<scope>provided</scope>
</dependency>

4、在pom.xml文件中将build节点中的finalName修改为项目名称。

<build>
    <finalName>searchengine</finalName>
</build>

5、修改启动类

使其继承SpringBootServletInitializer ,覆盖configure(),把启动类Application注册进去。外部web应用服务器构建Web Application Context的时候,会把启动类添加进去。

public class SearchengineApplication extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(SearchengineApplication.class);
	}
	public static void main(String[] args) {
		SpringApplication.run(SearchengineApplication.class, args);
	}
}

进行到这一步,配置基本上就修改完成了, 在idea中,找到root项目下的clean和package, 分别按照顺序执行,成功后即可打包成功想要的war包。

 

遇到的问题

小编的项目至此并没有成功打出war包,在package执行过程中出现如下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war 
 
(default-war) on project JettyCode: Error assembling WAR: webxml attribute is 
 
required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]

这是因为项目在打包时未找到对应的web.xml文件

解决方法

如果项目中存在web.xml文件,则需要在pom.xml文件的<build>节点中,添加maven-war-plugin的插件配置,并配置好对应的目录

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
            <webResources>
                <resource>
                    <directory>WebContent</directory>
                </resource>
            </webResources>
        </configuration>
    </plugin>
</plugins>

如果项目中没有web.xml文件,则只需要按照如下方式,在pom.xml文件的<build>节点中添加配置即可

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

小编的项目属于第二种,pom.xml文件配置好之后,成功打成war包,并在服务器的 Tomcat上部署成功。

猜你喜欢

转载自blog.csdn.net/u013034793/article/details/83511783