15 7月 2009

Maven:Properties

Maven:Properties 本篇是參考MavenPropertiesGuide整理的
Maven在POM中可以用的Properties大約可以分為下列幾種
(1)Build in Properties
${basedir}:取得mvn執行時pom.xml的所在目錄
(2)Project Properties
基本上pom.xml中所有的tag都是算在這類,只要加上project這個prefix即可。
${project.name}:可以拿到<name>yourprojectname</name>中的yourprojectname。
${project.version}:可以拿到<version>buildversion</version>中的buildversion。
${project.build.directory}:可以拿到<build><directory>builddirectory</directory></build>中的builddirectory。
而要取得parent的pom.xml資訊,只要將prefix改為parent.project即可。
(3)System Environment Variables
使用env這個prefix,可以取得系統中的變數。
基本上,在console下打env,顯示出的變數只要加上env.這個“prefix“,就能在pom.xml中使用。
${env.M2_HOME}:可以取得Maven的安裝目錄
${env.CLICOLOR}:可以取得mac的terminal是否要顯示顏色。
(4)Java Environment Properties
請參考http://java.sun.com/javase/6/docs/api/java/lang/System.html#getProperties(),其中所有的Key都可以被pom.xml使用。
比較有機會用到的像是
${os.name}:可以知道系統用的OS為何。
${file.separator}:目錄的分隔符號。

要知道這些Properties到底是什麼值其實也有點麻煩,如果沒在pom.xml裡執行也不能確定到底是什麼,但是Maven本身也沒有提供任何方式可以顯示這些Properties。
所以只好利用Antrun中執行echo這task來顯示囉,這是我最直接能想到的,如果有更好的方法也請不吝告知。
在pom.xml中上加
<build>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-antrun-plugin</artifactId>
			<version>1.3</version>
			<executions>
				<execution>
					<phase>initialize</phase>
					<configuration>
						<tasks>
							<echo>basedir:${basedir}</echo>
							<echo>project.name:${project.name}</echo>
							<echo>project.version:${project.version}</echo>
							<echo>project.packaging:${project.packaging}</echo>
							<echo>project.build.finalName:${project.build.finalName}</echo>
							<echo>project.build.directory:${project.build.directory}</echo>
							<echo>project.build.outputDirectory:${project.build.outputDirectory}</echo>
							<echo>env.M2_HOME:${env.M2_HOME}</echo>
							<echo>env.CLICOLOR:${env.CLICOLOR}</echo>
							<echo>settings.localRepository:${settings.localRepository}</echo>
							<echo>java.home:${java.home}</echo>
							<echo>java.version:${java.version}</echo>
							<echo>java.vendor:${java.vendor}</echo>
							<echo>os.name:${os.name}</echo>
							<echo>os.arch:${os.arch}</echo>
							<echo>os.version:${os.version}</echo>
						</tasks>
					</configuration>
					<goals>
						<goal>run</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>
自行修改<tasks>中的<echo> task成你要的,然後只要執行
>$ mvn initialize
就可以看到結果囉。

沒有留言: