1、修改pom文件
<packaging>warpackaging>
2、添加Servlet API依赖,Spring Boot的Starter依赖通常会包含这个依赖,所以你可能已经有了,没有就需要添加
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.1.0version>
<scope>providedscope>
dependency>
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);
}
}
4、构建WAR文件:
mvn clean package
这将生成一个WAR文件,通常位于target目录下。
1、修改build.gradle文件,添加war插件,以告诉Gradle将项目打包成WAR文件。
apply plugin: 'war'
2、添加Servlet API依赖,Spring Boot的Starter依赖通常会包含这个依赖,所以你可能已经有了,没有就需要添加
dependencies {
implementation 'javax.servlet:javax.servlet-api:3.1.0' // 适用于Servlet 3.1规范的版本
// 其他依赖...
}
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);
}
}
4、构建WAR文件
./gradlew clean build
这将生成一个WAR文件,通常位于build/libs目录下。
在Maven中,scope 是用于定义依赖项在构建和运行过程中的可见性和生命周期的概念。通过指定依赖项的作用域,您可以控制这些依赖项在不同阶段的可见性和使用方式。
以下是 Maven 中常见的作用域:
在编译、测试、运行阶段均可见。
是默认的作用域,如果不指定作用域,Maven 将使用 compile。
<dependency>
<groupId>group-idgroupId>
<artifactId>artifact-idartifactId>
<version>versionversion>
dependency>
在编译和测试阶段可见,但在运行阶段不包含在类路径中。
通常用于 Java EE 容器提供的 API,因为这些 API 在运行时由容器提供。
<dependency>
<groupId>group-idgroupId>
<artifactId>artifact-idartifactId>
<version>versionversion>
<scope>providedscope>
dependency>
在测试和运行阶段可见,但在编译阶段不包含在类路径中。
通常用于在运行时需要但在编译时不需要的依赖项。
<dependency>
<groupId>group-idgroupId>
<artifactId>artifact-idartifactId>
<version>versionversion>
<scope>runtimescope>
dependency>
仅在测试阶段可见,不包含在运行时或编译时的类路径中。
通常用于测试相关的依赖项。
<dependency>
<groupId>group-idgroupId>
<artifactId>artifact-idartifactId>
<version>versionversion>
<scope>testscope>
dependency>
与 provided 类似,但需要显式提供本地 JAR 文件的路径。
不推荐使用,除非没有其他选择。
<dependency>
<groupId>group-idgroupId>
<artifactId>artifact-idartifactId>
<version>versionversion>
<scope>systemscope>
<systemPath>/path/to/jar-file.jarsystemPath>
dependency>
用于将其他 Maven 项目的依赖项导入到当前项目的 dependencyManagement 部分。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>group-idgroupId>
<artifactId>artifact-idartifactId>
<version>versionversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
我们使用外置tomcat,所以上线的依赖中不想包含tomcat的依赖,但是我们本机又想直接运行服务(不用下载tomcat包到本机),则可以利用scope。首先maven,不行,如果执行scope为compile则可以编译通过,但是运行不起。如果指定provide,则编译无法通过。 但是gradle可以使用providedCompile
将二者结合起来:
providedCompile("org.springframework.boot:spring-boot-starter-tomcat")