• springboot将jar改成war


    一、maven项目

    1、修改pom文件

    <packaging>warpackaging>
    
    • 1

    2、添加Servlet API依赖,Spring Boot的Starter依赖通常会包含这个依赖,所以你可能已经有了,没有就需要添加

    <dependency>
        <groupId>javax.servletgroupId>
        <artifactId>javax.servlet-apiartifactId>
        <version>3.1.0version> 
        <scope>providedscope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3、修改Application类

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    
    @SpringBootApplication
    public class MyApplication extends SpringBootServletInitializer {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(MyApplication.class);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4、构建WAR文件:

    mvn clean package
    
    • 1

    这将生成一个WAR文件,通常位于target目录下。

    二、Gradle项目

    1、修改build.gradle文件,添加war插件,以告诉Gradle将项目打包成WAR文件。

    apply plugin: 'war'
    
    • 1

    2、添加Servlet API依赖,Spring Boot的Starter依赖通常会包含这个依赖,所以你可能已经有了,没有就需要添加

    dependencies {
        implementation 'javax.servlet:javax.servlet-api:3.1.0' // 适用于Servlet 3.1规范的版本
        // 其他依赖...
    }
    
    • 1
    • 2
    • 3
    • 4

    3、修改Application类

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    
    @SpringBootApplication
    public class MyApplication extends SpringBootServletInitializer {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(MyApplication.class);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4、构建WAR文件

    ./gradlew clean build
    
    • 1

    这将生成一个WAR文件,通常位于build/libs目录下。

    三、作用域详解

    在Maven中,scope 是用于定义依赖项在构建和运行过程中的可见性和生命周期的概念。通过指定依赖项的作用域,您可以控制这些依赖项在不同阶段的可见性和使用方式。

    以下是 Maven 中常见的作用域:

    compile(默认):

    在编译、测试、运行阶段均可见。
    是默认的作用域,如果不指定作用域,Maven 将使用 compile。

    
    <dependency>
        <groupId>group-idgroupId>
        <artifactId>artifact-idartifactId>
        <version>versionversion>
        
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    provided:

    在编译和测试阶段可见,但在运行阶段不包含在类路径中。
    通常用于 Java EE 容器提供的 API,因为这些 API 在运行时由容器提供。

    
    <dependency>
        <groupId>group-idgroupId>
        <artifactId>artifact-idartifactId>
        <version>versionversion>
        <scope>providedscope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    runtime

    在测试和运行阶段可见,但在编译阶段不包含在类路径中。
    通常用于在运行时需要但在编译时不需要的依赖项。

    
    <dependency>
        <groupId>group-idgroupId>
        <artifactId>artifact-idartifactId>
        <version>versionversion>
        <scope>runtimescope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    test:

    仅在测试阶段可见,不包含在运行时或编译时的类路径中。
    通常用于测试相关的依赖项。

    <dependency>
        <groupId>group-idgroupId>
        <artifactId>artifact-idartifactId>
        <version>versionversion>
        <scope>testscope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    system:

    与 provided 类似,但需要显式提供本地 JAR 文件的路径。
    不推荐使用,除非没有其他选择。

    
    <dependency>
        <groupId>group-idgroupId>
        <artifactId>artifact-idartifactId>
        <version>versionversion>
        <scope>systemscope>
        <systemPath>/path/to/jar-file.jarsystemPath>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    import:

    用于将其他 Maven 项目的依赖项导入到当前项目的 dependencyManagement 部分。

    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>group-idgroupId>
                <artifactId>artifact-idartifactId>
                <version>versionversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    综合示例:

    我们使用外置tomcat,所以上线的依赖中不想包含tomcat的依赖,但是我们本机又想直接运行服务(不用下载tomcat包到本机),则可以利用scope。首先maven,不行,如果执行scope为compile则可以编译通过,但是运行不起。如果指定provide,则编译无法通过。 但是gradle可以使用providedCompile将二者结合起来:

        providedCompile("org.springframework.boot:spring-boot-starter-tomcat")
    
    • 1
  • 相关阅读:
    生物信息学中保存键值对的最佳实践
    深度选择器>>> /deep/ ::v-deep亲测好用
    Java 中各种异常的讲解和举例
    Docker容器-------compose容器集群的快速编排
    TortoiseSVN 详细操作指南
    【Spring(一)】如何获取对象(Bean)
    聊聊阻容降压原理 和 实际使用的电路
    【CASS精品教程】cass3d基于osgb根据点、线、面提取高程,生成等高线
    尚好房 09_权限管理
    成熟ICT测试系统与LabVIEW定制开发的比较
  • 原文地址:https://blog.csdn.net/qq_35890572/article/details/132740597