idea用gradle构建的springboot项目打成war包 在tomcat中运行

本文详细介绍如何在Spring Boot项目中配置并生成WAR包,包括在build.gradle文件中添加插件和依赖,以及在Application启动类中继承SpringBootServletInitializer进行配置。最后,指导读者在项目的build/lib目录下找到生成的WAR包。

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

第一步:build.gradle文件添加

1 apply plugin: ‘war’
2 compile (group: ‘org.springframework.boot’, name: ‘spring-boot-starter-web’){
providedRuntime ‘org.springframework.boot:spring-boot-starter-tomcat’
}

第二部:Application启动类中继SpringBootServletInitializer
public class Application extends SpringBootServletInitializer {

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ApiApplication.class);
    }
    public static void main(String[] args) {
		SpringApplication app = new SpringApplication(Application.class);
		app.addListeners(new ApplicationPidFileWriter());
		app.run(args);
	}
}

最后生成war 路径在build路径的lib下
在这里插入图片描述

<think>我们面对的是一个非Maven管理的Spring Boot项目,用户希望将其打WAR文件。由于项目不是Maven项目,我们不能使用Maven的打插件,因此需要手动配置。 参考Spring Boot官方文档和常见的打方式,我们可以通过以下步骤实现: 1. 修改项目结构,使其符合Web应用的目录结构(即存在WEB-INF目录)。 2. 修改启动类,使其继承SpringBootServletInitializer并重写configure方法。 3. 移除内嵌的Tomcat依赖,并添加servlet-api依赖(因为打WAR需要部署到外部Servlet容器)。 4. 使用IDEA构建工具(如Artifacts配置)来构建WAR。 但是,用户的项目是非Maven管理的,可能是Gradle或者纯Java项目。由于问题中没有明确,我们假设是纯Java项目(没有构建工具),那么我们需要手动管理依赖并配置构建。 由于IDEA支持多种项目类型,我们可以通过以下步骤将非Maven的Spring Boot项目WAR: 步骤1:修改启动类 通常,Spring Boot项目的启动类需要修改以支持WAR部署。例如: ```java @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 步骤2:移除嵌入式Tomcat并添加Servlet依赖 由于要部署到外部Tomcat,我们需要排除内置的Tomcat,并添加servlet-api依赖。 对于非Maven项目,我们需要手动下载servlet-api的jar并添加到项目的类路径中。同时,从项目中移除内嵌的Tomcat依赖(如果有的话)。 步骤3:配置IDEA的Artifact 1. 打开Project Structure(Ctrl+Shift+Alt+S)。 2. 选择Artifacts,点击“+”,选择“Web Application: Archive” -> “For ...”(选择你的模块)。 3. 在输出目录中,设置WAR的输出路径和文件名。 4. 确保所有需要的依赖都被含在WAR的WEB-INF/lib目录下。对于非Maven项目,我们需要手动添加这些依赖。在Artifact配置的“Output Layout”选项卡中,在WEB-INF下创建lib目录,然后将项目依赖的所有jar都放入lib目录中。 5. 同时,确保编译后的类文件被放在WEB-INF/classes目录下。 步骤4:构建WAR 在Artifacts配置好后,我们可以通过Build菜单中的Build Artifacts来生成WAR。 但是,非Maven项目需要手动管理依赖,这可能会比较麻烦。因此,建议用户考虑迁移到Maven或Gradle构建工具,以便依赖管理和打自动化。 参考引用[5]中提到了移除嵌入式Tomcat并添加依赖,但那是针对Maven项目的。对于非Maven项目,我们同样需要排除嵌入式Tomcat,并添加servlet-api依赖。 由于非Maven项目,我们需要手动下载以下依赖(以Tomcat 9为例): - javax.servlet-api: 版本通常与目标Servlet容器匹配,例如3.1.0。 将这些jar添加到项目的类路径中。 另外,参考引用[4]提到:使用嵌入式servlet容器打为可执行存档时,JSP支持有限。但我们现在是打WAR部署到外部容器,所以不受此限制。 注意:如果项目使用了JSP,需要确保JSP文件放在正确的目录下(如src/main/webapp/WEB-INF/jsp),并且在构建WAR时被含进去。 总结步骤: 1. 修改启动类,继承SpringBootServletInitializer。 2. 移除嵌入式Tomcat依赖(如果是以jar形式引入的,则从项目中移除该jar;如果是通过其他方式,需要排除)。 3. 添加servlet-api依赖(手动下载jar并添加到项目库中)。 4. 在IDEA中配置Artifact,构建WAR。 然而,由于非Maven项目构建过程可能比较繁琐,特别是依赖管理。因此,强烈建议用户迁移到构建工具(如Maven或Gradle)来管理项目。 如果用户坚持不使用构建工具,那么只能手动管理依赖和构建过程。 下面给出详细步骤: 详细步骤: 1. 项目结构准备: - 在项目根目录下创建webapp/WEB-INF目录(如果不存在)。这是Web应用的标准目录。 - 将JSP文件(如果有)放在webapp目录下的相应位置。 2. 修改启动类(如上所述)。 3. 移除嵌入式Tomcat: - 检查项目依赖,移除spring-boot-starter-tomcat相关的jar(如果有的话)。但是,由于是Spring Boot项目,我们通常是通过spring-boot-starter-web引入Tomcat的,所以需要排除它。 - 由于没有Maven,我们需要手动移除以下jar(如果存在): spring-boot-starter-tomcat-*.jar tomcat-embed-*.jar 4. 添加Servlet API依赖: - 下载javax.servlet-api.jar(例如版本3.1.0)并添加到项目的库中。 5. 配置IDEA的模块(Module): - 确保项目模块的依赖中已经添加了Spring Boot相关的jar(除了被移除的Tomcat相关jar)和servlet-api.jar。 - 设置模块的编译输出路径(一般不用改,但确保编译后的类文件在out目录或target目录下)。 6. 配置Artifact: - 打开Project Structure -> Artifacts,点击“+” -> Web Application: Archive -> 选择你的模块。 - 在Output Layout中,你会看到生成的WAR结构。确保: - 编译输出(你的模块的编译输出目录)被含在WEB-INF/classes中。 - 在WEB-INF下创建lib目录,并将项目所有依赖的jarSpring Boot相关的jar和servlet-api.jar)添加到lib目录中(可以通过右键点击lib目录,选择Add Copy of -> Library Files或Module Output with Dependencies,但非Maven项目可能需要手动添加)。 - 如果有webapp目录,确保它被含在WAR的根目录下(IDEA通常会自动含,如果没有,可以手动添加目录)。 7. 构建: - 选择Build -> Build Artifacts,然后选择你配置的Artifact,点击Build。 8. 部署: - 将生成的WAR文件部署到外部Tomcat服务器中。 注意:由于非Maven项目,依赖管理容易出错,务必确保WAR中的WEB-INF/lib含了所有必要的jar,并且没有重复或冲突的版本。 另外,如果项目中有使用Spring Boot特有的特性(比如内嵌服务器启动),在部署到外部容器时,可能需要调整一些配置(例如,禁用内嵌服务器相关的自动配置)。但通常,只要正确排除了内嵌Tomcat,并添加了servlet-api,应该可以正常运行。 考虑到手动管理依赖的复杂性,再次建议用户使用构建工具。 根据以上内容,生成相关问题: §§相关问题§§ 1. 如何将非Maven项目迁移到Maven项目? 2. Spring Boot项目部署到外部Tomcat容器需要注意哪些事项? 3. 在没有构建工具的情况下,如何管理Java项目的依赖? 4. 如何解决WAR部署到Tomcat后出现的类冲突问题?</think>### 将非Maven管理的Spring Boot项目WAR文件 以下是手动配置非Maven Spring Boot项目WAR的步骤,无需构建工具支持: #### 1. **修改项目结构** ```diff src/ ├── main/ │ ├── java/ │ ├── resources/ +│ ├── webapp/ # 新增webapp目录 +│ └── WEB-INF/ +│ └── web.xml # 可选,现代Spring Boot可省略 ``` #### 2. **修改启动类** 继承`SpringBootServletInitializer`并重写`configure`方法: ```java @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 3. **调整依赖(关键步骤)** 手动排除嵌入式Tomcat并添加Servlet API: 1. 移除项目中的内嵌Tomcat JAR文件(查找并删除): - `spring-boot-starter-tomcat-*.jar` - `tomcat-embed-*.jar` 2. 添加Servlet API依赖: - 下载`javax.servlet-api-3.1.0.jar`(匹配Tomcat 8+) - 放入项目库路径(如`lib/`目录) #### 4. **IDEA配置WAR** 1. **创建Artifact** `File → Project Structure → Artifacts → + → Web Application: Archive → 选择主模块` 2. **配置输出结构** ```plaintext WAR目录结构: ├── META-INF/ ├── WEB-INF/ │ ├── classes/ # 编译后的class文件 │ └── lib/ # 所有依赖JAR(手动添加) └── 静态资源/ # 来自webapp/ ``` - 将依赖JAR拖入`WEB-INF/lib` - 确保`src/main/webapp`内容在根目录 #### 5. **构建与部署** 1. 生成WAR:`Build → Build Artifacts → 选择WAR → Build` 2. 部署到Tomcat: - 将WAR文件放入Tomcat的`webapps/`目录 - 启动Tomcat(自动解压部署) #### 注意事项 1. **JSP支持**:若使用JSP,需确保: - JSP文件在`src/main/webapp`目录 - 添加JSP编译依赖(如`tomcat-jasper`)到`WEB-INF/lib`[^4] 2. **外部容器版本**:Spring Boot 2.x要求Tomcat 8.5+或Servlet 3.1+容器 3. **配置迁移**:将`application.properties`中的: ```properties server.port= # 移除端口配置(使用容器端口) ``` > **替代方案建议**:考虑迁移到Maven/Gradle可大幅简化流程。例如Maven只需: > 1. 添加`<packaging>war</packaging>` > 2. 排除Tomcat依赖[^5] > 3. 执行`mvn package` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值