最近入职了,在各个大牛微博看了些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的安装方式
1.需要准备的东西
(1) JDK
(2) Eclipse/intellij idea
(3) Maven程序包
2.下载与安装
(1)前往https://maven.apache.org/download.cgi下载最新版的Maven程序:
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目录下:
(3)新建环境变量MAVEN_HOME,赋值F:\apache-maven-3.6.(开发中环境变量可以不配置在开发工具中集成)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190915052839490.png
(4)编辑环境变量Path,追加%MAVEN_HOME%\bin;
(5)至此,maven已经完成了安装,我们可以通过DOS命令检查一下我们是否安装成功:
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会出现一些文件。
1、maven配置
首先需要在idea中对maven进行集成,目录为File>Setting>Build、Execution、Deployment>Build Tools>maven,若打开idea之前已经安装了maven,则idea会自动发现maven并进行关联,如下图:
并且需要注意maven的选相关配置:
Maven home directory:maven的安装目录
setting.xml:若项目中使用的maven私服则需要进行配置
maven respository:经常需要关注的maven仓库地址
2、import配置
maven下的import使用中经常需要关注的地方,目录File>Setting>Build、Execution、Deployment>Build Tools>maven>import,如下图:
import Maven project automatically:自动监控pom.xml的改动,并且进行导入maven依赖
Dependency Type:依赖类型
Automatically down(Sources、Documentation):是否自动下载源码和java doc文档(与eclipse中一致),我一般会进行勾选,这样查看源码非常方便
vm和jdk设置:需要时候可以进行设置
从settings.xml的文件名就可以看出,它是用来设置maven参数的配置文件。并且,settings.xml是maven的全局配置文件。而pom.xml文件是所在项目的局部配置。
Settings.xml中包含类似本地仓储位置、修改远程仓储服务器、认证信息等配置
需要注意的是:局部配置优先于全局配置。
配置优先级从高到低:pom.xml> user settings > global settings
如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。
<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>F:\maven-repositorylocalRepository>
作用:表示maven是否需要和用户交互以获得输入。
如果maven需要和用户交互以获得输入,则设置成true,反之则应为false。默认为true。
<interactiveMode>trueinteractiveMode>
作用:maven是否需要使用plugin-registry.xml文件来管理插件版本。
如果需要让maven使用文件~/.m2/plugin-registry.xml来管理插件版本,则设为true。默认为false。
<usePluginRegistry>falseusePluginRegistry>
作用:表示maven是否需要在离线模式下运行。
如果构建系统需要在离线模式下运行,则为true,默认为false。
当由于网络设置原因或者安全因素,构建服务器不能连接远程仓库的时候,该配置就十分有用。
<offline>falseoffline>
作用:当插件的组织id(groupId)没有显式提供时,供搜寻插件组织Id(groupId)的列表。该元素包含一个pluginGroup元素列表,每个子元素包含了一个组织Id(groupId)。当我们使用某个插件,并且没有在命令行为其提供组织Id(groupId)的时候,Maven就会使用该列表。默认情况下该列表包含了org.apache.maven.plugins和org.codehaus.mojo。
<pluginGroups>
<pluginGroup>org.codehaus.mojopluginGroup>
pluginGroups>
作用:一般,仓库的下载和部署是在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>
<mirror>
<id>planetmirror.comid>
<name>PlanetMirror Australianame>
<url>http://downloads.planetmirror.com/pub/maven2url>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
作用:用来配置不同的代理。
<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>
作用:根据环境参数来调整构建配置的列表。
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>
作用:自动触发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>
作用:对应profile的扩展属性列表。
maven属性和ant中的属性一样,可以用来存放一些值。这些值可以在pom.xml中的任何地方使用标记${X}来使用,这里X是指属性的名称。属性有五种不同的形式,并且都能在settings.xml文件中访问。
<properties>
<user.install>${user.home}/our-projectuser.install>
properties>
作用:远程仓库列表,它是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>
作用:发现插件的远程仓库列表。
和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>
作用:手动激活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>
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>
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
用于确定父项目的坐标。
<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>
用于定义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
配置写法同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>
这样的好处是,父项目统一了版本,而且子项目可以在需要的时候才引用对应的依赖
用于配置项目构建相关信息
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>
该元素描述使用报表插件产生报表的规范。当用户执行“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>
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>
目的问题管理系统(Bugzilla, Jira, Scarab)的名称和URL
227. <issueManagement>
228. <system>Bugzillasystem>
229. <url>http://127.0.0.1/bugzilla/url>
230. issueManagement>
system:系统类型
url:路径
项目的持续集成信息
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:扩展项
项目相关邮件列表信息
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:接收邮件的地址
允许你配置你的代码库,供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:共有仓库路径
项目构建的前提
265. <prerequisites>
266. <maven>2.0.6maven>
267. prerequisites>
依赖和扩展的远程仓库列表,同上篇文章,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。
它管理的分布在整个构建过程生成的工件和支持文件
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: 被核实时正确的和最终的
指定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
多分布存储库,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中的相同
重新部署-项目不是静态的,是活的。他们需要被搬到更合适的地方。如:当你的下个成功的开源项目移到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>
profile可以让我们定义一系列的配置信息(插件等),然后指定其激活条件
Maven共有6类属性:
${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>
${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}相同;
<properties>
<config.dir>localhostconfig.dir>
properties>
在其他地方使用${config.dir}使用该属性值。
settings.xml文件属性(与pom属性同理,用户使用以settings.开头的属性引用settings.xml文件中的XML元素值)
${settings.localRepository}表示本地仓库的地址;
使用mvn help:system命令可查看所有的Java系统属性;
System.getProperties()可得到所有的Java属性;
${user.home}表示用户目录;
使用mvn help:system命令可查看所有环境变量;
${env.JAVA_HOME}表示JAVA_HOME环境变量的值;
如有不完善或错误的地方谢谢大家指出☻