POM是项目对象模型(Project Object Model)的缩写
<scope>默认值是compile
maven中properties值可以覆盖父pom中定义的同名值
maven是单继承,可以通过<scope>import</scope>来解决(个人理解,这里import进来的也只是dependendecyManagement部分)
<scope>import</scope>只能用在dependendecyManagement里的dependencies里的dependency上
dependendecyManagement里的版本管理不光可以用于子项目dependencies的版本管理,同样可用于本pom文件中的dependencies里。
在创建Maven工程后,插件配置中通常会用到一些Maven变量,因此需要找个地方对这些变量进行统一定义,下面介绍如何定义自定义变量。
在根节点project下增加properties节点,所有自定义变量均可以定义在此节点内,如下所示:
<!-- 全局属性配置 -->
<project>
<properties>
<jilegeji.version>1.2.4</jilegeji.version>
</properties>
</project>
Maven内置变量说明:
${basedir} 项目根目录
${project.build.directory} 构建目录,缺省为target
${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
${project.packaging} 打包类型,缺省为jar
${project.xxx} 当前pom文件的任意节点的内容
关于内置变量他们有默认值。也都可以重新指定。重新指定值的方式
不是
<project>
<properties>
<project.build.finalName>1.2.4</project.build.finalName>
</properties>
</project>
而是
<project>
<build>
<finalName>jilegeji</finalName>
</build>
</project>
注意:${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}指的是target包下的jar包名称。即package后的名字。
把jar包安装到maven库中的过程是install。这个过程是可以重新命名的。即将jilegeji.jar重命名为${project.artifactId}-${project.version}了。
<project>
<build>
<finalName>jilegeji</finalName>
</build>
</project>
其他
setting属性
用户可以使用以settings开头的属性引用settings.xml中xml元素的值,如${settings.localRepository}指向用户本地仓库的地址。
java系统属性
maven可以使用当前java系统的属性,如${user.home}指向了用户目录。
环境变量属性
env变量,暴露了你操作系统或者shell的环境变量。便 如在Maven POM中一个对${env.PATH}的引用将会被${PATH}环境变量替换,在Windows中为%PATH%。所有环境变量都可以使用以env.开头的属性。如:${env.JAVA_HOE}。
当activeProfiles有多个值时,按顺序执行。当某一个生效后,后面的就不会再执行了。
当拥有多项重复配置时,优先级排序为:pom.xml>局部settings.xml>全局settings.xml
<profiles>
<profile>
<id>jilegeji</id>
<activation>
<activeByDefault>true</activeByDefault>
<!--通过jdk版本-->
<!--当jdk环境版本为1.5时,此profile被激活-->
<jdk>1.5</jdk>
<!--当jdk环境版本1.5或以上时,此profile被激活-->
<jdk>[1.5,)</jdk>
<!--根据当前操作系统-->
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
<!--通过系统环境变量,name-value自定义-->
<property>
<name>env</name>
<value>test</value>
</property>
<!--通过文件的存在或缺失-->
<file>
<missing>target/generated-sources/axistools/wsdl2java/
com/companyname/group</missing>
<exists/>
</file>
</activation>
<properties>
<profiles.active>jilegeji</profiles.active>
</properties>
</profile>
...
</profiles>
激活profile的方式有三种:
1. mvn clean package -Pjilegeji
2. 通过<activation>属性,有很多触发条件。如上所示。
3. settings.xml中使用activeProfiles指定