Maven是Apache組織下的一個(gè)跨平臺(tái)的項(xiàng)目管理工具_(dá)第1頁(yè)
Maven是Apache組織下的一個(gè)跨平臺(tái)的項(xiàng)目管理工具_(dá)第2頁(yè)
Maven是Apache組織下的一個(gè)跨平臺(tái)的項(xiàng)目管理工具_(dá)第3頁(yè)
Maven是Apache組織下的一個(gè)跨平臺(tái)的項(xiàng)目管理工具_(dá)第4頁(yè)
Maven是Apache組織下的一個(gè)跨平臺(tái)的項(xiàng)目管理工具_(dá)第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、· Maven學(xué)習(xí)總結(jié)Maven入門Maven 是 Apache 組織下的一個(gè)跨平臺(tái)的項(xiàng)目管理工具,它主要用來(lái)幫助實(shí)現(xiàn)項(xiàng)目的構(gòu)建、測(cè)試、打包和部署。Maven 提供了標(biāo)準(zhǔn)的軟件生命周期模型和構(gòu)建模型,通過(guò)配置就能對(duì)項(xiàng)目進(jìn)行全面的管理。它的跨平臺(tái)性保證了在不同的操作系統(tǒng)上可以使用相同的命令來(lái)完成相應(yīng)的任務(wù)。Maven 將構(gòu)建的過(guò)程抽象成一個(gè)個(gè)的生命周期過(guò)程,在不同的階段使用不同的已實(shí)現(xiàn)插件來(lái)完成相應(yīng)的實(shí)際工作,這種設(shè)計(jì)方法極大的避免了設(shè)計(jì)和腳本編碼的重復(fù),極大的實(shí)現(xiàn)了復(fù)用。索引預(yù)覽: 1. maven基礎(chǔ)2. 插件和倉(cāng)庫(kù),設(shè)置代理3. 依賴,聚合,繼承4. maven屬性,5. mav

2、en生命周期,phases階段,goal目標(biāo)。6. maven倉(cāng)庫(kù)7. 補(bǔ)充內(nèi)容:          生成可執(zhí)行jar          依賴樹(shù)          配置文件profile          maven goal目標(biāo)表 1. Maven 目錄結(jié)構(gòu)src/main/javaApplica

3、tion/Library sourcessrc/main/resourcesApplication/Library resourcessrc/main/filtersResource filter filessrc/main/assemblyAssembly descriptorssrc/main/configConfiguration filessrc/main/scriptsApplication/Library scriptssrc/main/webappWeb application sourcessrc/test/javaTest sourcessrc/test/resourcesT

4、est resourcessrc/test/filtersTest resource filter filessrc/siteSiteLICENSE.txtProject's licenseREADME.txtProject's readme項(xiàng)目對(duì)象模型 POM-Maven 的靈魂 POM 即 Project Object Module,項(xiàng)目對(duì)象模型,在 pom.xml 文件中定義了項(xiàng)目的基本信息、源代碼、配置文件、開(kāi)發(fā)者的信息和角色、問(wèn)題追蹤系統(tǒng)、組織信息、項(xiàng)目授權(quán)、項(xiàng)目的 url、以及構(gòu)建項(xiàng)目所用的插件,依賴?yán)^承關(guān)系。開(kāi)發(fā)人員需按照 maven 定義的規(guī)則進(jìn)行 POM 文件

5、的編寫,清單 1 為一個(gè) POM 文件示例。清單 1. POM 文件示例<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0                    &

6、#160;/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <! The Basics > <groupId> </groupId> <artifactId> </artifactId> <version> </version> <packaging> </packaging> 

7、;<dependencies> </dependencies> <parent> </parent> <dependencyManagement> </dependencyManagement> <modules> </modules> <properties> </properties> <! Build Settings > <build> </build> <

8、reporting> </reporting> <! More Project Information > <name> </name> <description> </description> <url> </url> <inceptionYear> </inceptionYear> <licenses> </licenses> <organization> &l

9、t;/organization> <developers> </developers> <contributors> </contributors> <! Environment Settings > <issueManagement> </issueManagement> <ciManagement> </ciManagement> <mailingLists> </mailingLists>&#

10、160;<scm> </scm> <prerequisites> </prerequisites> <repositories> </repositories> <pluginRepositories> </pluginRepositories> <distributionManagement> </distributionManagement> <profiles> </profiles></p

11、roject>Maven 插件和倉(cāng)庫(kù) Maven本質(zhì)上是一個(gè)插件框架,它的核心并不執(zhí)行任何具體的構(gòu)建任務(wù),僅僅定義了抽象的生命周期,所有這些任務(wù)都交給插件來(lái)完成的。每個(gè)插件都能完成至少一個(gè)任務(wù),每個(gè)任務(wù)即是一個(gè)功能,將這些功能應(yīng)用在構(gòu)建過(guò)程的不同生命周期中。這樣既能保證拿來(lái)即用,又能保證 maven 本身的繁雜和冗余。例如清單 2 中的代碼就是要在 validate 這個(gè)階段執(zhí)行 maven-antrun-plugin 的 run 目標(biāo),具體的任務(wù)在 <target></target> 元素中定義。清單 2. 插件<plugins><plugin

12、><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.6</version><executions><execution><id>version</id>   <phase>validate</phase>   <configuration><ta

13、rget>   具體任務(wù)</target></configuration><goals><goal>  run  </goal></goals></execution></executions></plugin></plugins>設(shè)置代理: 當(dāng)個(gè)人所在的網(wǎng)絡(luò)無(wú)法訪問(wèn)公共的 Maven 倉(cāng)庫(kù)時(shí),可以在 settings.xml 中設(shè)置代理服務(wù)器。打開(kāi) .m2settings.xml,如果沒(méi)有則復(fù)制 $Maven_HOME/conf

14、/settings.xml 到此路徑下,加入清單 3 中的代碼:清單 3. 代理<proxies>  <proxy>     <active>true</active>     <protocol>http</protocol>     <host> 代理地址 </host>     <port>8080</port>    &

15、#160;<username> 用戶名 </username>     <password> 密碼 </password>   </proxy></proxies>依賴、聚合和繼承    依賴我們項(xiàng)目中依賴的 Jar 包可以通過(guò)依賴的方式引入,通過(guò)在 dependencies 元素下添加 dependency 子元素,可以聲明一個(gè)或多個(gè)依賴。通過(guò)控制依賴的范圍,可以指定該依賴在什么階段有效。Maven 的幾種依賴范圍:表 2. 依賴范圍名稱 有效范圍co

16、mpile 編譯,測(cè)試,運(yùn)行。默認(rèn)的依賴范圍。test 測(cè)試,如 Junit。runtime 運(yùn)行,如 JDBC。provided 編譯,測(cè)試,如 ServletAPI。system 編譯,測(cè)試,依賴于系統(tǒng)變量。清單 4 中表示引入對(duì) Junit 的依賴 , 這個(gè)依賴關(guān)系產(chǎn)生作用的階段是 <scope>test</scope>。清單 4. 依賴   <dependency>       <groupId> </groupId>      

17、0;<artifactId> </artifactId>       <version> </version>       <optional>true<optional>     </dependency>依賴是具有傳遞性的,例如 Project A 依賴于 Project B,B 依賴于 C,那么 B 對(duì) C 的依賴關(guān)系也會(huì)傳遞給 A,如果我們不需要這種傳遞性依賴,也可以用 <optional

18、> 去除這種依賴的傳遞,如清單 5。清單 5. 選擇性依賴<dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version><optional>true<optional></dependency>假設(shè)第三方的 jar 包中沒(méi)有使用 <optional> 來(lái)去除某些依賴的傳遞性,那么可以在當(dāng)前的 POM 文

19、件中使用 <exclusions> 元素聲明排除依賴,exclusions 可以包含一個(gè)或者多個(gè) exclusion 子元素,因此可以排除一個(gè)或者多個(gè)傳遞性依賴。如清單 6。清單 6. 排除依賴   <dependency>            <groupId>org.springframework</groupId>          <artifactId>spring-core</artif

20、actId>          <exclusions>                <exclusion>                         <groupId>commons-logging</groupId>        

21、                    <artifactId>commons-logging</artifactId>                </exclusion>          </exclusions>     </dependency> 

22、  聚合現(xiàn)實(shí)中一個(gè)項(xiàng)目往往是由多個(gè) project 構(gòu)成的,在進(jìn)行構(gòu)建時(shí),我們當(dāng)然不想針對(duì)多個(gè) project 分別執(zhí)行多次構(gòu)建命令,這樣極容易產(chǎn)生遺漏也會(huì)大大降低效率。Maven 的聚合功能可以通過(guò)一個(gè)父模塊將所有的要構(gòu)建模塊整合起來(lái),將父模塊的打包類型聲明為 POM,通過(guò) <modules> 將各模塊集中到父 POM 中。如清單 7,其中 <module></module> 中間的內(nèi)容為子模塊工程名的相對(duì)路徑。清單 7. 聚合 <modules>    <module>./com.dugen

23、ject1</module><module>./ject2</module> </modules>父類型的模塊,不需要有源代碼和資源文件,也就是說(shuō),沒(méi)有 src/main/java 和 src/test/java 目錄。Maven 會(huì)首先解析聚合模塊的 POM 文件,分析要構(gòu)建的模塊,并通過(guò)各模塊的依賴關(guān)系計(jì)算出模塊的執(zhí)行順序,根據(jù)這個(gè)潛在的關(guān)系依次構(gòu)建模塊。將各子模塊聚合到父模塊中后,我們就可以對(duì)父模塊進(jìn)行一次構(gòu)建命令來(lái)完成全部模塊的構(gòu)建。   繼承在面向?qū)ο蟮木幊讨形覀儗W(xué)會(huì)了

24、繼承的概念,繼承是可重用行即消除重復(fù)編碼的行為。Maven 中繼承的用意和面向?qū)ο缶幊讨惺且恢碌摹Ec聚合的實(shí)現(xiàn)類似,我們通過(guò)構(gòu)建父模塊將子模塊共用的依賴,插件等進(jìn)行統(tǒng)一聲明,在聚合和繼承同時(shí)使用時(shí),我們可以用同一個(gè)父模塊來(lái)完成這兩個(gè)功能。例如將 com.dugeng.parent 這個(gè)模塊聲明為 project1 和 project2 的父模塊,那么我們?cè)?project1 和 2 中用如下代碼聲明父子關(guān)系,如清單 8:清單 8. 繼承<parent> <groupId>com.dugeng.mavenproject</groupId> 

25、<artifactId>com.dugeng.parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>./com.dugeng.parent/pom.xml</relativePath></parent>由于父模塊只是用來(lái)聲明一些可共用的配置和插件信息,所以它也像聚合模塊一樣只需要包括一個(gè) POM 文件,其它的項(xiàng)目文件如 src/main/java 是不需要的。聚合和繼承存在一些共性和潛在的聯(lián)系,在實(shí)際的應(yīng)用中,

26、經(jīng)常將聚合模塊的父模塊和繼承的父模塊定義為同一個(gè)。并不是所有的 POM 元素都可以被繼承Maven 屬性 在 POM 文件中常常需要引用已定義的屬性以降低代碼的冗余,提高代碼的可重用性,這樣不僅能降低代碼升級(jí)的工作量也能提高代碼的正確率。有些屬性是用戶自定義的,有些屬性是可以直接引用的已定義變量。Maven 的可用屬性類型可分為 5 種,它們分別是:   內(nèi)置屬性。這種屬性跟 Maven Project 自身有關(guān),比如要引入當(dāng)前 Project 的版本信 息,那么只需要在使用的位置引用 $version 就行了。   Setting 屬性。上文中已經(jīng)提到

27、 Maven 自身有一個(gè) settings.xml 配置文件,它里面含有包括倉(cāng)庫(kù),代理服務(wù)器等一些配置信息,利用 $settings.somename 就可以得到文件里相應(yīng)元素的值。   POM 屬性。這種屬性對(duì)應(yīng) POM 文件中對(duì)應(yīng)元素的值,例如 $project.groupId 對(duì)應(yīng)了 <groupId></groupId> 中的值,$project.artifactId 對(duì)應(yīng)了 <artifactId> </ artifactId > 中的值。   系統(tǒng)環(huán)境變量??梢允褂?env.$name 來(lái)獲得相

28、應(yīng) name 對(duì)應(yīng)的環(huán)境變量的值,例如 $env.JAVA_HOME 得到的就是 JAVA_HOME 的環(huán)境變量值。   用戶自定義變量。這種類型的變量是使用最頻繁和廣泛的變量,完全由用戶自己定義。在 POM 文件中加入 <properties> 元素并將自定義屬性作為其子元素。格式如清單 9。清單 9. 自定義屬性<properties> <path>././sourcecode</path></properties>Maven 生命周期 在上一篇文章中,我們用的第二個(gè)命令是:mvn package。這

29、里的 package 是一個(gè)maven的生命周期階段 (lifecycle phase )。生命周期指項(xiàng)目的構(gòu)建過(guò)程,它包含了一系列的有序的階段 (phase),而一個(gè)階段就是構(gòu)建過(guò)程中的一個(gè)步驟。那么生命周期階段和上面說(shuō)的插件目標(biāo)之間是什么關(guān)系呢?插件目標(biāo)可以綁定到生命周期階段上。一個(gè)生命周期階段可以綁定多個(gè)插件目標(biāo)。當(dāng) maven 在構(gòu)建過(guò)程中逐步的通過(guò)每個(gè)階段時(shí),會(huì)執(zhí)行該階段所有的插件目標(biāo)。maven 能支持不同的生命周期,但是最常用的是默認(rèn)的Maven生命周期 (default Maven lifecycle )。如果你沒(méi)有對(duì)它進(jìn)行任何的插件配置或者定制的話,那么上面的命令 mvn p

30、ackage 會(huì)依次執(zhí)行默認(rèn)生命周期中直到包括 package 階段前的所有階段的插件目標(biāo):Maven生命周期phases階段   validate : validate the project is correct and all necessary information is available     compile : compile the source code of the project     test : test the compiled source code using a suitable unit te

31、sting framework. These tests should not require the code be packaged or deployed    package : take the compiled code and package it in its distributable format, such as a JAR.    integration-test : process and deploy the package if necessary into an environment where integration

32、tests can be run    verify : run any checks to verify the package is valid and meets quality criteria    install: install the package into the local repository, for use as a dependency in other projects locally    deploy : done in an integration or release environment,

33、copies the final package to the remote repository for sharing with other developers and projects. There are two other Maven lifecycles of note beyond the default list above. They are   clean : cleans up artifacts created by prior builds    site : generates site documentation for

34、this project goal,phases,lifeclycle的區(qū)別: maven對(duì)構(gòu)建(build)的過(guò)程進(jìn)行了抽象和定義,這個(gè)過(guò)程被稱為構(gòu)建的生命周期(lifecycle)。生命周期(lifecycle)由多個(gè)階段(phase)組成,每個(gè)階段(phase)會(huì)掛接一到多個(gè)goal。 goal是maven里定義任務(wù)的最小單元,相當(dāng)于ant里的target。 因此,goal其實(shí)是由存在于Maven的repository中的plugin提供的一個(gè)個(gè)小的功能程序它是Maven的lifecycle以及phase的基本組成元素。同時(shí),我們也可以通過(guò)將各種各樣的goal加入到Maven的phase

35、中,從而根據(jù)自己的實(shí)際需求,靈活實(shí)現(xiàn)各種定制功能。構(gòu)建: 以phase為目標(biāo)構(gòu)建 以phase為目標(biāo)進(jìn)行構(gòu)建是最常見(jiàn)的,如我們平時(shí)經(jīng)常執(zhí)行的mvn compile,mvn test,mvn package.等等,compile,test,package都是maven生命周期(lifecycle)里的phase,通過(guò)mvn命令,你可以指定一次構(gòu)建執(zhí)行到那一個(gè)階段,在執(zhí)行過(guò)程中,所有經(jīng)歷的執(zhí)行階段(phase)上綁定的goal都將得到執(zhí)行。例如,對(duì)于一個(gè)jar包應(yīng)用,當(dāng)執(zhí)行mvn package命令時(shí),maven從validate階段一個(gè)階段一個(gè)階段的執(zhí)行,在執(zhí)行到compile階段時(shí),compi

36、ler插件的compile goal會(huì)被執(zhí)行,因?yàn)檫@個(gè)goal是綁定在compile階段(phase)上的。 以goal為目標(biāo)構(gòu)建 雖然以phase為目標(biāo)的構(gòu)建最常見(jiàn),但是有時(shí)候我們會(huì)發(fā)現(xiàn),一些插件的goal并不適合綁定到任何階段(phase)上,或者是,這些goal往往是單獨(dú)執(zhí)行,不需要同某個(gè)階段(phase)綁定在一起,比如hibernate插件的導(dǎo)入導(dǎo)出goal多數(shù)情況下是根據(jù)需要要手動(dòng)執(zhí)行的(當(dāng)然,也可以綁定到某個(gè)階段上,比如進(jìn)行單元測(cè)試時(shí),可考慮將其綁定到test階段上)。 每個(gè)階段對(duì)應(yīng)的內(nèi)置插件目標(biāo)goal Clean Lifecycle Bindings clean clean:

37、clean Default Lifecycle Bindings - Packaging ejb / ejb3 / jar / par / rar / war process-resources resources:resources compile compiler:compile process-test-resources resources:testResources test-compile compiler:testCompile test surefire:test package ejb:ejb or ejb3:ejb3 or jar:jar or par:par or rar

38、:rar or war:war install install:install deploy deploy:deploy Default Lifecycle Bindings - Packaging ear generate-resources ear:generate-application-xml process-resources resources:resources package ear:ear install install:install deploy deploy:deploy Default Lifecycle Bindings - Packaging maven-plug

39、in generate-resources plugin:descriptor process-resources resources:resources compile compiler:compile process-test-resources resources:testResources test-compile compiler:testCompile test surefire:test package jar:jar and plugin:addPluginArtifactMetadata install install:install deploy deploy:deploy

40、 Default Lifecycle Bindings - Packaging pom package site:attach-descriptor install install:install deploy deploy:deploy Site Lifecycle Bindings site site:site site-deploy site:deploy Maven 庫(kù) 當(dāng)?shù)谝淮芜\(yùn)行 maven 命令的時(shí)候,你需要 Internet 連接,因?yàn)樗獜木W(wǎng)上下載一些文件。那么它從哪里下載呢?它是從 maven 默認(rèn)的遠(yuǎn)程庫(kù)(/maven2) 下載的

41、。這個(gè)遠(yuǎn)程庫(kù)有 maven 的核心插件和可供下載的 jar 文件。但是不是所有的 jar 文件都是可以從默認(rèn)的遠(yuǎn)程庫(kù)下載的,比如說(shuō)我們自己開(kāi)發(fā)的項(xiàng)目。這個(gè)時(shí)候,有兩個(gè)選擇:要么在公司內(nèi)部設(shè)置定制庫(kù),要么手動(dòng)下載和安裝所需的jar文件到本地庫(kù)。本地庫(kù)是指 maven 下載了插件或者 jar 文件后存放在本地機(jī)器上的拷貝。在 Linux 上,它的位置在 /.m2/repository,在 Windows XP 上,在 C:Documents and Settingsusername.m2repository ,在 Windows 7 上,在 C:Usersusername.m2repository

42、。當(dāng) maven 查找需要的 jar 文件時(shí),它會(huì)先在本地庫(kù)中尋找,只有在找不到的情況下,才會(huì)去遠(yuǎn)程庫(kù)中找。運(yùn)行下面的命令能把我們的 helloworld 項(xiàng)目安裝到本地庫(kù):    $mvn install一旦一個(gè)項(xiàng)目被安裝到了本地庫(kù)后,你別的項(xiàng)目就可以通過(guò) maven 坐標(biāo)和這個(gè)項(xiàng)目建立依賴關(guān)系補(bǔ)充說(shuō)明幾點(diǎn)技巧: 1. 可執(zhí)行的 JAR 文件 使用 Maven 構(gòu)建一個(gè) JAR 文件比較容易:只要定義項(xiàng)目包裝為 “jar”,然后執(zhí)行包裝生命周期階段即可。但是定義一個(gè)可執(zhí)行 JAR 文件卻比較麻煩。采取以下步驟可以更高效:   在您定義可執(zhí)行類的 JAR

43、 的 MANIFEST.MF 文件中定義一個(gè) main 類。(MANIFEST.MF 是包裝您的應(yīng)用程序時(shí) Maven 生成的。)   找到您項(xiàng)目依賴的所有庫(kù)。   在您的 MANIFEST.MF 文件中包含那些庫(kù),便于您的應(yīng)用程序找到它們。您可以手工進(jìn)行這些操作,或者要想更高效,您可以使用兩個(gè) Maven 插件幫助您完成:maven-jar-plugin 和 maven-dependency-plugin。maven-jar-pluginmaven-jar-plugin 可以做很多事情,但在這里,我們只對(duì)使用它來(lái)修改默認(rèn) MANIFEST.MF 文件的

44、內(nèi)容感興趣。在您的 POM 文件的插件部分添加清單 1 所示代碼:清單 1. 使用 maven-jar-plugin 修改 MANIFEST.MF           <plugin>               <groupId>org.apache.maven.plugins</groupId>               <art

45、ifactId>maven-jar-plugin</artifactId>               <configuration>                   <archive>                       <manifes

46、t>                           <addClasspath>true</addClasspath>                           <classpathPrefix>lib/</classpathPrefix> 

47、;                          <mainClass>com.mypackage.MyClass</mainClass>                       </manifest>              

48、60;    </archive>               </configuration>           </plugin>所有 Maven 插件通過(guò)一個(gè) <configuration> 元素公布了其配置,在本例中,maven-jar-plugin 修改它的 archive 屬性,特別是存檔文件的 manifest 屬性,它控制 MANIFEST.MF 文件的內(nèi)容。包括 3 個(gè)

49、元素:   addClassPath:將該元素設(shè)置為 true 告知 maven-jar-plugin 添加一個(gè) Class-Path 元素到 MANIFEST.MF 文件,以及在 Class-Path 元素中包括所有依賴項(xiàng)。   classpathPrefix:如果您計(jì)劃在同一目錄下包含有您的所有依賴項(xiàng),作為您將構(gòu)建的 JAR,那么您可以忽略它;否則使用 classpathPrefix 來(lái)指定所有依賴 JAR 文件的前綴。在清單 1 中,classpathPrefix 指出,相對(duì)存檔文件,所有的依賴項(xiàng)應(yīng)該位于 “l(fā)ib” 文件夾。  

50、0;mainClass:當(dāng)用戶使用 lib 命令執(zhí)行 JAR 文件時(shí),使用該元素定義將要執(zhí)行的類名。maven-dependency-plugin當(dāng)您使用這 3 個(gè)元素配置好了 MANIFEST.MF 文件之后,下一步是將所有的依賴項(xiàng)復(fù)制到 lib 文件夾。為此,使用 maven-dependency-plugin,如清單 2 所示:清單 2. 使用 maven-dependency-plugin 將依賴項(xiàng)復(fù)制到庫(kù)           <plugin>          &

51、#160;    <groupId>org.apache.maven.plugins</groupId>               <artifactId>maven-dependency-plugin</artifactId>               <executions>          

52、60;        <execution>                       <id>copy</id>                       <phase>install</phase>       

53、                <goals>                           <goal>copy-dependencies</goal>                       </goal

54、s>                       <configuration>                           <outputDirectory>                    &

55、#160;        $project.build.directory/lib                           </outputDirectory>                     &#

56、160;       .maven-dependency-plugin 有一個(gè) copy-dependencies,目標(biāo)是將您的依賴項(xiàng)復(fù)制到您所選擇的目錄。本例中,我將依賴項(xiàng)復(fù)制到 build 目錄下的 lib 目錄(project-home/target/lib)。將您的依賴項(xiàng)和修改的 MANIFEST.MF 放在適當(dāng)?shù)奈恢煤?,您就可以用一個(gè)簡(jiǎn)單的命令啟動(dòng)應(yīng)用程序:java -jar jarfilename.jar2.依賴項(xiàng)樹(shù) Maven 一個(gè)最有用的功能是它支持依賴項(xiàng)管理:您只需要定義您應(yīng)用程序依賴的庫(kù),Maven 找到它們、下載

57、它們、然后使用它們編譯您的代碼。必要時(shí),您需要知道具體依賴項(xiàng)的來(lái)源 這樣您就可以找到同一個(gè) JAR 文件的不同版本的區(qū)別和矛盾。這種情況下,您將需要防止將一個(gè)版本的 JAR 文件包含在您的構(gòu)建中,但是首先您需要定位保存 JAR 的依賴項(xiàng)。一旦您知道下列命令,那么定位依賴項(xiàng)往往是相當(dāng)容易的:mvn dependency:treedependency:tree 參數(shù)顯示您的所有直接依賴項(xiàng),然后顯示所有子依賴項(xiàng)(以及它們的子依賴項(xiàng),等等)。例如,清單 5 節(jié)選自我的一個(gè)依賴項(xiàng)所需要的客戶端庫(kù):清單 5. Maven 依賴項(xiàng)樹(shù)INFO -INFO Building Client library for

58、 communicating with the LDEINFO    task-segment: dependency:treeINFO -INFO dependency:tree execution: default-cliINFO com.lmt.pos:sis-client:jar:2.1.14INFO +- org.codehaus.woodstox:woodstox-core-lgpl:jar:4.0.7:compileINFO |  - org.codehaus.woodstox:stax2-api:jar:3.0.1:compileINFO +- o

59、rg.easymock:easymockclassextension:jar:2.5.2:testINFO |  +- cglib:cglib-nodep:jar:2.2:testINFO |  - org.objenesis:objenesis:jar:1.2:test在 清單 5 中您可以看到 sis-client 項(xiàng)目需要 woodstox-core-lgpl 和 easymockclassextension 庫(kù)。easymockclassextension 庫(kù)反過(guò)來(lái)需要 cglib-nodep 庫(kù)和 objenesis 庫(kù)。如果我的 objenesis 出了問(wèn)題,比

60、如出現(xiàn)兩個(gè)版本,1.2 和 1.3,那么這個(gè)依賴項(xiàng)樹(shù)可能會(huì)向我顯示,1.2 工件是直接由 easymockclassextension 庫(kù)導(dǎo)入的。dependency:tree 參數(shù)為我節(jié)省了很多調(diào)試時(shí)間,我希望對(duì)您也同樣有幫助。3.使用配置文件 多數(shù)重大項(xiàng)目至少有一個(gè)核心環(huán)境,由開(kāi)發(fā)相關(guān)的任務(wù)、質(zhì)量保證(QA)、集成和生產(chǎn)組成。管理所有這些環(huán)境的挑戰(zhàn)是配置您的構(gòu)建,這必須連接到正確的數(shù)據(jù)庫(kù)中,執(zhí)行正確的腳本集、并為每個(gè)環(huán)境部署正確的工件。使用 Maven 配置文件讓您完成這些任務(wù),而無(wú)需為每個(gè)環(huán)境分別建立明確指令。關(guān)鍵在于環(huán)境配置文件和面向任務(wù)的配置文件的合并。每個(gè)環(huán)境配置文件定義其特定的位

61、置、腳本和服務(wù)器。因此,在我的 pox.xml 文件中,我將定義面向任務(wù)的配置文件 “deploywar”,如清單 6 所示:清單 6. 部署配置文件   <profiles>       <profile>           <id>deploywar</id>           <build>        &

62、#160;      <plugins>                   <plugin>                       <groupId>net.fpic</groupId>               

63、;        <artifactId>tomcat-deployer-plugin</artifactId>                       <version>1.0-SNAPSHOT</version>                       <

64、;executions>                           <execution>                               <id>pos</id>          &

65、#160;                    <phase>install</phase>                               <goals>                  

66、0;                <goal>deploy</goal>                               </goals>                        &#

67、160;      <configuration>                                   <host>$deploymentManagerRestHost</host>                      &

68、#160;            <port>$deploymentManagerRestPort</port>                                   <username>$deploymentManagerRestUsername</username>   

69、                               <password>$deploymentManagerRestPassword</password>                                   &

70、lt;artifactSource>                                     address/target/addressservice.war                                &#

71、160;  </artifactSource>                               .這個(gè)配置文件(通過(guò) ID “deploywar” 區(qū)別)執(zhí)行 tomcat-deployer-plugin,被配置來(lái)連接一個(gè)特定主機(jī)和端口,以及指定用戶名和密碼證書。所有這些信息使用變量來(lái)定義,比如 $dep

72、loymentmanagerRestHost。這些變量在我的 profiles.xml 文件中定義,如清單 7 所示:清單 7. profiles.xml       <!- Defines the development deployment information ->       <profile>           <id>dev</id>        &#

73、160;  <activation>               <property>                   <name>env</name>                   <value>dev</value>

74、0;              </property>           </activation>           <properties>               <deploymentManagerRestHost>2</deploymen

75、tManagerRestHost>               <deploymentManagerRestPort>58090</deploymentManagerRestPort>               <deploymentManagerRestUsername>myusername</deploymentManagerRestUsername>               <deploymentManagerRestPassword>mypassword</deploymentManagerRestPassword

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論