已經使用ant的項目如何利用maven來管理依賴



          maven對于管理大型項目來說是不錯的東西, 當然也可以僅用它來做依賴管理 (類似的有IVY), 不過我們有一些項目已經使用了ant來構建, 那么如何能二者兼得? 對ant的build.xml做小小的改動就可以同時支持使用maven來做依賴管理, 也可以使用ant來做構建. --- 當然簡單的構建其實不需要ant, maven完全可以勝任.


          Maven的一些特性
          •   可以方便進行依賴管理
          •   提供了標準的目錄結構, 保證大家統一. (也可以覆蓋默認設置)
          •   利用profile解決測試, 生產環境的配置問題
          •   提供了標準的構建任務, 不需要自己寫
          •   多個項目可以集中管理, 可以樹狀結構管理, 一目了然. 可以快速建立起開發環境. 基本上幾步就可以編譯項目了, 相反手動方式下, 每個項目都要配置依賴就要累死了.
          •   基于約定的方式, 對于特殊情況處理起來有一些麻煩, 一些情況下ant更靈活方便.



          我們的目標

          1. 對喜歡maven的人, 能快速利用maven創建新的項目, 而不用痛苦地去一個一個找依賴, 作為普通開發者可以不關心復雜的build.xml, 或者直接用maven構建
          2. 對原本使用ant腳本的項目, 在要求兼容maven的情況下, 僅僅添加maven的依賴管理, 同時可以為ant提供依賴包的自動收集, 不需要手動自己找.
          3. 推行maven的使用, 快速創建開發環境.
          4. subversion不在保存一堆一堆巨大的jar包


          本文的內容主要是針對上面的第二條, 當然最終是希望推行maven, 方便管理.

          首先我們要安裝好ant, maven2, 配置好環境變量, 修改maven的緩存路徑.

          然后安裝 http://maven.apache.org/ant-tasks/index.html 包, 可以直接放在ant的lib目錄下, 當然還有其他方式, 例如在build.xml里指定路徑.


          準備pom.xml, 針對本文所說情況, 只需要寫基本信息和依賴包配置即可.

          舉例:



          <?xml version="1.0" encoding="UTF-8"?>
          <project xmlns="http://maven.apache.org/POM/4.0.0"
                   xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation
          ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
              
          <modelVersion>4.0.0</modelVersion>

              
          <groupId>com.test</groupId>
              
          <artifactId>maventest</artifactId>
              
          <name>Maven Test</name>
              
          <version>1.0</version>

              
          <build>
                  
          <plugins>
                      
          <plugin>
                          
          <groupId>org.apache.maven.plugins</groupId>
                          
          <artifactId>maven-compiler-plugin</artifactId>
                          
          <configuration>
                              
          <source>1.6</source>
                              
          <target>1.6</target>
                          
          </configuration>
                      
          </plugin>
                  
          </plugins>
              
          </build>

              
          <dependencies>
                  
          <dependency>
                      
          <groupId>org.jgroups</groupId>
                      
          <artifactId>jgroups</artifactId>
                      
          <version>2.10.0.GA</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>commons-lang</groupId>
                      
          <artifactId>commons-lang</artifactId>
                      
          <version>2.5</version>
                  
          </dependency>
                  
          <dependency>
                    
          <groupId>junit</groupId>
                    
          <artifactId>junit</artifactId>
                    
          <version>3.8.1</version>
                    
          <scope>test</scope>
                  
          </dependency>
              
          </dependencies>

          </project>


          如果有本地倉庫, 還可以配置repository. (推薦優先使用本地服務器), 這個文件內容很少, 主要是依賴包的信息, 也是我們最關注的信息.


          下面我們來修改我們的build.xml, 為ant提供依賴服務:


          <project name="jgroups" basedir="." xmlns:artifact ="urn:maven-artifact-ant" >

              
          <!-- 存放依賴包的目錄 -->
              
          <property name="build.lib.dir" location="./lib" />

              
          <!-- find maven-ant-tasks, you can use classpathref to specify the jar, or just copy the jar to ant/lib  -->
              
          <typedef  resource ="org/apache/maven/artifact/ant/antlib.xml"  uri="urn:maven-artifact-ant"  />

              
          <!-- maven的文件 -->
              
          <artifact:pom  id ="maven.project"  file ="pom.xml"   />

              
          <artifact:dependencies filesetId="deps.fileset.compile" useScope="compile">
                  
          <!--<pom file="pom.xml"/>-->
                  
          <pom refid="maven.project"  />
              
          </artifact:dependencies>

              
          <artifact:dependencies filesetId="deps.fileset.test" scopes="test">
                  
          <pom refid="maven.project"  />
              
          </artifact:dependencies>

              
          <artifact:dependencies filesetId="deps.fileset.provide" scopes="provide">
                  
          <pom refid="maven.project"  />
              
          </artifact:dependencies>

              
          <target name="lib.init">
                  
          <copy todir="${build.lib.dir}/compile">
                      
          <fileset refid="deps.fileset.compile"/>
                      
          <mapper type="flatten"/>
                  
          </copy>
                  
          <copy todir="${build.lib.dir}/test">
                      
          <fileset refid="deps.fileset.test"/>
                      
          <mapper type="flatten"/>
                  
          </copy>
                  
          <copy todir="${build.lib.dir}/provide">
                      
          <fileset refid="deps.fileset.test"/>
                      
          <mapper type="flatten"/>
                  
          </copy>
              
          </target>


              
          <!-- ..其他..     -->


          </project>



          主要增加了一個target, 就是把maven中定義的依賴包復制到指定目錄下, 而不需要自己準備或者從subversion下載.

          (ant的其他target也可使用定義的幾個變量作為classpath)

          一般依賴分三種, 請注意區分, 否則把servlet等jar包發布到服務器, 一般會出錯:
          •   compile: 編譯, 用于運行時和編譯時, 打包發布要包含
          •   provide: 容器提供的類, 主要用于編譯, 打包發布時不包含, 例如servlet-api
          •   test: 僅用于編譯和運行測試用例, 打包時不包含.



          使用方法:
          •   checkout項目
          •   使用ide的方式導入maven項目. 如果需要手動: 運行ant lib.init   (如果下載jar時包出錯, 注意檢查groupId, artifactId和版本號.)
          •   手動創建項目, 指定library, 就不需要一個一個找了. (如果導入maven項目的方式, 則一切自動會配置好)





          參考網頁:
          http://book.51cto.com/art/201001/177845.htm
          http://skydream.javaeye.com/blog/437938
          http://maven.apache.org/ant-tasks/examples/dependencies.html



          posted on 2010-11-06 11:50 Scud(飛云小俠) 閱讀(6589) 評論(1)  編輯  收藏

          評論

          # re: 已經使用ant的項目如何利用maven來管理依賴 2011-02-12 16:31 陳于喆

          我的項目也全是ant,最近在考慮怎么用maven,先關注下,等會再來看  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2010年11月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導航

          統計

          公告

          文章發布許可
          創造共用協議:署名,非商業,保持一致

          我的郵件
          cnscud # gmail


          常用鏈接

          留言簿(15)

          隨筆分類(113)

          隨筆檔案(103)

          相冊

          友情鏈接

          技術網站

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 建水县| 肇东市| 饶平县| 中西区| 吉木萨尔县| 三河市| 和平县| 那曲县| 伊通| 泽州县| 阜新市| 东丰县| 安阳市| 台江县| 喜德县| 平远县| 荆门市| 婺源县| 聊城市| 万安县| 大丰市| 大同市| 英吉沙县| 马龙县| 兴宁市| 西乌珠穆沁旗| 古田县| 油尖旺区| 班戈县| 常山县| 密云县| 汉川市| 吐鲁番市| 滁州市| 水城县| 元江| 彩票| 泰州市| 双鸭山市| 汕头市| 岳池县|