mvn工具介紹

來源:互聯網
上載者:User

 學習Mina的時候,發現Mina使用Maven做專案管理的。又開始學習Maven,這段時間做的筆記。要學會這種類似於ant,又比ant進階的build工具,首先要掌握mvn命令下的各個參數,然後將這些mvn、參數組合在實際的項目中加以運用。

mvn將項目分為5個階段(lifecycle):準備、編譯(complie)、測試、部署、運行

下載配置maven:
 

詳細過程網上都會有。

1.1 user
對指定使用者的配置。user configuration可以在${user.home}/.m2/settings.xml中指定。註:該檔案不是必須的,當該檔案找不到時,maven會使用預設的配置。

關於該檔案的具體配置可以參考:http://maven.apache.org/ref/2.0.4/maven-settings/settings.html

1.2 配置代理
在maven2.0中,Proxy 伺服器上網,可以為http request配置代理。同樣在user configuration中配置,配置如下:

     <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>www.hc360.com</host>
      <port>80</port>
      <nonProxyHosts>local.net,some.host.com</nonProxyHosts>
    </proxy>

詳見:http://maven.apache.org/guides/mini/guide-proxies.html

1.3 安全和部署配置
在一個project中,該項目將要使用哪個Repository,是在setting.xml中指定的。然而,你卻不能將使用者名稱和

碼以及其它的安全設定也放在該project中。因此,你可能會在你自己的設定中定義一個server,給它指定一個id, 該id
與project將要使用那個Repository相對應。

另外,有些repository在下載時可能需要使用者名稱和密碼,這些也可以在server element中以相同的方式指定。配置如下
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>

1.4 mavenplugins for eclipse
通過eclipse安裝的url為http://m2eclipse.sonatype.org/update/ ,可以去官方網站上查詢。

配置:在window-->references-->Java-->build path-->classpath variables,按"New",名字為:M2_REPO  建立一個目錄,指向當前的資產庫:C:/Documents and Settings/pengch/.m2/repository

要注意的部分:設定maven的主目錄的名稱為:M2_HOME。從伺服器下載的jar庫預設是: ${user.home}/.m2/repository/下,我的${user.home}值為:C:/Documents and Settings/Administrator,初始配置是在:%M2_HOME%/bin/m2.conf檔案中可見到。如果要修改resposity的值:

有兩種方法:%M2_HOME%/conf/settings.xml中的欄位為:<localRepository>實際的物理地址</localRepository>,如<localRepository>E:/maven/.m2/repository</localRepository>

另一種方法是:用artifactory來建立maven的本地的repository。本人沒有試用過。(以下轉自:http://www.javaeye.com/topic/98480)

官方的maven repository伺服器特別的慢,還記得上次海底電纜事故嗎?官方的伺服器根本就無法訪問,那段時間簡直要抓狂。並且官方伺服器類庫版本通常不是最新,有時候想用最新版的還得自己動手。(下面會介紹如何自己動手做),所以建立一個自己的本地代碼伺服器對於整個團隊就特別有意義。

Maven的伺服器很簡單,一個普通的http伺服器就行,比如apache,裝好apache以後。

將你本地程式碼程式庫檔案夾拷貝到apache安裝目錄下htpdocs/maven2,windows使用者是C:/Documents and Settings/jeffrey/.m2/repository,linux下是 /home/Jeffrey/.m2/repository(注意.m2在linux下是隱藏檔案夾)

啟動apache伺服器,在瀏覽器中輸入http://localhost/maven2/repository,應該可以查看到repository的檔案目錄

編輯項目pom,指定本地的程式碼程式庫伺服器

在project中加入:

   

xml 代碼

<repositories>  
  <repository>  
    <id>mylibsid>  
    <url>http://localhost/maven2/repositoryurl>  
  repository>  
repositories>  
 

可以加入多個repository,mvn會按照順序檢索,如果都沒有找到,最後會去找官方的伺服器。(轉完)

maven 常用命令組合:
建立:mvn archetype:create -DgroupId=com.oreilly -DartifactId=app

檔案夾結構:

app

---com

------oreilly

建立Maven的普通java項目:mvn archetype:create -DgroupId=com.codeline.commons -DartifactId=pjoName    
建立Maven的Web項目:mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp   

編譯:
cd app;

mvn compile

編譯測試案例:Compiling Test Sources and Running Unit Tests

mvn test;

mvn test will always run the compile and test-compile phases first, as well as all the others defined before it.

打包,
Packaging and Installation to Your Local Repository

Making a JAR file is straightforward and can be accomplished by executing the following command:

C:/app> mvn package

將產生的檔案添加到本地類庫中
Now, you'll want to install the artifact (the JAR file) you've generated into your local repository. It can then be used by other projects as a dependency. The directory <user_home>/.m2/repository isthe default location of the repository.

To install, execute the following command:

C:/app> mvn install

maven程式碼程式庫的檔案目錄組織方式,同一個jar對於每個版本都有一個獨立的檔案夾來存放,除了jar還要有該jar的描述檔案.pom,以及他們的校正檔案.sh1

.pom檔案裡定義了該jar的名稱、版本以及該jar所依賴到的其他jar(這也就是為什麼引入一個jar卻帶出一大堆的jar來)

最簡單的pom如下:

xml 代碼

xml version="1.0" encoding="UTF-8"?>  
<project>  
    <modelVersion>4.0.0modelVersion>  
    <groupId>net.jeffreygroupId>  
    <artifactId>xxxartifactId>  
    <version>1.0version>  
    <dependencies>  
    dependencies>  
project>  
         為jar和pom產生校正檔案

         可以通過一個ant任務來做:

xml 代碼

  
<target name="checksum" description="Generate checksum file for jar and pom">  
       <checksum algorithm="SHA" fileext=".sha1">  
           <fileset dir="d:/javalib" id="id">   
              <include name="**/*.pom" />  
              <include name="**/*.jar" />  
              <include name="**/*.xml" />  
              <exclude name="**/*.sh1" />  
           </fileset>  
       </checksum>  
</target>  
 

把產生好的sh1檔案和jar、pom按照前面介紹的結構布局拷貝到apache的程式碼程式庫中,當然你也可以直接拷到本地程式碼程式庫中。

(轉自:http://fluagen.blog.51cto.com/146595/40086)

在安裝hibernate的架包時告訴我jta無法下載。要求本地化安裝,給出的提示如下:
1) javax.transaction:jta:jar:1.0.1B
Try downloading the file manually from:http://java.sun.com/products/jta.Then, install it using the command:
mvn install:install-file -DgroupId=javax.transaction -DartifactId=jta /  -Dversion=1.0.1B -Dpackaging=jar -Dfile=/path/to/filePath to dependency:
1) com.efn:mywebapp:war:1.0-SNAPSHOT
2) org.hibernate:hibernate:jar:3.1rc2
3) javax.transaction:jta:jar:1.0.1B
----------
1 required artifact is missing.for artifact: com.efn:mywebapp-1.0-SNAPSHOT.war這個提示是說可以先到sun的網站下載jta架包,然後採用命令列的方式按要求安裝,因為我本來就有此架包,於是拷到一個方便的位置,比如c:/,然後在命令列下輸入:
mvn install:install-file -DgroupId=javax.transaction -DartifactId=jta -Dversion=1.0.1B -Dpackaging=jar -Dfile=C:/jta.jar
執行完畢後,一切OK!

(轉完)

其他命令:
不需任何附加工作maven依靠此POM就可以為你的項目產生一個網站,你只須定製你的maven網站,如果時間緊迫,你只須執行以下命令:

mvn site
 

還有許多goals可以執行,比如

mvn clean
 

此命令刪除target目錄。

可能你需要為你的項目產生一個IntelliJ IDEA 描述符,執行以下命令:

mvn idea:idea
 

          

組合使用goal命令,如只打包不測試:mvn -Dtest package    
編譯測試的內容:mvn test-compile   
只打jar包: mvn jar:jar   
只測試而不編譯,也不測試編譯:mvn test -skipping compile -skipping test-compile (這裡要特別注意 -skipping 的靈活運用,當然也可以用於其他組合命令)   
清除eclipse的一些系統設定:mvn eclipse:clean

注意事項:
當建立一個工程後,執行 mvn eclipse:eclipse,則會產生eclipse的工程檔案,但是第一次用eclipse開啟工程後,發現報如下錯誤:Unbound classpath variable: 'M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar' in project my-webapp ,需要在Eclipse 中配置 M2_REPO 變數,配置步驟:window >> preferences >> Java >> Build Path >> Classpath Variables
建立一個 M2_REPO 的變數,變數值指向你系統的Maven2的資料倉儲位置

將資源檔(.resources)加入
如何在jar檔案中加入資源?

在應用程式範例中,增加目錄${basedir}/src/main/resources,我們把資源檔放入此目錄。任何在${basedir}/src/main/resources目錄中的檔案和目錄都將被打包到jar檔案中。

my-app

|-- pom.xml

`-- src

    |-- main

    |   |-- java

    |   |   `-- com

    |   |       `-- mycompany

    |   |           `-- app

    |   |               `-- App.java

    |   `-- resources

    |       `-- META-INF

    |           `-- application.properties

    `-- test

        `-- java

            `-- com

                `-- mycompany

                    `-- app

                        `-- AppTest.java
 

在這個例子中,我們在${basedir}/src/main/resources目錄下放了一個META-INF目錄並在META-INF目錄中放了一個application.properties檔案。如果你將jar檔案解壓,可以看到以下內容:

|-- META-INF

|   |-- MANIFEST.MF

|   |-- application.properties

|   `-- maven

|       `-- com.mycompany.app

|           `-- my-app

|               |-- pom.properties

|               `-- pom.xml

`-- com

    `-- mycompany

        `-- app

            `-- App.class
 

就像你看到的那樣,${basedir}/src /main/resources中的內容在jar檔案的起始位置,我們的application.properties檔案在META-INF目錄下。同 時,一些其他檔案如META-INF/MANIFEST.MF,以及pom.xml和pom.properties檔案也在其中,對於maven產生的 jar檔案來說,這是maven的標準行為。你可以自行建立自己的manifest,不過如果你不指定,maven會產生一個預設的。由於pom.xml 和pom.properties檔案都被打包到jar檔案中,所以maven產生的產品都是自描述的,一個簡單的應用就是獲得應用程式版本。開啟POM文 件可能需要一些maven的工具,但開啟屬性檔案可以使用標準的java API來做到,屬性檔案pom.properties如下所示:

#Generated by Maven

#Tue Oct 04 15:43:21 GMT-05:00 2005

version=1.0-SNAPSHOT

groupId=com.mycompany.app

artifactId=my-app
 

為了單元測試,可能需要把資源加入到classpath,你可以遵照同樣的模式:

my-app

|-- pom.xml

`-- src

    |-- main

    |   |-- java

    |   |   `-- com

    |   |       `-- mycompany

    |   |           `-- app

    |   |               `-- App.java

    |   `-- resources

    |       `-- META-INF

    |           |-- application.properties

    `-- test

        |-- java

        |   `-- com

        |       `-- mycompany

        |           `-- app

        |               `-- AppTest.java

        `-- resources

            `-- test.properties
 

那麼在測試代碼中,只須使用如下代碼就可訪問這些資源:

...

// Retrieve resource

InputStream is = getClass().getResourceAsStream( "/test.properties" );

// Do something with the resource

...

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/liu251/archive/2008/08/04/2767188.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.