Maven3應用入門講座_第1頁
Maven3應用入門講座_第2頁
Maven3應用入門講座_第3頁
Maven3應用入門講座_第4頁
Maven3應用入門講座_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

Maven入門指南主講人:陳雄華目錄Maven簡介Maven基礎概念Maven私服依賴,聚合,繼承常用插件和自動化部署IDEA下Maven項目開發(fā)Maven高級應用目錄Maven簡介Maven基礎概念Maven私服依賴,聚合,繼承常用插件和自動化部署IDEA下Maven項目開發(fā)Maven高級應用傳統(tǒng)開發(fā)回顧收集依賴構件到CLASSPATH編寫源代碼、配置信息JavaC編譯單元測試產(chǎn)品打包、發(fā)行代碼共享、儲存,以及版本控制經(jīng)常遇到哪些問題?嚴重依賴IDE?Maven介紹清理編譯測試報告打包部署答案1:它是一個構建工具*高度自動化*跨平臺*豐富的可重用組件*標準化>mvnclean>mvncompile>mvnpackageMaven介紹

答案2:它是一個依賴管理工具springlog4jhibernate...pom.xmlProjectA自定義插件第三方插件Maven介紹答案3:它是一個平臺擁有無限可能的平臺Maven如可集成jetty插件,通過Maven啟動Jetty服務器,如可集成腳本運行插件,在構建時自動壓縮JavaScript及CSS,或開發(fā)自定義的插件,自動解析自定義的格式化CSS文件生成圖標庫meta.xml等,....Maven介紹Maven版本Maven2完成了對Maven1的重寫。重寫的首要目的是要提供了強大的Java構建和包含API的項目,允許Maven被植入任何地方,尤其是高級別的產(chǎn)品如IDEs、質量工具、報告工具等這些。Maven2構建生命周期的概念正式化,其比Maven更易擴展;Maven3在2.x基礎上大幅提升性能。可以自動指定父版本,并行生成,更好的完整性報告、多語言生成、更好地支持M2Eclipse…我們要使用Maven3Maven安裝下載安裝包地址:/download.html當前版本為3.0Windows系統(tǒng)下安裝:首先需要確認系統(tǒng)中裝有JDK(版本1.5+);將壓縮包解壓到本地磁盤某目錄中,該目錄則稱為安裝目錄。例如D:\opensource\apache-maven-3.0目錄結構:binMaven的運行腳本bootMaven自己的類裝載器conf該目錄下包含了全局行為定制文件setting.xmllibMaven運行時所需的類庫...Maven安裝配置環(huán)境變量M2_HOME=安裝目錄在PATH系統(tǒng)變量中增加%M2_HOME%\binMAVEN_OPTS=-Xms128m-Xmx1024m(非必要項,可防止內(nèi)存溢出)檢查安裝正確性在命令行提示符下執(zhí)行:mvn–v能看到Maven和JDK的版本號為安裝正確小試Maven命令mvnhelp:system該命令將會下載help插件并運行它,且打印出Java系統(tǒng)屬性和環(huán)境變量目錄Maven簡介Maven基礎概念Maven私服依賴,聚合,繼承常用插件和自動化部署IDEA下Maven項目開發(fā)Maven高級應用Maven基礎概念插件倉庫構件生命周期構件構件即Artifact:artifact是工程將要產(chǎn)生或需要使用的文件,它可以是jar文件,源文件,二進制文件,war文件,甚至是pom文件。每個artifact都由groupId,artifactId及version組合的標識符唯一識別。需要被使用(依賴)的artifact都要放在倉庫(見Repository)中,否則Maven無法找到(識別)它們。pom.xml:<dependency>

<groupId>mons</groupId>

<artifactId>commons-lang3</artifactId><version>3.2.1</version></dependency>artifactRepository插件構件即Plug-in:Maven是由插件組織的,它的每一個功能都是由插件提供的。插件提供goal(類似于Ant中的target),并根據(jù)在POM中找到的元數(shù)據(jù)去完成工作。主要的Maven插件要是由Java寫成的,但它也支持用Beanshell或Ant腳本寫成的插件。artifactRepository

<build>

<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version>

</plugin></plugins>

</build>構件版本號演進1.0-SNAPSHOTtags1.1-SNAPSHOT1.0trunk1.2-SNAPSHOT1.1branches1.3-SNAPSHOT1.1.1-SNAPSHOT1.1.1合并1.2發(fā)布版本號約定:<主版本>.<次版本>.<增量版本>-<里程碑版本>一般來說,主版本和次版本都會聲明,但增量版本和里程碑版本則不一定會用。生命周期默認生命周期Maven倉庫Maven倉庫本地倉庫遠程倉庫中央倉庫私服其他公共庫倉庫分類倉庫即Repository:存儲構件或插件的地方,按大類劃分為本地倉庫及遠程倉庫,遠程倉庫一般由Maven服務器提供倉庫管理功能。倉庫協(xié)作圖本地倉庫目錄Maven簡介Maven基礎概念Maven私服依賴,聚合,繼承常用插件和自動化部署IDEA下Maven項目開發(fā)Maven高級應用安裝Nexus私服部署安裝地址:https:///download-oss-sonatypeNexus私服倉庫宿主庫hostReleases:本地已發(fā)布構件,插件的版本Snapshots:本地發(fā)布的快照版本。3rdparty:第三方構件,如Oracle,db2等構件代理庫proxy第三方的公共庫,如central,Jboss庫,將遠程的倉庫緩存在本地,加快構件的下載。庫組grouppublic:可以將多個庫組織在一起對外提供統(tǒng)一的地址引用。Nexus私服倉庫publicreleasessnapshots3rdparty代理庫...Maven私服遠程倉庫<repository>

0:8081/nexus/content/groups/public/</repository>setting.xml本地環(huán)境代理......Nexus私服主要配置安裝好NexusMaven私服后,通過admin/admin123登錄后臺。

1.Release本機倉庫需要將redeploy設置有allow,以便允許Host的Release可以允許重新發(fā)布;

2.刪除ApacheSnapshots代理庫,新增ApacheReleases,遠程地址為:/content/repositories/releases/3.PublicRepositories將可用的Reposity要選擇上,并排好順序。Maven倉庫配置:setting.xml$user.home/.m2/setting.xml為用戶范圍的配置文件(優(yōu)先級高)$M2_HOME/conf/setting.xml(優(yōu)先級低)為全局范圍的配置文件,修改后將影響本機所有用戶的配置建議:只修改用戶級別的配置,既不影響其它用戶,也不影響后期升級。配置介紹localRepository:

自定義本地庫路徑,默認在$user.home/.m2中interactiveMode:offline:是否每次編譯都去查找遠程中心庫,默認為falsepluginGroups:插件組,例如org.mortbay.jettyproxies:通過代理訪問外部庫servers:Maven服務的認證信息,mirrors:鏡像庫,可以指定內(nèi)部中心庫profiles:個性配置,需要在Activation標簽中激活activeProfiles:表示激活的profilesetting.xml:遠程倉庫配置使用私服的public構件庫使用私服的public插件庫遠程倉庫配置,指向私服的public組倉庫:setting.xml:本地倉庫配置<settings><localRepository>E:\m2\repository</localRepository>

....</settings>默認情況下:本地倉庫位于<用戶目錄>/.m2/repository,可通過setting.xml的<localRepository/>指向其它目錄。setting.xml:配置私服的用戶密碼[1]

首先,在setting.xml中添加nexus服務器賬號。如何在Nexus服務器創(chuàng)建賬號請參考官方說明<servers><server><!—正式發(fā)布倉庫賬號--> <id>releases</id> <username>deployment</username> <password>123456</password></server><server><!—快照版布行倉庫賬號--> <id>Snapshots</id> <username>deployment</username> <password>123456</password></server></servers>使用admin/admin123登錄Maven私服Nexus的后臺,在:secutiry->users下維護Nexus的用戶及密碼,這兒使用deployment用戶,密碼必須和服務端設置一致。將項目發(fā)行到公司內(nèi)部倉庫。在pom.xml中添加:<distributionManagement><repository><id>releases</id><!—發(fā)布庫:此處ID以上頁setting.xml中的<server>的<id>一致--><name>InternalReleases</name><url>http://192.168.10:8081/nexus/content/repositories/releases/</url></repository><snapshotRepository><id>Snapshots</id><!—快照庫:此處ID以上頁setting.xml中的<server>的<id>一致--><name>InternalSnapshots</name>

<url>http://192.168.10:8081/nexus/content/repositories/snapshots/</url></snapshotRepository></distributionManagement>在setting.xml中指定releases庫及snapshots庫的的訪問用戶及密碼,在項目的pom.xml中則指定庫的地址,兩者通過id綁定。在項目處,通過命令:mvndeploy即可發(fā)布構件了。setting.xml:向遠程倉庫發(fā)布構件[2]

使用私服作為遠程倉庫的鏡像,能大大加快下載效率:<mirrors><mirror>

<id>nexus</id> <mirrorOf>*</mirrorOf>

<http://192.168.10:8081/nexus/content/groups/public/</url></mirror></mirrors>setting.xml:向遠程倉庫發(fā)布構件[2]在一些開源項目的pom.xml中直接顯式通過<repository>指定了遠程倉庫。通過setting.xml的<mirror>可以使用私服作為遠程倉庫的鏡像,避免從遠程倉庫下載構件,提高速度。

所以mirrorOf主要用于開源項目,對自開發(fā)項目一般是沒有什么用的。setting.xml:方案啟用<activeProfiles><activeProfile>development</activeProfile><activeProfile>public-snapshots</activeProfile></activeProfiles>在setting.xml中可以配置多套方案,可通過<activeProfiles>指定具體要啟用哪套方案。IDEA中也可選擇具體啟用哪套方案公司內(nèi)部倉庫使用總結重點1:向內(nèi)部倉庫發(fā)布構件使用deploy命令發(fā)布,但確保服務器地址和認證信息(賬號和密碼)。即pom.xml中配置的<distributionManagement>標簽與setting.xml配置的<server>標簽id一致。如果要發(fā)布第三方構件,可以進入Nexus服務器管理界面添加,也可以使用命令,具體參考官方文檔。重點2:設置鏡像,使得內(nèi)部開發(fā)人員只一個出入口在setting.xml中配置<mirrors>、<profile>、<activeProfiles>標簽目錄Maven簡介Maven基礎概念Maven私服依賴/繼承/聚合常用插件和自動化部署IDEA下Maven項目開發(fā)Maven常見問題pom.xml簡介<dependencies>:構件依賴<parent>:模型繼承<dependencyManagement>:依賴管理<reporting>:創(chuàng)建報告<build>:構建<repositories>:引用第三方倉庫<licenses>:許可是Maven項目的核心配置文件,位于每個工程的根目錄,描述Maven所有元數(shù)據(jù)的文件。pom.xml:構件依賴依賴配置<dependency><groupId>……</groupId><artifactId>……</artifactId><version>……</version><classifier>……</classifier><scope>……</scope><type>……</type><systemPath>……</systemPath><optional>……</optional><exclusions></exclusions></dependency>依賴配置詳細介紹groupId、artifactId、version是依賴的基本坐標,缺一不可,其它兩個坐標元素不指定時將采用默認值type:依賴的類型對應坐標packaging,默認為jar,可選為pom,war,earoptional:標記依賴是否可選如一個項目同時支持mysql,oracle,但在真正使用時只會選擇一種,此時可以設置為true,默認為false。exclusions:排除傳遞依賴依賴配置詳細介紹scope:依賴范圍compile:編譯范圍,是默認scope,在classpath中存在provided:已提供范圍,比如容器提供ServletAPIruntime:運行時范圍,編譯不需要,運行時需要,如數(shù)據(jù)庫驅動程序test:測試范圍,單元測試環(huán)境需要system:系統(tǒng)范圍,自定義構件,需通過systemPath指定所在的本地路徑import:導入依賴依賴傳遞art1art2art3傳遞依賴關系表第2直接依賴??第1直接依賴依賴分析A->B->C->X(1.0)A->D->X(2.0)X是A的傳遞依賴調解原則:第一原則:路徑近者優(yōu)先原則x2.0傳遞給A最近第二原則:第一聲明者優(yōu)先原則當路徑相等時,則由POM聲明的依賴順序決定mvndependency:list

//打印出依賴列表mvndependency:tree

//打印出依賴樹mvndependency:analyze//分析當前依賴依賴排除<dependency><groupId>org.unitils</groupId><artifactId>unitils-core</artifactId><version>${unitils.version}</version><exclusions>

<exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion><exclusion><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId></exclusion>

</exclusions></dependency>art1art2artX11artX12artX13exclusionexclusion模塊繼承:語法通過子項目來繼承,可以共享父項目定義的所有的值。比如自定義構建信息,版本仲裁,父模塊的packaging必須是pom類型的,也不需要src/main/java了特點:1.單親父節(jié)點2.允許覆蓋<modelVersion>4.0.0</modelVersion><parent><groupId>com.test</groupId><artifactId>sample-parent</artifactId><version>1.0.0</version><relativePath>

../sample-parent

</relativePath></parent><artifactId>sample-module1</artifactId>sample-parentsample-module1模塊繼承:父模塊統(tǒng)一屬性定義構件及插件版本管理發(fā)布管理設置團隊信息...父模塊包括的信息模塊繼承:父模塊<properties>:定義變量信息,子模塊可以使用;<dependencyManagement>:將項目中需要用到的構件統(tǒng)一在此管理好,包括構件包、構件名及版本,而子模塊引用即可,統(tǒng)一構件的版本管理,方便維護;<pluginManagement>:將項目中需要用到的共用插件統(tǒng)一在此管理,作用同上;<distributionManagement>:發(fā)布管理,所有子模塊復用之。對照sample-parent及其子模塊進行學習。多模塊開發(fā):組合組合:將多個模塊組合在一起,packaging設置為pom,也無需src/main/java目錄;使用:一般情況下,在項目根目錄下創(chuàng)建組合模塊,將所有子模塊聚合在一起。<name>myproject-all</name><modules> <module>myproject-dao</module> <module>myproject-biz</module> <module>myproject-mvc</module></modules>參見sample-project項目的根pom.xml經(jīng)典多模塊結構1.父模塊2.子模塊3.聚合模塊4.輔助模塊1.父模塊:管理構件/插件版本,發(fā)布管理等;2.子模塊:項目功能模塊;3.聚合模塊:將項目的所有模塊組合在一起;4.輔助模塊:項目功能變更、數(shù)據(jù)庫變更,數(shù)據(jù)腳本、執(zhí)行腳本等。目錄Maven簡介Maven基礎概念Maven私服依賴,聚合,繼承常用插件和自動化部署IDEA下Maven項目開發(fā)Maven高級應用插件綁定pile......maven-compiler-plugincompile...內(nèi)置插件(1)生命周期階段(phase)插件目標(goal)pre-cleancleanmaven-clean-plugin:cleanpost-clean表一:clean生命周期內(nèi)置插件綁定表三:site生命周期內(nèi)置插件綁定生命周期階段(phase)插件目標(goal)pre-sitesitemaven-site-plugin:sitepost-sitesite-deploymaven-site-plugin:deploy內(nèi)置插件(2)生命周期階段(phase)插件目標(goal)process-resourcesmaven-resources-plugin:resourcescompilemaven-complier-plugin:compileprocess-test-resourcesmaven-resources-plugin:testResourcestest-compilemaven-compiler-plugin:testCompiletestmaven-surefire-plugin:testpackagemaven-jar-plugin:jarinstallmaven-install-plugin:installdeploymaven-deploy-plugin:deploy表三:default生命周期內(nèi)置插件綁定顯式指定生命周期的插件執(zhí)行目標<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-resources-plugin</artifactId>

<configuration>

<includeEmptyDirs>false</includeEmptyDirs>

</configuration>

<executions>

<execution>

<id>copy1</id>

<phase>prepare-package</phase>

<goals>

<goal>copy-resources</goal>

</goals>

<configuration>

<includeEmptyDirs>true</includeEmptyDirs>

<outputDirectory>${basedir}/target/classes/META-INF/web-resources/foundation/

</outputDirectory>

<resources>

<resource>

<directory>src/main/webapp/foundation/</directory>

<includes>

<include>**/*.*</include>

</includes>

</resource>

</resources>

</configuration>

</execution>

</executions>

</plugin>插件配置<build> <plugins> <plugin> <!--Maven一切的插件工作都是居于插件執(zhí)行的,常用默認的插件有:編譯、打包、安裝--> </plugin> </plugins></build>PS:一般構建時加上必要的插件就可以,不需要更多的配置,因為它有內(nèi)部約定。如果需要改變配置,例如源代碼文件夾、編譯打包結果文件夾等等,都是可以改變的。常用插件Maven編譯插件<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration></plugin>命令:

mvncompilePS:該插件是默認插件,如果沒有配置,Maven將以1.3級別來編譯JAR包生成插件<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <mainClass><!—入口程序--> org.sonatype.mavenbook.weather.Main </mainClass> <addClasspath>true</addClasspath> </manifest> </archive> </configuration></plugin>命令:

mvnjar:jarPS:默認插件,如果需要更多的配置(例如jar檔案說明信息、選擇性打包等等),可以查看官方文檔/plugins/maven-jar-plugin/測試插件<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <testFailureIgnore>true</testFailureIgnore> </configuration></plugin>作用:可以跳過測試當測試失敗仍然執(zhí)行PS:默認插件,也可以命令后面加上參數(shù)跳過測試:-Dmaven.test.skip=true或–DskipTestsJetty插件<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration>

<!--每隔一段時間掃描項目是否更新--> <scanIntervalSeconds>0</scanIntervalSeconds> <connectors> <connectorimplementation="org.eclipse.jetty. server.nio.SelectChannelConnector"> <port>80</port><!--端口--> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> <webAppConfig> <contextPath>/</contextPath> </webAppConfig> </configuration></plugin>插件命令:mvnjetty:run注意:即使是web項目模塊,開發(fā)時也不要將<packaging>設置為war,否則會產(chǎn)生一個大的war包,編譯時間很長。建議只在發(fā)布時將其設置為war,發(fā)布war后馬上改回去。Maven插件總結Maven一切行為都是基于插件完成的artifactId以maven-xxx-plugin形式的是Maven官方插件,一般可以默認使用(不需要配置)Apache提供的Maven插件列表:/plugins/index.htmlCodehaus提供的Maven插件列表:/plugins.html可以開發(fā)自己的插件項目,使得Maven功能無限擴展Maven變量自定義屬性名稱任意。插件預建變量一般以maven.打頭,如piler.source為maven-compiler-plugin的變量;Maven內(nèi)置變量basedir:項目根目錄project.xxx:<project>節(jié)點下的任意內(nèi)容,如project.version環(huán)境變量以env.打頭,引用操作系統(tǒng)的環(huán)境變更,如env.JAVA_HOME.Maven變量引用及定義setting.xmlpom.xml變量名變量值,通過${變量名}引用之通過插件預建變量控制插件運行行為<properties>

<piler.source>1.5</piler.source>

<piler.target>1.5</piler.target>

<pilerVersion>1.5</pilerVersion>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties><plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration>

<source>1.5</source>

<target>1.5</target>

<encoding>UTF-8</encoding> </configuration></plugin>目錄Maven簡介Maven基礎概念Maven私服依賴,聚合,繼承常用插件和自動化部署IDEA下Maven項目開發(fā)Maven高級應用導入Maven項目(1/6)(1)File->New...->ProjectFromExistingSources...導入Maven項目(2/6)(2)選擇Maven導入Maven項目(3/6)(3)勾選“Searchforprojectsrecursivily”導入Maven項目(4/6)(4)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論