Maven中POM.XML详解

本文详细解析Maven项目配置文件pom.xml中的各项元素,包括基本信息、依赖管理、继承、聚合及构建配置等内容。

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

转自:https://www.cnblogs.com/sharpest/p/5969566.html

我们先看一个简单的例子:

复制代码
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 3     <!-- maven model version -->
 4     <modelVersion>4.0.0</modelVersion>
 5     <!-- project group id & artifact id -->
 6     <groupId>com.freesoft.mvn-webapp</groupId>
 7     <artifactId>mvnwebapp</artifactId>
 8     <!-- packing type -->
 9     <packaging>war</packaging>
10     <!-- version -->
11     <version>1.0-SNAPSHOT</version>
12     <name>mvnwebapp Maven Webapp</name>
13     <url>http://maven.apache.org</url>
14 
15 
16     <dependencies>
17 
18         <!-- JUnit -->
19         <dependency>
20             <groupId>junit</groupId>
21             <artifactId>junit</artifactId>
22             <version>4.11</version>
23             <scope>test</scope>
24         </dependency>
25 
26     </dependencies>
27 
28 
29     <build>
30         <finalName>mvnwebapp</finalName>
31         <pluginManagement>
32             <plugins>
33                 <plugin>
34                     <groupId>org.apache.tomcat.maven</groupId>
35                     <artifactId>tomcat7-maven-plugin</artifactId>
36                     <version>2.1</version>
37                     <configuration>
38                         <tomcat-url>http://localhost:8080/manager/html</tomcat-url>
39                         <server>tomcat_localtest</server>
40                     </configuration>
41                 </plugin>
42             </plugins>
43         </pluginManagement>
44     </build>
45 
46     <properties>
47         <struts.version>2.3.15</struts.version>
48         <mysql.version>5.1.29</mysql.version>
49         <hibernate.version>4.3.1.Final</hibernate.version>
50     </properties>
51 </project>
复制代码

 

下面分段讲解。


1. 基本信息

 

modelVersion Maven模块版本,目前我们一般都取值4.0.0
groupId 整个系统的名称。
artifactId 子模块名称。
packaging 打包类型,可取值:jar,war等等,这个配置用于package的phase,具体可以参见package运行的时候启动的plugin,后面有机会我们会讲述如何配置打包的插件。

 

2. dependencies

依赖关系。实际上pom之间存在好三种关系:继承、依赖、聚合。我们先讲依赖,这也是最重要的关系。

 

groupId 依赖项的groupId
artifactId 依赖项的artifactId
version 依赖项的版本
scope 依赖项的适用范围:
  • compile,缺省值,适用于所有阶段,会随着项目一起发布。
  • provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
  • runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
  • test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
  • system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
之前例子里的junit就只用在了test中。
exclusions 排除项目中的依赖冲突时使用。

 

2.1 关于排除依赖冲突

我们可能经常会遇到这样一个问题:我们的项目有两个依赖项:A & B,而且A和B同时依赖了C,但不是同一个版本。那么我们怎么办呢?


2.1.1 添加检查插件

复制代码
1 <reporting>
2         <plugins>
3             <plugin>
4                 <groupId>org.apache.maven.plugins</groupId>
5                 <artifactId>maven-project-info-reports-plugin</artifactId>
6             </plugin>
7         </plugins>
8     </reporting>
复制代码


然后运行:mvn project-info-reports:dependencies,来查看依赖项报告。


2.1.2 去除依赖项

如果我们需要在某个dependency中去除某个依赖项,直接这样即可:

复制代码
 1 <!-- Struts2 -->
 2         <dependency>
 3             <groupId>org.apache.struts</groupId>
 4             <artifactId>struts2-core</artifactId>
 5             <version>${struts.version}</version>
 6             <exclusions>
 7                 <exclusion>
 8                     <groupId>org.freemarker</groupId>
 9                     <artifactId>freemarker</artifactId>
10                 </exclusion>
11             </exclusions>
12         </dependency>
复制代码

3. 继承

我的repository下面有个例子就直接拿来用了:

复制代码
1 <modelVersion>4.0.0</modelVersion>
2   <parent>
3     <groupId>com.thoughtworks.xstream</groupId>
4     <artifactId>xstream-parent</artifactId>
5     <version>1.4.3</version>
6   </parent>
7   <artifactId>xstream</artifactId>
8   <packaging>jar</packaging>
9   <name>XStream Core</name>
复制代码

其中的parent表示父pom是com.thoughtworks.xstream的xstream-parent的1.4.3版本。继承关系比较简单,这里不做过多介绍。


4. 聚合

我们可以通过一个大的项目来整合各个小的模块:

1 <modules>
2         <module>my-app</module>
3     </modules>

5. 属性

属性表述类似于EL表达式,ANT中也同样有,所以我们的properties字段可以这样使用:

1         <!-- mysql -->
2         <dependency>
3             <groupId>mysql</groupId>
4             <artifactId>mysql-connector-java</artifactId>
5             <version>${mysql.version}</version>
6         </dependency>

6. 构建

6.1 plugin

Plugin的配置如下:

复制代码
 1 <pluginManagement>
 2             <plugins>
 3                 <plugin>
 4                     <groupId>org.apache.tomcat.maven</groupId>
 5                     <artifactId>tomcat7-maven-plugin</artifactId>
 6                     <version>2.1</version>
 7                     <configuration>
 8                         <tomcat-url>http://localhost:8080/manager/html</tomcat-url>
 9                         <server>tomcat_localtest</server>
10                     </configuration>
11                 </plugin>
12             </plugins>
13         </pluginManagement>
复制代码

我们可以看到同样要哟偶groupId、artifactId、version还有一些配置参数。


6.2 resource

指定你在Build时需要的资源文件:

复制代码
 1 <resources>
 2             <resource>
 3                 <targetPath>WEB-INF/resource</targetPath>
 4                 <!-- 不对文件中的表达式进行处理 -->
 5                 <filtering>false</filtering>
 6                 <directory>${basedir}/src/test/resources</directory>
 7                 <includes>
 8                     <include>include.xml</include>
 9                 </includes>
10                 <excludes>
11                     <exclude>exclude.xml</exclude>
12                 </excludes>
13             </resource>
14         </resources>
复制代码

 



pom.xmlMaven项目的核心配置文件,它包含了项目的基本信息、依赖关系、构建配置等重要信息。下面是pom.xml文件的详细解释: 1. 项目基本信息 ``` <groupId>com.example</groupId> <artifactId>my-project</artifactId> <version>1.0.0</version> ``` - groupId:项目的组织或公司名称。 - artifactId:项目的名称。 - version:项目的版本号。 2. 依赖关系 ``` <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.1.6.RELEASE</version> </dependency> </dependencies> ``` - dependencies:依赖关系列表。 - dependency:依赖项。 - groupId:依赖项的组织或公司名称。 - artifactId:依赖项的名称。 - version:依赖项的版本号。 3. 插件 ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> ``` - build:构建配置。 - plugins:插件列表。 - plugin:插件。 - groupId:插件的组织或公司名称。 - artifactId:插件的名称。 - version:插件的版本号。 - configuration:插件的配置。 4. 项目打包方式 ``` <packaging>jar</packaging> ``` - packaging:项目的打包方式,常见的有jar、war、pom等。 5. 项目依赖管理 ``` <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.1.6.RELEASE</version> </dependency> </dependencies> </dependencyManagement> ``` - dependencyManagement:依赖管理。 - dependencies:依赖关系列表。 - dependency:依赖项。 - groupId:依赖项的组织或公司名称。 - artifactId:依赖项的名称。 - version:依赖项的版本号。 6. 项目构建描述 ``` <description>This is a sample Maven project.</description> ``` - description:项目的描述。 7. 仓库配置 ``` <repositories> <repository> <id>central</id> <url>http://central.maven.org/maven2/</url> </repository> </repositories> ``` - repositories:仓库列表。 - repository:仓库。 - id:仓库的唯一标识符。 - url:仓库的URL。 8. 插件仓库配置 ``` <pluginRepositories> <pluginRepository> <id>central</id> <url>http://central.maven.org/maven2/</url> </pluginRepository> </pluginRepositories> ``` - pluginRepositories:插件仓库列表。 - pluginRepository:插件仓库。 - id:插件仓库的唯一标识符。 - url:插件仓库的URL。 9. 构建配置 ``` <build> <sourceDirectory>src/main/java</sourceDirectory> <testSourceDirectory>src/test/java</testSourceDirectory> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> </testResource> </testResources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> ``` - build:构建配置。 - sourceDirectory:源代码目录。 - testSourceDirectory:测试代码目录。 - resources:资源目录列表。 - resource:资源目录。 - directory:资源目录的路径。 - testResources:测试资源目录列表。 - testResource:测试资源目录。 - plugins:插件列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值