springboot打包方式

本文介绍了Spring Boot项目的两种打包方式——war和jar。对于war包,讲述了如何将打包方式设置为war,指定入口类,并排除内置Tomcat。而对于jar包,也进行了简要说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

war包

1.将打包方式换成war,springboot默认是jar

 <packaging>war</packaging>

2.指定入口类,注意mainclass为springboot的启动类

   <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                    <mainClass>com.duhaoyu.FilesApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

3.排除内嵌的Tomcat

<!-- 排除内嵌的Tomcat依赖-->
 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
</dependency>
<!--如果是使用的jsp模板,需要加入以下依赖。使用thymeleaf不许要加入-->
 <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <scope>provided</scope>
</dependency>

4.配置入口类

package com.duhaoyu;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@MapperScan("com.duhaoyu.dao")
@SpringBootApplication
public class FilesApplication extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(FilesApplication.class);
    }
}

做完上述操作以后,点击maven的clean,然后进行打包即可。

注:如果使用的war打包方式,那么在配置文件中配置的项目名以及端口号就不起作用了,因为这两个配置指定的是内嵌的Tomcat容器。

jar包

由于springboot默认就是jar包部署,因此在打jar包的时候不需要做额外的配置,直接进行打包即可。但是由于springboot内嵌了Tomcat,打jar包以后,如果有文件上传下载的相关业务,那么需要自己定义路径进行保存,不能使用内部的Tomcat路径。

### 如何将 Spring Boot 项目打包为 WAR 文件 为了将 Spring Boot 应用程序打包为 WAR 文件并部署到外部 Tomcat 容器中,需要遵循特定的配置步骤。以下是详细的说明: #### 配置 Application 类 Spring Boot 的应用程序类必须继承 `SpringBootServletInitializer` 并重写其方法以支持 WAR 包形式的启动[^1]。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class MyApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MyApplication.class); } public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } ``` 上述代码通过扩展 `SpringBootServletInitializer` 和覆盖 `configure()` 方法实现了对 Servlet 容器的支持。 --- #### 修改 Maven 构建文件 (pom.xml) 在项目的 `pom.xml` 中设置 `<packaging>` 属性为 `war`,并将嵌入式的 Tomcat 设置为 `provided` 范围,因为外部容器已经提供了这些功能[^3]。 ```xml <project> ... <packaging>war</packaging> <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- Exclude embedded tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- Add support for JSP pages if needed --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project> ``` 此部分定义了构建工具如何处理依赖项以及最终生成的目标文件类型。 --- #### 使用 Maven 进行打包 完成以上更改后,可以通过命令行使用 Maven 来重新打包项目为 WAR 文件: ```bash mvn clean package ``` 这将在目标目录下生成一个 `.war` 文件,可以直接将其复制到外部 Tomcat 的 `webapps/` 目录中进行部署。 --- #### 外部化配置文件 如果希望实现配置文件与应用分离,则可以根据 Spring Boot 提供的多种方式调整环境变量或指定其他位置加载配置文件[^2]。例如,在生产环境中可通过 `-Dspring.config.location` 参数指向自定义路径下的配置文件。 ```bash java -Dspring.config.location=/path/to/config/application.properties -jar myapp.war ``` 这种方式允许灵活管理不同环境中的参数而无需修改原始代码库。 --- ### 总结 通过继承 `SpringBootServletInitializer`、调整 POM 文件结构以及利用 Maven 插件的功能,能够轻松地将 Spring Boot 工程转换为适合传统 Java EE 容器使用的 WAR 格式档案[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值