在Maven中生成WAR文件

2023/05/24

1. 概述

Web应用程序资源或Web应用程序存档通常称为WAR文件,WAR文件用于在应用程序服务器中部署Java EE Web应用程序。在WAR文件中,所有Web组件都打包成一个单元,其中包括JAR文件、JSP页面、Java Servlet、Java class文件、XML文件、HTML文件和我们需要的Web应用程序的其他资源文件。

Maven是一个流行的构建管理工具,广泛用于Java EE项目中,用于处理编译、打包和工件管理等构建任务。我们可以使用Maven WAR插件将项目构建为WAR文件

在本教程中,我们将考虑在Java EE应用程序中使用Maven WAR插件。为此,我们将创建一个简单的Maven Spring Boot Web应用程序并从中生成一个WAR文件。

2. 创建Spring Boot Web应用程序

让我们创建一个简单的Maven、Spring Boot和Thymeleaf Web应用程序来演示WAR文件的生成过程。

首先,我们要将依赖项添加到构建Spring Boot Web应用程序所需的pom.xml文件中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

接下来,让我们创建我们的MainController类。在这个类中,我们将创建一个单一的GET控制器方法来访问我们的HTML文件:

@Controller
public class MainController {

    @GetMapping("/")
    public String viewIndexPage(Model model) {
        model.addAttribute("header", "Maven Generate War");
        return "index";
    }
}

最后,是时候创建我们的index.html文件了。Bootstrap CSS文件也包含在项目中,并且在我们的index.html文件中使用了一些CSS类:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
    <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}">
</head>
<body>
<nav class="navbar navbar-light bg-light">
    <div class="container-fluid">
        <a class="navbar-brand" href="#">
            Maven Tutorial
        </a>
    </div>
</nav>
<div class="container">
    <h1>[[${header}]]</h1>
</div>
</body>
</html>

3. Maven WAR插件

Maven WAR插件负责收集并将Web应用程序的所有依赖项,classes和资源编译成Web应用程序存档

Maven WAR插件中有一些明确的目标(goal):

  • war:这是在项目package阶段调用的默认目标,如果packaging类型为war它会构建一个WAR文件。
  • exploded:这个目标通常用于项目development阶段,以加快测试速度,它会在指定的目录中生成一个分解的Web应用程序。
  • inplace:这是exploded目标的另一种形式,它会在Web应用程序文件夹中生成一个分解的web应用程序。

让我们将Maven WAR插件添加到我们的pom.xml中:

<plugin>
    <artifactId>maven-WAR-plugin</artifactId>
    <version>3.3.1</version>
</plugin>

现在,一旦我们执行mvn install命令,就会在target文件夹中生成WAR文件。

使用mvn:WAR:exploded命令,我们可以将分解的WAR生成为target目录中的一个目录。这是一个普通的目录,WAR文件里面的所有文件都包含在展开的WAR目录里面。

4. 包含或排除WAR文件内容

使用Maven WAR插件,我们可以过滤WAR文件的内容。让我们配置Maven WAR插件以在WAR文件中包含一个additional_resources文件夹:

<plugin>
    <artifactId>maven-WAR-plugin</artifactId>
    <version>3.3.1</version>
    <configuration>
        <webResources>
            <resource>
                <directory>additional_resources</directory>
            </resource>
        </webResources>
    </configuration>
</plugin>

一旦我们执行mvn install命令,additional_resources文件夹下的所有内容都将在WAR文件中可用。当我们需要向WAR文件中添加一些额外的资源(例如报告)时,这很有用。

5. 编辑Manifest文件

Maven WAR插件允许自定义Manifest文件。例如,我们可以将classpath添加到Mainfest文件中。当WAR文件的结构更复杂时,以及当我们需要在多个模块之间共享项目依赖关系时,这非常有用。

让我们配置Maven WAR插件以将classpath添加到Mainfest文件:

<plugin>
    <artifactId>maven-WAR-plugin</artifactId>
    <version>3.3.1</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
    </configuration>
</plugin>

6. 总结

在这个简短的教程中,我们讨论了如何使用Maven构建工具生成WAR文件。我们创建了一个Maven Spring Boot Web应用程序来演示这个用例,为了生成WAR文件,我们使用了一个名为maven-war-plugin的特殊插件。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章