POM(project Object Model) Maven包管理依赖 pom.xml文件

什么是POM

POM全称为“Project Object Model”,意思是工程对象模型。Maven工程使用pom.xml来指定工程配置信息,和其他文本信息。该配置文件以xml为格式,使用xml语法表明信息。

快速预览

一个pom.xml文件主要包括以下元素信息:

pom.xml


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42


<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>

<!-- The Basics -->

<groupId>...</groupId>

<artifactId>...</artifactId>

<version>...</version>

<packaging>...</packaging>

<dependencies>...</dependencies>

<parent>...</parent>

<dependencyManagement>...</dependencyManagement>

<modules>...</modules>

<properties>...</properties>

<!-- Build Settings -->

<build>...</build>

<reporting>...</reporting>

<!-- More Project Information -->

<name>...</name>

<description>...</description>

<url>...</url>

<inceptionYear>...</inceptionYear>

<licenses>...</licenses>

<organization>...</organization>

<developers>...</developers>

<contributors>...</contributors>

<!-- Environment Settings -->

<issueManagement>...</issueManagement>

<ciManagement>...</ciManagement>

<mailingLists>...</mailingLists>

<scm>...</scm>

<prerequisites>...</prerequisites>

<repositories>...</repositories>

<pluginRepositories>...</pluginRepositories>

<distributionManagement>...</distributionManagement>

<profiles>...</profiles>

</project>

详解

The Basics

Maven Coordinates(Maven坐标)

groupId:artifactId:version构成了Maven工程的坐标系统。

  • groundId: 组织标识,例如:org.codehaus.mojo,在M2_REPO目录下,将是: org/codehaus/mojo目录。
  • artifactId:项目名称,例如:my-project,在M2_REPO目录下,将是:org/codehaus/mojo/my-project目录。
  • version:版本号,例如:1.0,在M2_REPO目录下,将是:org/codehaus/mojo/my-project/1.0目录。
  • packaging:打包格式,可选值:jar(默认值), maven-pluginejbwarearrarpar

POM Relationships(POM关系)

Maven主要用于处理项目之间的关系,包括依赖关系(和过渡依赖)、继承和聚合(多模块项目)。

Dependencies(依赖)

大多数每个项目都需要依赖其他人构建的项目,Maven则可以对这些依赖进行管理 。在
dependencies标签中指明所需要依赖的功能模块,Maven会自动下载编译和链接其依赖关系。另外,Maven屏蔽了这些依赖带来的更多的依赖项(依赖传递),让开发者只需要关注自己项目需要的依赖关系。

junit4

 1 <project xmlns="http://maven.apache.org/POM/4.0.0"
 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
 4 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 5 ...
 6 <dependencies>
 7 <dependency>
 8 <groupId>junit</groupId>
 9 <artifactId>junit</artifactId>
10 <version>4.0</version>
11 <type>jar</type>
12 <scope>test</scope>
13 <optional>true</optional>
14 </dependency>
15 ...
16 </dependencies>
17 ...
18 </project>
  • groupId, artifactId, version: 用于精准定位dependency
  • classifier: 用于区分名字相同但内容不同的POM。例如:jdk15jdk14指明目标版本;sourcesjavadoc指明部署的是源码还是文档。
  • type: 与packging中的type相对应。
  • scope: 用于指明dependency作用范围,有5种值:
    1. compile: 默认的scope,表示dependency可以在所有的生命周期中使用。而且,这些dependencies会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布。
    2. provided:跟compile相似,但是表明了dependencyJDK或者容器提供,例如Servlet API和一些Java EE APIs。另外该dependency 只能作用在编译和测试时,同时没有传递性。
    3. runtime:表示dependency不作用在编译时,但会作用在运行和测试时,如JDBC驱动,适用运行和测试阶段。
    4. test:表示dependency只在测试时使用,用于编译和运行测试代码。不会随项目发布。
    5. system:跟provided相似,但是在系统中要以外部JAR包的形式提供,maven不会在repository查找它。
  • systemPath:只在scopesystem时有效,指明dependency路径。
  • optional:指明该项目没有该dependency,依然可以正确运行。
Dependency Version Requirement Specification(依赖版本规范)
  • 1.0: “软性”要求 1.0 (推荐方式)
  • [1.0]: “硬性要求” 1.0
  • (,1.0]: <= 1.0
  • [1.2,1.3]: 1.2 <= x <= 1.3
  • [1.0,2.0): 1.0 <= x < 2.0
  • [1.5,): x >= 1.5
  • (,1.0],[1.2,): x <= 1.0 or x >= 1.2
  • (,1.1),(1.1,): 排除 1.1
Exclusions(排除)

排除掉dependency的依赖传递中的某个dependency。和optional不同,exclusions不会安装和使用该dependency,并从依赖树上去除它。例如,某个依赖树种某dependency可能会导致错误,则应该排除掉。

Inheritance(继承)

POM对象可以实现继承,子POM对象将从父POM继承各属性。

Aggregation(聚类(多模块))

一个pom打包项目通过聚合多个模块来构建,开发者不需要考虑模块间的依赖关系。

Properties(属性)

Maven中的Properties是占位符,可以在POM中任何一个地方使用符号${X},其中X是该Property。有以下5中形式:

  • env.X:系统变量,区分大小写。例如:${env.PATH}表示系统系统路径变量。
  • project.x:POM中相应的值。例如:<project><version>1.0</version></project>可以通过${project.version}访问。
  • settings.x settings.xml中相应的值。例如,<settings><offline>false</offline></settings>可以通过${settings.offline}访问。
  • Java System Properties:例如:${java.home}
  • x:POM中<properties />标签中的值。例如:<properties><someVar>value</someVar></properies>可以通过${someVar}访问。

Build Settings

Build(构建)

build元素分为两块:”project build”和”profile build”。

build

1 <!-- "Project Build" contains more elements than just the BaseBuild set -->
2 <build>...</build>
3
4 <profiles>
5 <profile>
6 <!-- "Profile Build" contains a subset of "Project Build"s elements -->
7 <build>...</build>
8 </profile>
9 </profiles>

The BaseBuild Element Set

BaseBuild

1 <build>
2 <defaultGoal>install</defaultGoal>
3 <directory>${basedir}/target</directory>
4 <finalName>${artifactId}-${version}</finalName>
5 <filters>
6 <filter>filters/filter1.properties</filter>
7 </filters>
8 ...
9 </build>


defaultGoal

    :默认执行行为。
  • directory:构建目录。
  • finalName:文件名。
  • filter:过滤器。

The Build Element Set

Build:

<build>
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
<scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
...
</build>

  

定义工程目录。

Reporting(报告)

生成工程报告,如javadoc。

Reporting

<reporting>
<plugins>
<plugin>
...
<reportSets>
<reportSet>
<id>sunlink</id>
<reports>
<report>javadoc</report>
</reports>
<inherited>true</inherited>
<configuration>
<links>
<link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
</links>
</configuration>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>

More Project Information

  • name:工程名。
  • description:工程描述。
  • url:工程URL。
  • inceptionYear:开始时间。

Licenses(许可)

Licenses

<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
<comments>A business-friendly OSS license</comments>
</license>
</licenses>


name, url和comments

    :许可描述。
  • distribution:指明工程如何分布。repo,代表可以从Maven repository下载;manual,代表必须手动安装。

Organization(组织)

大多数项目都是由某组织(公司、私人组织等)管理。这是最基本的信息。

Organization


1

2

3

4


<organization>

<name>Codehaus Mojo</name>

<url>http://mojo.codehaus.org</url>

</organization>

Developers(开发者)

Developers


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18


<developers>

<developer>

<id>jdoe</id>

<name>John Doe</name>

<email>[email protected]<email>

<url>http://www.example.com/jdoe</url>

<organization>ACME</organization>

<organizationUrl>http://www.example.com</organizationUrl>

<roles>

<role>architect</role>

<role>developer</role>

</roles>

<timezone>America/New_York</timezone>

<properties>

<picUrl>http://www.example.com/jdoe/pic</picUrl>

</properties>

</developer>

</developers>

  • id, name, email:开发者身份标识。
  • organization, organizationUrl:个人从属组织信息。
  • roles:开发者在项目中的角色。
  • timezone:时区。
  • properties:个人属性。

Contributors(参与者)

开源项目往往有很多Contributors参与,基本元素节点信息与Developers类似。

Environment Settings

Issue Management(问题管理)

定义了缺陷跟踪系统(Bugzilla、TestTrack ClearQuest等)的使用,主要用于生成项目文档。

Continuous Integration Management(连续集成管理)

用于自动化构建。

Mailing Lists(邮件列表)

项目开发人员联系方式。

SCM(软件配置管理)

SCM(Software Configuration Management,也叫Source Code/Control Management),用于版本控制。

Prerequisites(先决条件)

工程构建的先决条件。

Repositories(仓库)

Repositories


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21


<repositories>

<repository>

<releases>

<enabled>false</enabled>

<updatePolicy>always</updatePolicy>

<checksumPolicy>warn</checksumPolicy>

</releases>

<snapshots>

<enabled>true</enabled>

<updatePolicy>never</updatePolicy>

<checksumPolicy>fail</checksumPolicy>

</snapshots>

<id>codehausSnapshots</id>

<name>Codehaus Snapshots</name>

<url>http://snapshots.maven.codehaus.org/maven2</url>

<layout>default</layout>

</repository>

</repositories>

<pluginRepositories>

...

</pluginRepositories>

  • releases, snapshots:正式版和快照版(开发版)。
  • enabled:是否启用。
  • updatePolicy:更新频率。
  • checksumPolicy:校验政策。
  • layout:Maven仓库布局。

Activation(激活)

Activation


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25


<profiles>

<profile>

<id>test</id>

<activation>

<activeByDefault>false</activeByDefault>

<jdk>1.5</jdk>

<os>

<name>Windows XP</name>

<family>Windows</family>

<arch>x86</arch>

<version>5.1.2600</version>

</os>

<property>

<name>sparrow-type</name>

<value>African</value>

</property>

<file>

<exists>${basedir}/file2.properties</exists>

<missing>${basedir}/file1.properties</missing>

</file>

</activation>

...

</profile>

</profiles>

</project>

在某些条件下修改工程配置。

reference

[1] https://sawyersun.github.io/2016/06/14/pom/

时间: 2024-10-06 14:05:30

POM(project Object Model) Maven包管理依赖 pom.xml文件的相关文章

POM (Project Object Model)简介

1  概念介绍 一个项目所有的配置都放置在 POM 文件中:定义项目的类型.名字,管理依赖关系,定制插件的行为等等.比如说,你可以配置 compiler 插件让它使用 java1.5 来编译. [html] view plain copy print? <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

项目jar包管理,使用 .userlibraries 文件增加jar包的可移植性,明确jar包依赖,多项目共用jar包里

当一个普通的项目,在不适用maven 等jar包管理工具的时候,通常我都会直接把jar 包复制lib下,并且在build path 中直接添加额外jar包,或者使用user_libraries包所用的jar包 都放到一个文件夹里,然后让项目依赖该user_libraries 包.如果我又新建了一个项目,但是只有部分jar 包不一样或者版本不一样,通常我会再次新建一个文件夹把这些jar 放进去, 如果jar包出现问题我要一个个去翻看lib下的文件,看着很不方便,也不方便管理. 有没有像maven

nodejs第三天(核心模块与文件模块,核心模块和文件模块引入的区别,从模块外部访问模块内部,使用exports对象,npm包管理工具package.json文件,模块对象属性,将模块定义分类,npm发布流程,安装淘宝镜像,模块的管理)

核心模块与文件模块 ndejs是一个js运行环境,是一个平台.nodejs基于操作系统,封装了一些功能,http,tcp,udp,i/o模块,path,fs,stream等等 通过nodejs内置的模块,他们就称为核心模块.(他们都是nodejs内置的)http,fs,path等 文件模块:只要写一个js文件,每一个文件都是模块 .(自己写的js文件都被称为文件模块) 核心模块和文件模块引入的区别 核心模块有环境变量做调度 文件模块需要给出文件路径 注意:核心模块是nodejs内置的一些功能模块

Maven项目不打包*.hbm.xml文件

<build> <finalName>basic</finalName> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <version>1.0-beta-1</version> <configuration>

maven包循环依赖。导致溢出定位加解决

通过命令 mvn denpendency:tree 可以打印出  当前工程的maven依赖路径 [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ bnq_worker ---[INFO] com.bnq:bnq_worker:war:1.0.0-SNAPSHOT[INFO] +- com.bnq:bnq_biz:jar:1.0-SNAPSHOT:compile[INFO] |  +- com.bnq:auth_client:j

将maven项目中的hbm.xml文件打入jar包中

方法一:本人实际操作过,好用 <build>           <finalName>basic</finalName>           <plugins>               <plugin>                   <groupId>org.codehaus.mojo</groupId>                   <artifactId>tomcat-maven-plug

XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。

XML DOM DOM 把 XML 文档视为一种树结构.通过这个 DOM 树,可以访问所有的元素.可以修改它们的内容(文本以及属性),而且可以创建新的元素.元素,以及它们的文本和属性,均被视为节点. 在本教程的较早章节中,我们介绍了 XML DOM,并使用了 XML DOM 的 getElementsByTagName() 从 DOM 树中取回数据. 在本节中,我们将讲解一些其他较常用的 XML DOM 方法.在本例中,我们使用 XML 文件 books.xml,并使用一个 JavaScript

07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao

 1  创建day14数据库,创建user.sql表: A 创建数据库 day14 B 创建数据表 users create table users ( id int primary keyauto_increment, username varchar(20), password varchar(20) ); 2  添加依赖的jar包 c3p0-0.9.1.2.jar mysql-connection-java-5.0.8-bin.jar commons-beanutils-1.8.0.j

Maven 教程(6)— Maven之pom.xml文件简单说明

原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79543963 通过前面几部分知识,我们对maven已经有了初步的印象,就像Make的Makefile.Ant的build.xml一样,Maven项目的核心是pom.xml.POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明依赖,等等.我们来看看maven中pom.xml文件主要标签的意思及其用法,来看一下pom.xm