學習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