本文共 14994 字,大约阅读时间需要 49 分钟。
4.0.0
junit junit 4.0 jar test true groupId,artifactId和version这个三组合标示依赖的具体工程,而且这个依赖工程必须是maven中心包管理范围内的。如果碰上非开源包,maven支持不了这个包,那么则有三种方法处理:1.本地安装这个插件install plugin例如:
mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1
2.创建自己的Repositories并且部署这个包,使用类似上面的 [object Object]命令3.设置scope为system,并且指定系统路径,用于区分从同一个pom编译出来的但是内容不同的同名包,例如同一个工程编译出两个artifact,一个支持jdk1.5一个支持jdk1.4,那么就可以使用这个来命名为jdk15和jdk14来区分,它如果出现在包名中,那么它必须跟在版本号后。还有一种情况是将一个工程的一些次要artifact附到主要artifact中,就可以使用这个来区分,例如一个工程产生source,javadoc,class三种东西,那么就可以使用不同的classifier来分别标识这些东西 [object Object],默认为jar,类型,常用如:jar,ejb-client,test-jar,可以设置plugins中的extensions值为true后在增加新类型,指定classpath,可以为:compile(默认的,compile scope在所有classpaths内有效,这些dependencies将会传播到项目中。provided:指示jdk或者某个容器可以提供他,它只在compilation和test的classpaths有效,而且不会传播的。runtime:指示这个dependency在编译过程是不必要的,但是执行需要,在test和runtime的classpaths有效,在compile的classpaths无效。test:指示这个dependency在一般程序运行是无效的,但是在test的compilation和execution是有效的,system则跟provided类似,但是这种dependency必须人工明确地制定。这种依赖不会在repository中查找。:只在dependency的scope声明为system的时候才有用除,否则,build的过程将会失败。路径必须是绝对的,所以最好使用property来声明机器的特定路径。:如果工程本身是一个dependency那么就标记为optional,例如X需要A,A需要B,那么X只需要optional的B,则B在X中就是optional声明的了:如果X需要A,A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明exclusion。optional是不会install或者使用B,而exclusion是将B从依赖树中是删除。例如appfuse不想使用hibernate,但是appfuse是集成hibernate的,所以就排除掉: [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object][object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] --> [object Object] [object Object][object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]org.appfuse [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]appfuse-hibernate [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]... ... [object Object] [object Object] [object Object] project的描述工程的初始时间[object Object] [object Object] [object Object] [object Object] Apache 2 [object Object] [object Object] [object Object]http://www.apache.org/licenses/LICENSE-2.0.txt [object Object] [object Object] [object Object]repo [object Object] [object Object] [object Object]A business-friendly OSS license [object Object]
name, url and comments: are self explanatory, and have been encountered before in other capacities. The fourth license element is:
distribution: This describes how the project may be legally distributed. The two stated methods are repo (they may be downloaded from a Maven repository) or manual (they must be manually installed).
-->
<organization>...</organization><!-- <organization> <name>Codehaus Mojo</name> <url>http://mojo.codehaus.org</url> </organization> 很多工程都受到某些组织运行,这里设置基本信息 --><developers>...</developers> <!--例如:一个开发者可以有多个roles,properties是 <developers> <developer> <id>eric</id> <name>Eric</name> <email>eredmond@codehaus.org</email> <url>http://eric.propellors.net</url> <organization>Codehaus</organization> <organizationUrl>http://mojo.codehaus.org</organizationUrl> <roles> <role>architect</role> <role>developer</role> </roles> <timezone>-6</timezone> <properties> <picUrl>http://tinyurl.com/prv4t</picUrl> </properties> </developer> </developers> --><contributors>...</contributors><ciManagement>
<system>continuum</system> <url>http://127.0.0.1:8080/continuum</url> <notifiers> <notifier> <type>mail</type> <sendOnError>true</sendOnError> <sendOnFailure>true</sendOnFailure> <sendOnSuccess>false</sendOnSuccess> <sendOnWarning>false</sendOnWarning> <configuration><address>continuum@127.0.0.1</address></configuration> </notifier> </notifiers> </ciManagement>maven捕获一些经常重发生的配置,在notifier元素里配置。A notifier is the manner in which people are notified of certain build statuses. In the following example, this POM is setting a notifier of type mail (meaning email), and configuring the email address to use on the specified triggers sendOnError,sendOnFailure, and not sendOnSuccess or sendOnWarning.
--><mailingLists>...</mailingLists>subscribe,
unsubscribe: There elements specify the email addresses which are used for performing the relative actions To subscribe to the user list above, a user would send an email to user-subscribe@127.0.0.1.
archive: This element specifies the url of the archive of old mailing list emails, if one exists. If there are mirrored archives, they can be specified under otherArchives.
post: The email address which one would use in order to post to the mailing list. Note that not all mailing lists have the ability to post to (such as a build failure list).
--><scm>...</scm><!--例如:
<scm> <connection>scm:svn:http://127.0.0.1/svn/my-project</connection> <developerConnection>scm:svn:https://127.0.0.1/svn/my-project</developerConnection> <tag>HEAD</tag> <url>http://127.0.0.1/websvn/my-project</url> </scm>connection, developerConnection: 都是连接字符串,其中后者是具有write权限的scm连接,常用的scm工具包括cvs与subversion,还有其他,url的字符串格式是:scm:[provider]:[provider_specific],例如cvs的是scm:cvs:pserver:127.0.0.1:/cvs/root:my-projecttag:说明project所在的目录tag,默认是HEAD,表示根目录url:公开的可浏览repository --><prerequisites>...</prerequisites>
<!--首要条件,如果不满足,maven会在事件开始之前失败,在pom4.0,唯一的首要条件是maven元素--><repositories>...</repositories> <!--要成为maven2的repository artifact,必须具有pom文件在$BASE_REPO/groupId/artifactId/version/artifactId-version.pomBASE_REPO可以是本地,也可以是远程的。repository元素就是声明那些去查找的repositories它包含可选的activation(profile的触发器)和一系列的changes。例如test过程可能会指向不同的数据库(相对最终的deployment)或者不同的dependencies或者不同的repositories,并且是根据不同的JDK来改变的。那么结构如下:
[object Object]<profiles> [object Object] [object Object] [object Object]<profile> [object Object] [object Object] [object Object] [object Object] [object Object]<id>test</id> [object Object] [object Object] [object Object] [object Object] [object Object]<activation>...</activation> [object Object] [object Object] [object Object] [object Object] [object Object]<build>...</build> [object Object] [object Object] [object Object] [object Object] [object Object]<modules>...</modules> [object Object] [object Object] [object Object] [object Object] [object Object]<repositories>...</repositories> [object Object] [object Object] [object Object] [object Object] [object Object]<pluginRepositories>...</pluginRepositories> [object Object] [object Object] [object Object] [object Object] [object Object]<dependencies>...</dependencies> [object Object] [object Object] [object Object] [object Object] [object Object]<reporting>...</reporting> [object Object] [object Object] [object Object] [object Object] [object Object]<dependencyManagement>...</dependencyManagement> [object Object] [object Object] [object Object] [object Object] [object Object]<distributionManagement>...</distributionManagement> [object Object] [object Object] [object Object]</profile> [object Object]</profiles> [object Object]: 触发这个profile的条件配置如下例:(只需要其中一个成立就可以激活profile,如果第一个条件满足了,那么后面就不会在进行匹配。 [object Object] [object Object] [object Object]<profile> [object Object] [object Object] [object Object] [object Object] [object Object]<id>test</id> [object Object] [object Object] [object Object] [object Object] [object Object]<activation> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<activeByDefault>false</activeByDefault> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<jdk>1.5</jdk> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<os> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<name>Windows XP</name> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<family>Windows</family> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<arch>x86</arch> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<version>5.1.2600</version> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]</os> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<property> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<name>mavenVersion</name> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<value>2.0.3</value> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]</property> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<file> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<exists>${basedir}/file2.properties</exists> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]<missing>${basedir}/file1.properties</missing> [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]</file> [object Object] [object Object] [object Object] [object Object] [object Object]</activation> --> 激活profile的方法有多个:setting文件的activeProfile元素明确指定激活的profile的ID,在命令行上明确激活Profile用-P flag 参数 查看某个build会激活的profile列表可以用:mvn help:active-profiles</project>
本文转自yunlielai51CTO博客,原文链接:http://blog.51cto.com/4925054/1176256,如需转载请自行联系原作者