浅谈maven

浅谈maven

最近入职了,在各个大牛微博看了些maven的知识点,总结了一下,如有错误请各位指出,我会第一时间改正。谢谢大家提出宝贵意见。

一、maven介绍

maven是一个跨平台的项目管理的工具。隶属于Apache下的一个开源项目。主要服务于Java平台的项目构建、依赖管理、项目信息管理等。
apache maven是一个软件项目管理和理解工具。基于项目对象模型(pom)的概念,maven可以从中心信息管理项目的构建、报告和文档。
在不用Maven的时候学习,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如log4j.jar,junit.jar等等。每建立一个项目,你都需要建立这样的一个/lib目录,然后复制一对jar文件,这是很明显的重复。重复永远是噩梦的起点,多个项目不共用相同的jar文件,不仅会造成磁盘资源的浪费,也使得版本的一致性管理变得困难。此外,如果你使用版本管理工具,如SVN,你需要将大量的jar文件提交到代码库里,可是版本管理工具在处理二进制文件方面并不出色。
Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,这节省了磁盘资源。此外,由于Maven仓库中所有的JAR都有其自己的坐标,该坐标告诉Maven它的组ID,构件ID,版本,打包方式等等,因此Maven项目可以方便的进行依赖版本管理。你也不在需要提交JAR文件到SCM仓库中,你可以建立一个组织层次的Maven仓库,供所有成员使用。
简言之,Maven仓库能帮助我们管理构件(主要是JAR)还有一点需要理解的是,当我们运行install的时候,Maven实际上是将项目生成的构件安装到了本地仓库,也就是说,只有install了之后,其它项目才能使用此项目生成的构件。
下面来讲讲maven的安装方式

二、maven的安装

1.需要准备的东西
(1) JDK
(2) Eclipse/intellij idea
(3) Maven程序包
2.下载与安装
(1)前往https://maven.apache.org/download.cgi下载最新版的Maven程序:浅谈maven_第1张图片
Binary tar.gz archive-------适用于Linux、MacOsX系统的二进制安装工具。
Binary zip archive-------适用于Windows系统的二进制安装工具。
Source tar.gz archive -------Linux系统下的源码
Source zip archive-------Windows系统下的源码
source表示可以查看源代码的,比binary大一些,如果你想看一下maven的源码可以下载这一类的 .
binary表示编译后的二进制文件,一般比较小,适合直接在项目中使用
(2)将文件解压到F:\apache-maven-3.6.2目录下:
浅谈maven_第2张图片
(3)新建环境变量MAVEN_HOME,赋值F:\apache-maven-3.6.(开发中环境变量可以不配置在开发工具中集成)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190915052839490.png
(4)编辑环境变量Path,追加%MAVEN_HOME%\bin;
浅谈maven_第3张图片
(5)至此,maven已经完成了安装,我们可以通过DOS命令检查一下我们是否安装成功:
浅谈maven_第4张图片

3.配置Maven本地仓库
(1)在F:\目录下新建maven-repository文件夹,该目录用作maven的本地库。
(2)打开F:\apache-maven-3.6.2\conf\settings.xml文件,查找下面这行代码:

<localRepository>/path/to/local/repolocalRepository> 

localRepository节点默认是被注释掉的,需要把它移到注释之外,然后将localRepository节点的值改为我们在3.1中创建的目录F:\maven-repository
(3)localRepository节点用于配置本地仓库,本地仓库其实起到了一个缓存的作用,它的默认地址是 C:\Users\用户名.m2。
当我们从maven中获取jar包的时候,maven首先会在本地仓库中查找,如果本地仓库有则返回;如果没有则从远程仓库中获取包,并在本地库中保存。
此外,我们在maven项目中运行mvn install,项目将会自动打包并安装到本地仓库中。
(4)运行一下DOS命令
mvn help:system
如果前面的配置成功,那么maven-repository会出现一些文件。

三、Intellij idea中的maven配置

1、maven配置
首先需要在idea中对maven进行集成,目录为File>Setting>Build、Execution、Deployment>Build Tools>maven,若打开idea之前已经安装了maven,则idea会自动发现maven并进行关联,如下图:
浅谈maven_第5张图片
并且需要注意maven的选相关配置:
Maven home directory:maven的安装目录
setting.xml:若项目中使用的maven私服则需要进行配置
maven respository:经常需要关注的maven仓库地址
2、import配置
maven下的import使用中经常需要关注的地方,目录File>Setting>Build、Execution、Deployment>Build Tools>maven>import,如下图:
浅谈maven_第6张图片
import Maven project automatically:自动监控pom.xml的改动,并且进行导入maven依赖
Dependency Type:依赖类型
Automatically down(Sources、Documentation):是否自动下载源码和java doc文档(与eclipse中一致),我一般会进行勾选,这样查看源码非常方便
vm和jdk设置:需要时候可以进行设置

四、maven中的settings.xml和pom.xml文件

1、settings.xml文件是干什么的,为什么要配置它呢?

从settings.xml的文件名就可以看出,它是用来设置maven参数的配置文件。并且,settings.xml是maven的全局配置文件。而pom.xml文件是所在项目的局部配置。
Settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置

(1)配置优先级

需要注意的是:局部配置优先于全局配置。
配置优先级从高到低:pom.xml> user settings > global settings
如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。

(2)settings.xml元素详解顶级元素概览

   
  
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0http://maven.apache.org/xsd/settings-1.0.0.xsd">
	<localRepository>E:\maven-repositorylocalRepository>
	<interactiveMode>trueinteractiveMode>
	<usePluginRegistry>falseusePluginRegistry>
	<offline>falseoffline>
	<pluginGroups/>
	<proxies/>
	<servers/>
	<mirrors/> 
	<profiles/>
	<activeProfiles/>
settings>  
LocalRepository

作用:该值表示构建系统本地仓库的路径。

    
<localRepository>F:\maven-repositorylocalRepository>  
InteractiveMode

作用:表示maven是否需要和用户交互以获得输入。
如果maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。

  
<interactiveMode>trueinteractiveMode>  
usePluginRegistry

作用:maven是否需要使用plugin-registry.xml文件来管理插件版本。
如果需要让maven使用文件~/.m2/plugin-registry.xml来管理插件版本,则设为true。默认为false。

  
<usePluginRegistry>falseusePluginRegistry>  
Offline

作用:表示maven是否需要在离线模式下运行。
如果构建系统需要在离线模式下运行,则为true,默认为false。
当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。

  
<offline>falseoffline>  
PluginGroups

作用:当插件的组织id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表。该元素包含一个pluginGroup元素列表,每个子元素包含了一个组织Id(groupId)。当我们使用某个插件,并且没有在命令行为其提供组织Id(groupId)的时候,Maven就会使用该列表。默认情况下该列表包含了org.apache.maven.plugins和org.codehaus.mojo。

  
<pluginGroups>  
	  
	<pluginGroup>org.codehaus.mojopluginGroup>  
pluginGroups>  
servers

作用:一般,仓库的下载和部署是在pom.xml文件中的repositories和distributionManagement元素中定义的。然而,一般类似用户名、密码(有些仓库访问是需要安全认证的)等信息不应该在pom.xml文件中配置,这些信息可以配置在settings.xml中。

  
<servers>  
	  
	<server>  
		  
		<id>server001id>  
		  
		<username>my_loginusername>  
		  
		<password>my_passwordpassword>  
		  
		<privateKey>${usr.home}/.ssh/id_dsaprivateKey>  
		  
		<passphrase>some_passphrasepassphrase>  
		  
		<filePermissions>664filePermissions>  
		  
		<directoryPermissions>775directoryPermissions>  
	server>  
servers>
mirrors

作用:为仓库列表配置的下载镜像列表。

<mirrors>  
	  
	<mirror>  
 		  
		<id>planetmirror.comid>  
		  
		<name>PlanetMirror Australianame>  
		  
		<url>http://downloads.planetmirror.com/pub/maven2url>  
		  
		<mirrorOf>centralmirrorOf>  
	mirror>  
mirrors>  
proxies

作用:用来配置不同的代理。

<proxies>  
	  
	<proxy>  
		  
		<id>myproxyid>  
		  
		<active>trueactive>  
		  
		<protocol>httpprotocol>  
		  
		<host>proxy.somewhere.comhost>  
		  
		<port>8080port>  
		  
		<username>proxyuserusername>  
		  
		<password>somepasswordpassword>  
		  
		<nonProxyHosts>*.google.com|ibiblio.orgnonProxyHosts>  
	proxy>  
proxies>  
profiles

作用:根据环境参数来调整构建配置的列表。
settings.xml中的profile元素是pom.xml中profile元素的裁剪版本。
它包含了id、activation、repositories、pluginRepositories和 properties元素。这里的profile元素只包含这五个子元素是因为这里只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings.xml中的profile被激活,它的值会覆盖任何其它定义在pom.xml中带有相同id的profile。

<profiles>  
	<profile>  
 		  
		<id>testid>  
		  
		<activation />  
		  
		<properties />  
		  
		<repositories />  
		  
		<pluginRepositories />  
	profile>  
profiles>  
activation

作用:自动触发profile的条件逻辑。
如pom.xml中的profile一样,profile的作用在于它能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。
activation元素并不是激活profile的唯一方式。settings.xml文件中的activeProfile元素可以包含profile的id。profile也可以通过在命令行,使用-P标记和逗号分隔的列表来显式的激活(如,-P test)。

<activation>  
	  
	<activeByDefault>falseactiveByDefault>  
	  
	<jdk>1.8jdk>  
	  
	<os>  
		  
		<name>Windows 10name>  
		  
		<family>Windowsfamily>  
		  
		<arch>x64arch>  
		  
		<version>version>  
	os>  
	  
	<property>  
		  
		<name>mavenVersionname>  
		  
		<value>3value>  
	property>  
		  
	<file>  
		  
		<exists>${basedir}/file2.propertiesexists>  
		  
		<missing>${basedir}/file1.propertiesmissing>  
	file>  
activation>  
properties

作用:对应profile的扩展属性列表。
maven属性和ant中的属性一样,可以用来存放一些值。这些值可以在pom.xml中的任何地方使用标记${X}来使用,这里X是指属性的名称。属性有五种不同的形式,并且都能在settings.xml文件中访问。

  
<properties>  
	<user.install>${user.home}/our-projectuser.install>  
properties>  
repositories

作用:远程仓库列表,它是maven用来填充构建系统本地仓库所使用的一组远程仓库。

<repositories>  
	  
	<repository>  
		  
		<id>codehausSnapshotsid>  
		  
		<name>Codehaus Snapshotsname>  
		  
		<releases>  
			  
			<enabled>falseenabled>  
			  
			<updatePolicy>alwaysupdatePolicy>  
			  
			<checksumPolicy>warnchecksumPolicy>  
		releases>  
		  
		<snapshots>  
			<enabled />  
			<updatePolicy />  
			<checksumPolicy />  
		snapshots>  
		  
		<url>http://snapshots.maven.codehaus.org/maven2url>  
		  
		<layout>defaultlayout>  
	repository>  
repositories>  
pluginRepositories

作用:发现插件的远程仓库列表。
和repository类似,只是repository是管理jar包依赖的仓库,pluginRepositories则是管理插件的仓库。
maven插件是一种特殊类型的构件。由于这个原因,插件仓库独立于其它仓库。pluginRepositories元素的结构和repositories元素的结构类似。每个pluginRepository元素指定一个Maven可以用来寻找新插件的远程地址。

<pluginRepositories>  
	  
	<pluginRepository>  
		<releases>  
			<enabled />  
			<updatePolicy />  
			<checksumPolicy />  
		releases>  
		<snapshots>  
			<enabled />  
			<updatePolicy />  
			<checksumPolicy />  
		snapshots>  
		<id />  
		<name />  
		<url />  
		<layout />  
	pluginRepository>  
pluginRepositories>  
activeProfiles

作用:手动激活profiles的列表,按照profile被应用的顺序定义activeProfile。
该元素包含了一组activeProfile元素,每个activeProfile都含有一个profile id。任何在activeProfile中定义的profile id,不论环境设置如何,其对应的 profile都会被激活。如果没有匹配的profile,则什么都不会发生。
例如,env-test是一个activeProfile,则在pom.xml(或者profile.xml)中对应id的profile会被激活。如果运行过程中找不到这样一个profile,Maven则会像往常一样运行。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">  
	<activeProfiles>  
		  
		<activeProfile>env-testactiveProfile>  
	activeProfiles>  
settings>  

2、pom.xml文件是干什么的?

pom.xml描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。(新建maven项目后生成目录下生成的pom.xml都继承于超级POM位置在maven根目录/lib/maven-model-builder-3.6.2中org\apache\maven\model\ pom-4.0.0.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.0modelVersion>  
	<groupId>...groupId>  
	<artifactId>...artifactId>  
	<version>...version>  
	<packaging>...packaging> 
	  
	<dependencies>...dependencies>  
	<parent>...parent>  
	<dependencyManagement>...dependencyManagement>  
	<modules>...modules>  
	<properties>...properties>
	  
	<build>...build>  
	<reporting>...reporting>
	  
	<name>...name>  
	<description>...description>  
	<url>...url>  
	<inceptionYear>...inceptionYear>  
	<licenses>...licenses>  
	<organization>...organization>  
	<developers>...developers>  
	<contributors>...contributors>
	  
	<issueManagement>...issueManagement>  
	<ciManagement>...ciManagement>  
	<mailingLists>...mailingLists>  
	<scm>...scm>  
	<prerequisites>...prerequisites>  
	<repositories>...repositories>  
	<pluginRepositories>...pluginRepositories>  
	<distributionManagement>...distributionManagement>  
	<profiles>...profiles>  
project>  

(1)基本配置

modelVersion:pom模型版本,maven2和3只能为4.0.0
groupId:组ID,maven用于定位
artifactId:在组中的唯一ID用于定位
version:项目版本
packaging:项目打包方式,有以下值:pom, jar, maven-plugin, ejb, war, ear, rar, par在J2EE项目中使用war

(2)依赖配置

parent

用于确定父项目的坐标。

<parent>  
	<groupId>mobi.sunfield.apple.mycoachgroupId>  
	<artifactId>mobi.sunfield.apple.mycoachartifactId>  
	<version>1.0.1.53-SNAPSHOTversion>  
	<relativePath>../relativePath>  
parent>  

groupId:父项目的构件标识符
artifactId:父项目的唯一标识符
relativePath:Maven首先在当前项目的找父项目的pom,然后在文件系统的这个位置(relativePath),然后在本地仓库,再在远程仓库找。
version:父项目的版本
modules
有些maven项目会做成多模块的,这个标签用于指定当前项目所包含的所有模块。之后对这个项目进行的maven操作,会让所有子模块也进行相同操作。

<modules>  
	<module>servicemodule>  
	<module>apimodule>  
	<module>icoachmodule>  
	<module>rest.mycoachmodule>  
	<module>rest.icoachmodule>  
	<module>restmodule>   
	<module>rest.reservationmodule>   
	<module>managementmodule>  
	<module>openapimodule>  
	<module>scheduletaskermodule>  
	<module>dataanalyzemodule>  
	<module>activitymodule>  
modules>  
properties

用于定义pom常量

<properties>  
6.	    <java.version>1.8/java.version>  
properties>  

上面这个常量可以在pom文件的任意地方通过${java.version}来引用
dependencies
项目相关依赖配置,如果在父项目写的依赖,会被子项目引用,一般父项目会将子项目公用的依赖引入

7.	<dependencies>  
8.	    <dependency>  
9.	            <groupId>junitgroupId>  
10.	            <artifactId>junitartifactId>  
11.	            <version>4.12version>  
12.	    dependency>  
13.	dependencies>

这边依赖和中央仓库中的一致,就可以引入对应的jar

dependencyManagement

配置写法同dependencies

14.	<dependencyManagement>  
15.	    <dependencies>  
16.	    .....  
17.	    dependencies>  
18.	dependencyManagement>  

在父模块中定义后,子模块不会直接使用对应依赖,但是在使用相同依赖的时候可以不加版本号:
父项目:

19.	<dependencyManagement>  
20.	    <dependencies>  
21.	        <dependency>  
22.	            <groupId>junitgroupId>  
23.	            <artifactId>junitartifactId>  
24.	            <version>4.12version>  
25.	            <scope>testscope>  
26.	        dependency>  
27.	    dependencies>  
28.	dependencyManagement> 

子项目:

29.	<dependency>  
30.	    <groupId>junitgroupId>  
31.	    <artifactId>junitartifactId>  
32.	dependency>  

这样的好处是,父项目统一了版本,而且子项目可以在需要的时候才引用对应的依赖

(3)构建配置

build

用于配置项目构建相关信息

33.	<build>  
34.	      
35.	    <sourceDirectory />  
36.	      
37.	    <scriptSourceDirectory />  
38.	      
39.	    <testSourceDirectory />  
40.	      
41.	    <outputDirectory />  
42.	      
43.	    <testOutputDirectory />  
44.	      
45.	    <extensions>  
46.	          
47.	        <extension>  
48.	              
49.	            <groupId />  
50.	              
51.	            <artifactId />  
52.	              
53.	            <version />  
54.	        extension>  
55.	    extensions>  
56.	      
57.	    <defaultGoal />  
58.	      
59.	    <resources>  
60.	          
61.	        <resource>    
62.	            <targetPath />  
63.	              
64.	            <filtering />  
65.	              
66.	            <directory />  
67.	              
68.	            <includes />  
69.	              
70.	            <excludes />  
71.	        resource>  
72.	    resources>  
73.	      
74.	    <testResources>  
75.	          
76.	        <testResource>  
77.	            <targetPath />  
78.	            <filtering />  
79.	            <directory />  
80.	            <includes />  
81.	            <excludes />  
82.	        testResource>  
83.	    testResources>  
84.	      
85.	    <directory />  
86.	      
87.	    <finalName />  
88.	      
89.	    <filters />  
90.	      
91.	    <pluginManagement>  
92.	          
93.	        <plugins>  
94.	              
95.	            <plugin>  
96.	                  
97.	                <groupId />  
98.	                  
99.	                <artifactId />  
100.	                  
101.	                <version />  
102.	                  
103.	                <extensions />  
104.	                  
105.	                <executions>  
106.	                      
107.	                    <execution>  
108.	                          
109.	                        <id />  
110.	                          
111.	                        <phase />  
112.	                          
113.	                        <goals />  
114.	                          
115.	                        <inherited />  
116.	                          
117.	                        <configuration />  
118.	                    execution>  
119.	                executions>  
120.	                  
121.	                <dependencies>  
122.	                      
123.	                    <dependency>  
124.	                        ......  
125.	                    dependency>  
126.	                dependencies>  
127.	                  
128.	                <inherited />  
129.	                  
130.	                <configuration />  
131.	            plugin>  
132.	        plugins>  
133.	    pluginManagement>  
134.	      
135.	    <plugins>  
136.	          
137.	        <plugin>  
138.	            <groupId />  
139.	            <artifactId />  
140.	            <version />  
141.	            <extensions />  
142.	            <executions>  
143.	                <execution>  
144.	                    <id />  
145.	                    <phase />  
146.	                    <goals />  
147.	                    <inherited />  
148.	                    <configuration />  
149.	                execution>  
150.	            executions>  
151.	            <dependencies>  
152.	                  
153.	                <dependency>  
154.	                    ......  
155.	                dependency>  
156.	            dependencies>  
157.	            <goals />  
158.	            <inherited />  
159.	            <configuration />  
160.	        plugin>  
161.	    plugins>  
162.	build>
reporting

该元素描述使用报表插件产生报表的规范。当用户执行“mvn site”,这些
表就会运行。 在页面导航栏能看到所有报表的链接。

163.	<reporting>  
164.	      
165.	    <excludeDefaults />  
166.	      
167.	    <outputDirectory />  
168.	      
169.	    <plugins>  
170.	          
171.	        <plugin>  
172.	              
173.	            <groupId />  
174.	              
175.	            <artifactId />  
176.	              
177.	            <version />  
178.	              
179.	            <inherited />  
180.	              
181.	            <configuration />  
182.	          
183.	            <reportSets>  
184.	                  
185.	                <reportSet>  
186.	                      
187.	                    <id />  
188.	                      
189.	                    <configuration />  
190.	                      
191.	                    <inherited />  
192.	                      
193.	                    <reports />  
194.	                reportSet>  
195.	            reportSets>  
196.	        plugin>  
197.	    plugins>  
198.	reporting>

(4)项目信息配置(不重要)

name:给用户提供更为友好的项目名
description:项目描述,maven文档中保存
url:主页的URL,maven文档中保存
inceptionYear:项目创建年份,4位数字。当产生版权信息时需要使用这个值
licenses:该元素描述了项目所有License列表。 应该只列出该项目的license列表,不要列出依赖项目的 license列表。如果列出多个license,用户可以选择它们中的一个而不是接受所有license。(如下)

<license><name>...name><url>....url><distribution>repodistribution><comments>....comments>license>   

organization:1.name 组织名 2.url 组织主页url
developers:项目开发人员列表(如下)
contributors:项目其他贡献者列表,同developers

199.	<developers>    
200.	      
201.	    <developer>    
202.	          
203.	        <id>....id>    
204.	          
205.	        <name>...name>    
206.	          
207.	        <email>...email>    
208.	          
209.	        <url>...<url/>  
210.	          
211.	        <roles>    
212.	            <role>Java Devrole>    
213.	            <role>Web UIrole>    
214.	        roles>   
215.	           
216.	        <organization>sunorganization>    
217.	          
218.	        <organizationUrl>...organizationUrl>    
219.	          
220.	        <properties>  
221.	              
222.	        properties>   
223.	           
224.	        <timezone>-5timezone>    
225.	    developer>    
226.	developers>    

(5)环境设置

issueManagement

目的问题管理系统(Bugzilla, Jira, Scarab)的名称和URL

227.	<issueManagement>  
228.	    <system>Bugzillasystem>  
229.	    <url>http://127.0.0.1/bugzilla/url>  
230.	issueManagement>  

system:系统类型
url:路径

ciManagement

项目的持续集成信息

231.	<ciManagement>  
232.	    <system>continuumsystem>  
233.	    <url>http://127.0.0.1:8080/continuumurl>  
234.	    <notifiers>  
235.	        <notifier>  
236.	            <type>mailtype>  
237.	            <sendOnError>truesendOnError>  
238.	            <sendOnFailure>truesendOnFailure>  
239.	            <sendOnSuccess>falsesendOnSuccess>  
240.	            <sendOnWarning>falsesendOnWarning>  
241.	            <address>[email protected]address>  
242.	            <configuration>configuration>  
243.	        notifier>  
244.	    notifiers>  
245.	ciManagement>  

system:持续集成系统的名字
url:持续集成系统的URL
notifiers:构建完成时,需要通知的开发者/用户的配置项。包括被通知者信息和通知条件(错误,失败,成功,警告)
type:通知方式
sendOnError:错误时是否通知
sendOnFailure:失败时是否通知
sendOnSuccess:成功时是否通知
sendOnWarning:警告时是否通知
address:通知发送到的地址
configuration:扩展项

mailingLists

项目相关邮件列表信息

246.	<mailingLists>  
247.	    <mailingList>  
248.	        <name>User Listname>  
249.	        <subscribe>[email protected]subscribe>  
250.	        <unsubscribe>[email protected]unsubscribe>  
251.	        <post>[email protected]post>  
252.	        <archive>http://127.0.0.1/user/archive>  
253.	        <otherArchives>  
254.	            <otherArchive>http://base.google.com/base/1/127.0.0.1otherArchive>  
255.	        otherArchives>  
256.	    mailingList>  
257.	    .....  
258.	mailingLists>  

subscribe, unsubscribe: 订阅邮件(取消订阅)的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建
archive:浏览邮件信息的URL
post:接收邮件的地址

scm

允许你配置你的代码库,供Maven web站点和其它插件使用

259.	<scm>  
260.	    <connection>scm:svn:http://127.0.0.1/svn/my-projectconnection>  
261.	    <developerConnection>scm:svn:https://127.0.0.1/svn/my-projectdeveloperConnection>  
262.	    <tag>HEADtag>  
263.	    <url>http://127.0.0.1/websvn/my-projecturl>  
264.	scm>  

connection, developerConnection:这两个表示我们如何连接到maven的版本库。connection只提供读,developerConnection将提供写的请求
写法如:scm:[provider]:[provider_specific]
如果连接到CVS仓库,可以配置如下:scm:cvs:pserver:127.0.0.1:/cvs/root:my-project
tag:项目标签,默认HEAD
url:共有仓库路径

prerequisites

项目构建的前提

265.	<prerequisites>  
266.	    <maven>2.0.6maven>  
267.	prerequisites>  
repositories,pluginRepositories

依赖和扩展的远程仓库列表,同上篇文章,setting.xml配置中介绍的。

268.	<repositories>  
269.	    <repository>  
270.	        <releases>  
271.	            <enabled>falseenabled>  
272.	            <updatePolicy>alwaysupdatePolicy>  
273.	            <checksumPolicy>warnchecksumPolicy>  
274.	        releases>  
275.	        <snapshots>  
276.	            <enabled>trueenabled>  
277.	            <updatePolicy>neverupdatePolicy>  
278.	            <checksumPolicy>failchecksumPolicy>  
279.	        snapshots>  
280.	        <id>codehausSnapshotsid>  
281.	        <name>Codehaus Snapshotsname>  
282.	        <url>http://snapshots.maven.codehaus.org/maven2url>  
283.	        <layout>defaultlayout>  
284.	    repository>  
285.	repositories>  
286.	<pluginRepositories>  
287.	    ...  
288.	pluginRepositories>  

releases, snapshots:这是各种构件的策略,release或者snapshot。这两个集合,POM就可以根据独立仓库任意类型的依赖改变策略。如:一个人可能只激活下载snapshot用来开发。
enable:true或者false,决定仓库是否对于各自的类型激活(release 或者 snapshot)。
updatePolicy: 这个元素决定更新频率。maven将比较本地pom的时间戳(存储在仓库的maven数据文件中)和远程的. 有以下选择: always, daily (默认), interval:X (x是代表分钟的整型) , never.
checksumPolicy:当Maven向仓库部署文件的时候,它也部署了相应的校验和文件。可选的为:ignore,fail,warn,或者不正确的校验和。
layout:在上面描述仓库的时候,提到他们有统一的布局。Maven 2有它仓库默认布局。然而,Maven 1.x有不同布局。使用这个元素来表明它是default还是legacy。

distributionManagement

它管理的分布在整个构建过程生成的工件和支持文件

289.	<distributionManagement>  
290.	    ...  
291.	    <downloadUrl>http://mojo.codehaus.org/my-projectdownloadUrl>  
292.	    <status>deployedstatus>  
293.	distributionManagement>  

downloadUrl: 其他pom可以通过此url的仓库抓取组件
status:给出该构件在远程仓库的状态
none: 默认
converted: 将被早期Maven 2 POM转换过来
partner: 这个项目会从合作者仓库同步过来
deployed: 从Maven 2或3实例部署
verified: 被核实时正确的和最终的

repository

指定Maven pom从远程下载控件到当前项目的位置和方式,如果snapshotRepository没有被定义则使用repository相关的配置

295.	<distributionManagement>  
296.	    <repository>  
297.	        <uniqueVersion>falseuniqueVersion>  
298.	        <id>corp1id>  
299.	        <name>Corporate Repositoryname>  
300.	        <url>scp://repo/maven2url>  
301.	        <layout>defaultlayout>  
302.	    repository>  
303.	    <snapshotRepository>  
304.	        <uniqueVersion>trueuniqueVersion>  
305.	        <id>propSnapid>  
306.	        <name>Propellors Snapshotsname>  
307.	        <url>sftp://propellers.net/mavenurl>  
308.	        <layout>legacylayout>  
309.	    snapshotRepository>  
310.	    ...  
311.	distributionManagement>  

id, name:仓库的唯一标识
uniqueVersion:true或false,指明控件部署的时候是否获取独立的版本号。
url:repository元素的核心。指定位置和部署协议发布控件到仓库。
layout:布局,default或legacy

site Distribution

多分布存储库,distributionManagement负责定义如何部署项目的网站和文档。

1.	<distributionManagement>  
2.	    ...  
3.	    <site>  
4.	      <id>mojo.websiteid>  
5.	      <name>Mojo Websitename>  
6.	      <url>scp://beaver.codehaus.org/home/projects/mojo/public_html/url>  
7.	    site>  
8.	    ...  
9.	distributionManagement>  

id, name, url: 这些元素与distributionManagement repository中的相同

relocation

重新部署-项目不是静态的,是活的。他们需要被搬到更合适的地方。如:当你的下个成功的开源项目移到Apache下,重命名为org.apache:my-project:1.0 对你项目更有好处。

1.	<distributionManagement>  
2.	    ...  
3.	    <relocation>  
4.	      <groupId>org.apachegroupId>  
5.	      <artifactId>my-projectartifactId>  
6.	      <version>1.0version>  
7.	      <message>We have moved the Project under Apachemessage>  
8.	    relocation>  
9.	    ...  
10.	distributionManagement>  
profiles

profile可以让我们定义一系列的配置信息(插件等),然后指定其激活条件

五、maven中的属性

Maven共有6类属性:

1、内置属性(Maven预定义,用户可以直接使用)

${basedir}表示项目根目录,即包含pom.xml文件的目录;
${version}表示项目版本;
p r o j e c t . b a s e d i r 同 {project.basedir}同 project.basedir{basedir};
${project.baseUri}表示项目文件地址;
${maven.build.timestamp}表示项目构件开始时间;
m a v e n . b u i l d . t i m e s t a m p . f o r m a t 表 示 属 性 {maven.build.timestamp.format}表示属性 maven.build.timestamp.format{maven.build.timestamp}的展示格式,默认值为yyyyMMdd-HHmm,可自定义其格式,其类型可参考java.text.SimpleDateFormat。用法如下:

1.	<properties>  
2.	<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ssmaven.build.timestamp.format>  
3.	properties>  

2、POM属性(使用pom属性可以引用到pom.xml文件对应元素的值)

${project.build.directory}表示主源码路径;
${project.build.sourceEncoding}表示主源码的编码格式;
${project.build.sourceDirectory}表示主源码路径;
${project.build.finalName}表示输出文件名称;
p r o j e c t . v e r s i o n 表 示 项 目 版 本 , 与 {project.version}表示项目版本,与 project.version,{version}相同;

3、自定义属性(在pom.xml文件的标签下定义的Maven属性)

<properties>  
   <config.dir>localhostconfig.dir>  
properties>  

在其他地方使用${config.dir}使用该属性值。
settings.xml文件属性(与pom属性同理,用户使用以settings.开头的属性引用settings.xml文件中的XML元素值)
${settings.localRepository}表示本地仓库的地址;

4、Java系统属性(所有的Java系统属性都可以使用Maven属性引用)

使用mvn help:system命令可查看所有的Java系统属性;
System.getProperties()可得到所有的Java属性;
${user.home}表示用户目录;

5、环境变量属性(所有的环境变量都可以用以env.开头的Maven属性引用)

使用mvn help:system命令可查看所有环境变量;
${env.JAVA_HOME}表示JAVA_HOME环境变量的值;

如有不完善或错误的地方谢谢大家指出☻

你可能感兴趣的:(java,maven,web,java)