文章目录
- [1. 简介](#1. 简介)
- [2. Maven POM 文件结构](#2. Maven POM 文件结构)
-
- [POM 文件的基本结构](#POM 文件的基本结构)
- 重要的POM元素介绍
- [3. Maven 本地打包的关键配置](#3. Maven 本地打包的关键配置)
-
- spring-boot-maven-plugin
- maven-surefire-plugin
-
- [如何配置和使用Maven Surefire插件](#如何配置和使用Maven Surefire插件)
- [skip 标签](#skip 标签)
- maven-compiler-plugin
-
- [如何配置和使用Maven Compiler插件](#如何配置和使用Maven Compiler插件)
- [source 和 target 标签](#source 和 target 标签)
- [encoding 标签](#encoding 标签)
- [compilerArguments 标签](#compilerArguments 标签)
- maven-war-plugin
-
- [如何配置和使用Maven War插件](#如何配置和使用Maven War插件)
- [resourceEncoding 标签](#resourceEncoding 标签)
- [webResources 标签](#webResources 标签)
- 4.实战:POM本地打包
- 进一步的学习资源
1. 简介
Maven和POM的基本概念
Maven 是一个强大的构建工具,广泛用于 Java 项目的构建和管理。它不仅可以用于构建和打包,还可以用于依赖管理、项目文档生成、项目报告生成等。
POM(Project Object Model)是 Maven 的核心,它是一个 XML 文件,定义了项目的基本信息、构建规则、依赖关系等。通过 POM,我们可以简洁地描述出项目的构建过程。
xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
上面的 POM 文件定义了一个最简单的 Maven 项目,包括项目的组织信息、项目的唯一标识符和版本号。
本地打包的意义和场景
本地打包,即在本地环境中将项目打包成为一个可执行的文件(如 JAR、WAR 或 EAR 文件)。这个过程通常包括编译源代码、运行测试、生成文档和打包等步骤。
本地打包的主要场景包括:
-
使用本地jar包:有一些jar包并没有在远程仓库里,比如
公司私有的jar包
,需要通过maven来管理打包 -
在本地环境中测试和验证项目:通过本地打包,我们可以在本地环境中快速运行和测试项目,验证项目的功能和性能。
-
为部署做准备:通过本地打包,我们可以生成可部署的文件,然后将这个文件部署到生产环境中。
-
分享和分发项目:通过本地打包,我们可以生成一个包含了项目所有代码和资源的文件,方便分享和分发。
2. Maven POM 文件结构
POM 文件的基本结构
POM (Project Object Model) 文件是 Maven 项目的核心配置文件。它使用 XML 格式来描述项目的基本信息、依赖关系、构建配置等。下面是一个 POM 文件的基本结构:
xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- dependencies go here -->
</dependencies>
<build>
<!-- build configuration goes here -->
</build>
</project>
重要的POM元素介绍
1. modelVersion: 这是 POM 模型的版本,当前版本为 4.0.0,这是一个固定的值。
2. groupId, artifactId, version (GAV): 这三个元素组合起来用于唯一地标识一个 Maven 项目:
-
groupId: 定义了当前 Maven 项目所属的组或者说是项目的唯一标识。通常是公司或组织的域名反写,如 com.example。
-
artifactId: 定义了当前 Maven 项目在组中的唯一名字。通常是项目的名字,如 my-app。
-
version: 定义了当前 Maven 项目的版本号。
3. dependencies: 这个元素用于定义项目的依赖关系。每一个依赖都是一个 dependency 元素,包含了依赖项目的 GAV 信息。
4. build: 这个元素用于定义项目的构建配置,例如源代码目录、目标代码目录、插件配置等。
3. Maven 本地打包的关键配置
在Maven的POM文件中,插件(plugins)扮演着非常重要的角色。插件提供了一种方式来扩展Maven的功能,包括编译、测试、打包等。下面我们将介绍几个用于本地打包的关键插件。
spring-boot-maven-plugin
spring-boot-maven-plugin
是一个为Spring Boot应用提供的Maven插件。它的主要功能是将Spring Boot应用打包成一个可执行的JAR文件。这个JAR文件包含了所有的依赖、类和资源,并且它可以直接运行,不需要额外的服务器容器。
xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
maven-surefire-plugin
Maven Surefire插件是Maven项目中一个非常重要的插件,它主要用于执行项目的单元测试,并生成相应的测试报告。它支持多种流行的测试框架,如JUnit,TestNG等。
当你运行mvn test
命令时,Maven会自动执行项目中的单元测试,并通过Surefire插件生成测试报告。这是一个非常重要的步骤,因为它可以帮助你快速发现和修复代码中的问题。
如何配置和使用Maven Surefire插件
Maven Surefire插件的配置非常简单,你只需要在pom.xml文件的<plugins>
标签中添加如下配置:
xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- 插件配置项 -->
</configuration>
</plugin>
在<configuration>
标签中,你可以添加一些配置项来定制插件的行为。例如,你可以通过<includes>
和<excludes>
标签来指定哪些测试类或测试方法应该被执行,哪些应该被忽略。
skip 标签
在Maven Surefire插件的配置中,<skip>
标签用于控制是否跳过测试。如果你设置<skip>true</skip>
,那么在执行mvn test
命令时,Maven将不会执行任何测试,也就不会生成测试报告。
这个配置项在某些情况下非常有用。例如,当你正在进行开发,并且想要快速构建项目而不执行测试时,你可以设置<skip>true</skip>
。然后,当你准备提交代码时,你可以将其设置回false
,以确保所有的测试都被执行。
xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
在POM文件中,我们可以配置maven-surefire-plugin
来指定测试框架、测试类、测试方法等。
xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<!-- specify test classes -->
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
maven-compiler-plugin
Maven Compiler插件的主要作用是编译项目的源代码。当你运行mvn compile
命令时,Maven会自动执行项目中的源代码编译,并将编译后的.class文件放到target/classes目录下。
如何配置和使用Maven Compiler插件
Maven Compiler插件的配置相对简单,你只需要在pom.xml文件的<plugins>
标签中添加如下配置:
xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- 插件配置项 -->
</configuration>
</plugin>
在<configuration>
标签中,你可以添加一些配置项来定制插件的行为。例如,你可以通过<source>
和<target>
标签来指定Java的源代码和目标代码版本,通过<encoding>
标签来指定源代码的编码格式。
source 和 target 标签
<source>
和<target>
标签用于指定Java的源代码和目标代码版本。在这里,<source>1.8</source>
表示源代码是1.8版本的Java代码,<target>1.8</target>
表示编译后的.class文件需要运行在1.8版本的Java环境中。
encoding 标签
<encoding>
标签用于指定源代码的编码格式。在这里,<encoding>UTF-8</encoding>
表示源代码是UTF-8编码的。
compilerArguments 标签
<compilerArguments>
标签用于传递一些特定的编译器参数。在这个例子中,<extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
配置了额外的类路径,这意味着编译器会在这个路径下查找类文件。
maven-war-plugin
Maven War插件的主要作用是将Web应用程序打包成一个WAR文件,这个WAR文件可以被部署到任何支持Java EE的Web服务器或应用服务器上,如Tomcat,Jetty,GlassFish等。当你运行mvn package
或mvn install
命令时,Maven会自动使用War插件将你的项目打包成WAR文件。
如何配置和使用Maven War插件
Maven War插件的配置也是在pom.xml文件的<plugins>
标签中进行。一个基本的配置如下:
xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!-- 插件配置项 -->
</configuration>
</plugin>
在<configuration>
标签中,你可以添加一些配置项来定制插件的行为。例如,你可以通过<warName>
标签来指定生成的WAR文件的名称,通过<webResources>
标签来配置Web资源的处理方式。
resourceEncoding 标签
<resourceEncoding>
标签用于指定Web资源文件的编码格式。在这里,<resourceEncoding>UTF-8</resourceEncoding>
表示Web资源文件是UTF-8编码的。这是非常重要的,因为如果你的Web资源文件包含非ASCII字符(如中文),那么你需要确保它们被正确地编码和解码。
webResources 标签
<webResources>
标签用于配置Web资源的处理方式。你可以在这个标签中指定一些资源目录,并定义这些资源目录的处理规则。例如,你可以指定某些资源目录下的文件需要经过过滤处理,或者指定某些资源文件需要被排除。
一个基本的<webResources>
配置如下:
xml
<webResources>
<resource>
<directory>src/main/webapp</directory>
<filtering>true</filtering>
</resource>
</webResources>
在这个配置中,我们指定了src/main/webapp
目录作为Web资源目录,并开启了过滤功能。这意味着在构建过程中,Maven会对这个目录下的文件进行过滤处理,替换其中的占位符。
maven-war-plugin
是用于生成WAR文件的Maven插件。WAR文件是一种Web应用程序归档文件,它包含了JSP、Servlet、XML、HTML、图片和其他Web资源。我们可以将WAR文件部署到任何支持Java的Web服务器或应用服务器上。
4.实战:POM本地打包
xml
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<!--配置本地jar包在项目的存放路径-->
<compilerArguments>
<extdirs>${project.basedir}/src/main/webapp/WEB-INF/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<resourceEncoding>UTF-8</resourceEncoding>
<webResources>
<resource>
<!--配置本地jar包在项目中的存放路径-->
<directory>src/main/webapp/WEB-INF/lib/</directory>
<!--配置打包时jar包的存放路径-->
<targetPath>WEB-INF/lib</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
执行打包命令
一旦POM文件和插件配置完成,我们就可以执行Maven的打包命令了。在命令行中,我们可以运行以下命令来打包项目:
mvn clean package
这个命令将会清理之前的构建结果,然后编译、测试(如果没有被跳过的话)和打包项目。
验证打包结果
执行完打包命令后,我们可以在target
目录下找到生成的JAR或WAR文件。我们可以检查这个文件来验证打包是否成功。例如,我们可以使用jar
命令(对于JAR文件)或unzip
命令(对于WAR文件)来查看文件的内容。
此外,如果我们在maven-compiler-plugin
和maven-war-plugin
的配置中指定了本地jar包的路径,我们也应该在打包结果中看到这些jar包。
进一步的学习资源
- Apache Maven官方文档:这是Maven的官方文档,包含了关于Maven的所有信息。
- Spring Boot Maven Plugin参考指南:这是Spring Boot Maven插件的官方参考指南,详细介绍了插件的各种配置和用法。
- Maven Surefire Plugin官方文档:这是Maven Surefire插件的官方文档,包含了关于插件的详细信息。
- Maven Compiler Plugin官方文档:这是Maven Compiler插件的官方文档,包含了关于插件的详细信息。
- Maven WAR Plugin官方文档:这是Maven WAR插件的官方文档,包含了关于插件的详细信息。