Maven —— 二、大体认识pom.xml 中元素

Maven 的思想就是把每一个项目都当成一个对象来对待,每个项目都对应一个pom.xml文件,该文件描述了此项目的继承信息、依赖信息、项目对象名、版本等信息。而Maven 通过读取pom.xml文件,来处理各项目之间的协作关系。所以熟悉pom.xml 文件对使用Maven 特别重要。


介绍Maven 的文章很多,谈的也比较深入,作为一个基础使用者,我可能没太多精力去关注设计理念方面的东西,只想谈谈自己的粗浅认识。就拿pom.xml文件来说,里面最重要的配置有依赖配置(<dependencies>)与插件配置(<plugins>),前者是我们自身整个系统的一部分,后者是为我们开发系统做支撑的一系列现成资源(如编译插件、服务器插件、日志插件等),它们本身其实也是一个个Maven 项目,但与普通Maven 项目相比,它们是为了完成特定的开发或运行过程中的的任务,并不与我们的系统逻辑直接相关。


对于依赖项(<dependency>),groupId、artifactId、version 就能唯一确定具体依赖的项目,而对于插件(<plugin>),通常还需具体的配置信息,这些插件所需的配置信息通常由元素<configuration>元素指定。不同的插件,应该如何配置其所需信息,这是个重点。


一、对pom.xml 中所有元素进行基础了解。

1、可能继承于其它项目。所谓继承,指当前项目某些未指定的配置采用父项目中的配置。

对应元素:

<parent>
	<groupId></groupId>
	<artifactId></artifactId>
	<version></version>
        <!-- 默认../pom.xml optional-->
       <relativePath>../pom.xml</relativePath>
</parent>

2、当前项目的基础信息。

<!-- groupId等未指定时会继承父工程的设置 -->
<groupId>study.maven</groupId>
<artifactId>study-pom</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<!-- optional 工程名,貌似没什么用 -->
<name>study-pom</name>
<!-- optional 这个工程的主页url,可指定为仓库位置等 -->
<url>http://maven.apache.org</url>
<!-- optional 描述 -->
<description>a project for study maven</description>
<!-- optional -->
<contributors></contributors>
<!-- optional 开发者 -->
<developers></developers>

3、指定属性值。

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<!-- 自定义属性 -->
	<myproperty>value</myproperty>
</properties>

4、当前工程的依赖工程。

<dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>3.8.1</version>
		<scope>test</scope>
	</dependency>
</dependencies>

说明:项目的scope 取值为:compile, runtime, test, system, 或 provided


5、当前工程的子工程的依赖配置。可选,配置后继承于该工程的子工程的某些依赖项配置可简化。

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId></groupId>
			<artifactId></artifactId>
			<version></version>
			<scope></scope>
			<!-- scope为system 时才用 。指定此依赖项在文件系统中的绝对路径 -->
			<systemPath></systemPath>
			<!-- 可以指定两个不同的classifier值,用于同一个pom.xml文件的2个不同的构建。最后被加在<filename>元素值后 -->
			<classifier>versionOne</classifier>
			<!-- 是否可选,true|false 默认false-->
			<optional></optional>
			<!-- 此依赖性的类型,jar|war|pom 默认jar-->
			<type></type>
			<!-- 此依赖项包含多个artifact 时,指定哪些需要被排除 -->
			<exclusions>
				<exclusion>
					<groupId></groupId>
					<artifactId></artifactId>
				</exclusion>
			</exclusions>
		</dependency>
	</dependencies>
</dependencyManagement>

6、不同构建配置。貌似每个profile都是一个完整的项目构建配置。

<profiles>
	<profile>
		<activation>
			<!-- 指定是否默认激活 -->
			<activeByDefault></activeByDefault>
			<!-- 以下4个元素4选一,决定激活条件  -->
			<!-- 柑根据某个文件是否存在决定是否激活 -->
			<file></file>
			<!-- 根据jdk版本是否匹配决定是否激活 -->
			<jdk></jdk>
			<!-- 根据操作系统决定是否激活 -->
			<os></os>
			<!-- 某个属性被指定时激活 -->
			<property></property>
		</activation>
                <build>...</build>
       </profile>
	<profile>...</profile>
</profiles>


7、远程插件仓库。可选。

<pluginRepositories>
	<pluginRepository>
		<id></id>
		<name></name>
		<!-- 此仓库定位或存储artifact的方式, legace|default-->
		<layout></layout>
		<!-- 如何从此仓库执行下载 -->
		<releases>
		<!-- 失败后提示,ignore|fail|warn ,默认warn-->
			<checksumPolicy></checksumPolicy>
			<!-- 是否用此仓库下载这个类型,不解 -->
			<enabled></enabled>
			<!-- 下载更新的频率 -->
			<updatePolicy></updatePolicy>
		</releases>
	</pluginRepository>
</pluginRepositories>

8、远程依赖于扩展仓库。可选。

<repositories>
     <repository>
	    <id></id>
	    <url></url>
	    <releases>
	          <enabled>true</enabled>
	    </releases>
	    <snapshots>
	          <enabled>false</enabled>
	    </snapshots>
     </repository>
</repositories>


9、文档相关配置。可选。

<!-- 对maven site命令的相关配置 -->
	<reporting>
		<!-- 是否将报告包含在站点 -->
		<excludeDefaults></excludeDefaults>
		<!-- 指定报告存放位置,默认${project.build.directory}/site . -->
		<outputDirectory></outputDirectory>
		<plugins>
			<plugin>
				<groupId></groupId>
				<artifactId></artifactId>
				<version></version>
				<configuration>
					
				</configuration>
				<!-- 当前工程的子工程能否继承该插件的configuration配置 -->
				<inherited></inherited>
				<reportSets>
					<reportSet>
						
					</reportSet>
				</reportSets>
			</plugin>
		</plugins>
	</reporting>

10、项目所属组织信息。可选。

<!-- 此工程所属组织 -->
<organization>
	<name></name>
	<url></url>
</organization>

11、项目发布到远程仓库或服务器。可选。一般应该不直接发布到远程仓库,而是通过Git 等工具发布。

<!-- 发布管理(配置发布到远程仓库或服务器),optional -->
<distributionManagement>
	<!-- 用于指定此工程的下载地址,没有指定时,会将用户导向<url>的地址 ,主要在远程仓库没有此artifactId时有用,optional-->
	<downloadUrl></downloadUrl>
	<!-- 用于当工程移动到其它组或改变artifactId时的重新指定下载路径,optional -->
	<relocation></relocation>
	<!-- 发布到哪个远程仓库 -->
	<repository></repository>
	<!-- 发布此工程的web站点 -->
	<site></site>
	<!-- 默认为<repository>的值> -->
	<snapshotRepository></snapshotRepository>
	<!-- 不能设置在此项目中 -->
	<status></status>
</distributionManagement>

二、访问pom.xml 或settings.xml中属性/元素值

1、访问pom.xml 中元素值

${project.basedir}:项目路径,即pom.xml所在的文件夹.

${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/.                    ${project.build.testSourceDirectory}:项目的测试源码目录,默认为/src/test/java/.               ${project.build.directory}:项目构建输出目录,默认为target/.

${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes/.                    ${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/testclasses/.

${project.groupId}:项目的groupId.                                               ${project.artifactId}:项目的artifactId.                                           ${project.version}:项目的version,于${version}等价 

${project.build.finalName}:默认为${project.artifactId}-${project.version}.


2、访问settings.xml 中元素值:

${settings.localRepository}:访问settins.xml 中设置的本地仓库路径。


即,用${project.xxx}对pom.xml中元素值进行访问,用${settings.xxx}对settings.xml中元素值进行访问,xxx为元素名。


pom.xml中可以访问自身或settings.xml中某些属性。

具体查看wiki:

https://cwiki.apache.org/confluence/display/MAVEN/Maven+Properties+Guide



Maven 官网在线使用指南:

http://maven.apache.org/guides/getting-started/index.html#What_is_a_SNAPSHOT_version







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值