Maven

創建maven項目

mvn archetype:generate


mvn clean 清除target下編譯內容

mvn compile 編譯項目

mvn test 運行測試

mvn install 打包並放到本地Maven倉庫

mvn install -Dmaven.test.skip=ture 跳過測試

mvn deploy 上傳jar包(需配置Maven安裝目錄下的conf/settings.xml)

mvn package 打包發佈

mvn package -Dmaven.test.skip=ture 跳過測試

mvn clean package -e -U

-e: 詳細異常 -U: 強制更新依賴


生成依賴樹

mvn dependency:tree -Ddetail=true


生成清除eclipse項目結構

mvn eclipse:eclipse

mvn eclipse:clean


幫助

mvn help:help -Ddetail=true



Maven生命週期

Maven有三套相互獨立的生命週期,分別是clean、default和site。每個生命週期包含一些階段(phase),階段是有順序的,後面的階段依賴於前面的階段。


1、clean生命週期:清理項目,包含三個phase。
1)pre-clean:執行清理前需要完成的工作
2)clean:清理上一次構建生成的文件
3)post-clean:執行清理後需要完成的工作


2、default生命週期:構建項目,重要的phase如下。
1)validate:驗證工程是否正確,所有需要的資源是否可用。
2)compile:編譯項目的源代碼。  
3)test:使用合適的單元測試框架來測試已編譯的源代碼。這些測試不需要已打包和佈署。
4)Package:把已編譯的代碼打包成可發佈的格式,比如jar。
5)integration-test:如有需要,將包處理和發佈到一個能夠進行集成測試的環境。
6)verify:運行所有檢查,驗證包是否有效且達到質量標準。
7)install:把包安裝到maven本地倉庫,可以被其他工程作爲依賴來使用。
8)Deploy:在集成或者發佈環境下執行,將最終版本的包拷貝到遠程的repository,使得其他的開發者或者工程可以共享。


3、site生命週期:建立和發佈項目站點,phase如下
1)pre-site:生成項目站點之前需要完成的工作
2)site:生成項目站點文檔
3)post-site:生成項目站點之後需要完成的工作
4)site-deploy:將項目站點發布到服務器



MAVEN插件

Jar

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<configuration>
		<archive>
			<manifest>
				<mainClass>com.shhxzq.stock.t2t.application.Provider</mainClass>
				<addClasspath>true</addClasspath>
				<!--依賴的第三方包路徑-->
				<classpathPrefix></classpathPrefix>
			</manifest>
			<manifestEntries>
				<Class-Path>.</Class-Path>
			</manifestEntries>
		</archive>
	</configuration>
</plugin>


Assembly

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-assembly-plugin</artifactId>
	<version>2.6</version>
	<configuration>
		<descriptors>
			<descriptor>src/main/resources/assembly.xml</descriptor>
		</descriptors>
	</configuration>
	<executions>
		<execution>
			<id>make-assembly</id>
			<phase>package</phase>
			<goals>
				<goal>single</goal>
			</goals>
		</execution>
	</executions>
</plugin>


Assembly.xml

<assembly
	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
	<id>bin</id>
	<formats>
		<format>zip</format>
	</formats>
	<includeBaseDirectory>true</includeBaseDirectory>
	<dependencySets>
		<dependencySet>
			<useProjectArtifact>true</useProjectArtifact>
			<outputDirectory>/lib</outputDirectory>
			<unpack>false</unpack>
			<scope>runtime</scope>
		</dependencySet>
	</dependencySets>
	<fileSets>
		<fileSet>
			<outputDirectory>/</outputDirectory>
			<includes>
				<include>README.txt</include>
			</includes>
		</fileSet>
		<fileSet>
			<directory>src/main/scripts</directory>
			<outputDirectory>/</outputDirectory>
			<includes>
				<include>start.sh</include>
			</includes>
		</fileSet>
	</fileSets>
</assembly>


Shade

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-shade-plugin</artifactId>
	<version>2.4.3</version>
	<executions>
		<execution>
			<id>shade-all</id>
			<phase>package</phase>
			<goals>
				<goal>shade</goal>
			</goals>
			<configuration>
			<outputFile>target/shade/${project.artifactId}-${project.version}.jar</outputFile>
				<createSourcesJar>true</createSourcesJar>
				<createDependencyReducedPom>false</createDependencyReducedPom>
				<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
				<artifactSet>
					<includes>
						<include>**</include>
					</includes>
				</artifactSet>
				<transformers>
					<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
						<mainClass>com.shhxzq.stock.t2t.application.Provider</mainClass>
					</transformer>
					<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
						<resource>META-INF/spring.handlers</resource>
					</transformer>
					<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
						<resource>META-INF/spring.schemas</resource>
					</transformer>
				</transformers>
			</configuration>
		</execution>
	</executions>
</plugin>


resource

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-resources-plugin</artifactId>
	<version>2.6</version>
	<executions>
		<execution>
			<id>copy-resources</id>
			<!-- 在default生命週期的 validate階段就執行resources插件的copy-resources目標 -->
			<phase>validate</phase>
			<!-- <phase>compile</phase> -->
			<goals>
				<goal>copy-resources</goal>
			</goals>
			<configuration>
				<!-- 指定resources插件處理資源文件到哪個目錄下 -->
				<outputDirectory>${project.build.outputDirectory}</outputDirectory>
				<!--  也可以用下面這樣的方式(指定相對url的方式指定outputDirectory)
				<outputDirectory>target/classes</outputDirectory>
				-->
				<!-- 待處理的資源定義 -->
				<resources>
					<resource>
						<!-- 指定resources插件處理哪個目錄下的資源文件 -->
						<directory>src/main/resources</directory>
						<!-- 指定不需要處理的資源 
						<excludes>
							<exclude>WEB-INF/*.*</exclude>
						</excludes>
						-->
						<!-- 是否對待處理的資源開啓過濾模式 (resources插件的copy-resources目標也有資源過濾的功能,這裏配置的
							這個功能的效果跟<build><resources><resource>下配置的資源過濾是一樣的,只不過可能執行的階段不一樣,
							這裏執行的階段是插件指定的{phase}階段,<build><resources><resource>下的配置將是在resources插件
							的resources目標執行時起作用(在process-resources階段))-->
						<filtering>true</filtering>
					</resource>
				</resources>
			</configuration>
			<inherited></inherited>
		</execution>
	</executions>
</plugin>


surefire (配置Junit測試

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.4.2</version>
	<configuration>
		<skipTests>true</skipTests>
		<includes>
			<include>**/*ServiceTest.java</include>
		</includes>
		<excludes>
			<exclude>**/TempTest.java</exclude>
			<exclude>**/*DaoTest.java</exclude>
		</excludes>
	</configuration>
</plugin>


Maven多環境配置

使用filter過濾resource,通過profile切換環境

<filters>
	<filter>../conf/filters/env-${env}.properties</filter>
	<!-- <filter>${user.home}/zqjy.properties</filter> -->
</filters>

<resources>
	<resource>
		<directory>src/main/resources</directory>
		<!-- 是否使用過濾器 -->
		<filtering>true</filtering>
	</resource>
	<resource>
		<directory>${basedir}/src/main/java</directory>
		<includes>
			<include>**/*.xml</include>
		</includes>
	</resource>
</resources>

<profiles>
	<profile>
		<id>dev</id>
		<properties>
			<env>dev</env>
		</properties>
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
	</profile>
	<profile>
		<id>test</id>
		<properties>
			<env>test</env>
		</properties>
	</profile>
	<profile>
		<id>product</id>
		<properties>
			<env>product</env>
		</properties>
	</profile>
</profiles>

Maven內置屬性

http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide


有六種類型的Maven屬性:


內置屬性:主要有兩個常用內置屬性——${basedir}表示項目根目錄,即包含pom.xml文件的目錄;${version}表示項目版本。


POM屬性:pom中對應元素的值。例如${project.artifactId}對應了<project><artifactId>元素的值,常用的POM屬性包括:

${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}.


自定義屬性:在pom中<properties>元素下自定義的Maven屬性。例如

<project>
	<properties>
		<my.prop>hello</my.prop>
	</properties>
</project>


Settings屬性:與POM屬性同理。如${settings.localRepository}指向用戶本地倉庫的地址。


Java系統屬性:所有Java系統屬性都可以使用Maven屬性引用,例如${user.home}指向了用戶目錄。可以通過命令行mvn help:system查看所有的Java系統屬性


環境變量屬性:所有環境變量都可以使用以env.開頭的Maven屬性引用。例如${env.JAVA_HOME}指代了JAVA_HOME環境變量的值。也可以通過命令行mvn help:system查看所有環境變量。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章