JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java Tools  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
己加入精華區
by koji at 2008-08-16 23:29
本主題所含的標籤
作者 Maven 入門(3) - 描述相依關係與常用 Plugin 介紹 [精華]
qrtt1





發文: 1747
積分: 31
於 2008-08-16 20:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
Maven 希望能透過共享的 JARs repository 來存放許多的 JARs。其他的 JARs 就如同您在上一篇文章內「打包」的 hello-world-1.0-SNAPSHOT.jar,會有自己的 groupId、artifactId、version,這三者合起來代表一個 JAR。所以描述相依關係的時候,您至少需要給定這三個資訊以便取得一組 JARs,或一個 JAR 的相性套件。

您可以試著在 http://mvnrepository.com/ 搜尋需要的 JAR。例如:commons-lang

http://mvnrepository.com/artifact/commons-lang/commons-lang

您進度頁面後會看到有可用的版本列表,還有 POM Dependency。您可以直接將這段 XML 複製至 <dependencies> 之內。

1
2
3
4
5
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>20030203.000129</version>
</dependency> 


您也可以參考版本列表,對於使用的版本稍作修改。可以改成使用 2.4 版的:

1
2
3
4
5
<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.4</version>
</dependency> 


在這裡對第一次使用 Maven 的人來說,描述版本的相依性是件容易的事。不過,最常被提出的問題是:如果我需要的 JARs 並不在網路共享的 Maven Repository 上,我該怎麼辦呢?您有二種選擇,將 JARs 安裝在 local-repository (預設的位置在家目錄之下的 .m2/repository 目錄),另一種選擇架設自己的 repository 並將需要的 JARs 上傳後使用。我們在這裡先介紹如何安裝在 local-repository 內:

[1] 當 JAR 是由您建立的 maven 專案產生時,可直接安裝至 local-repository

1
mvn install


[2] 當 JAR 並非由 maven 專案產生時,使用 install-file

1
2
3
4
5
6
mvn install:install-file 
-Dfile=/home/qty/Orz.jar 
-DgroupId=xxx.yyy 
-DartifactId=Foo 
-Dversion=1.0.0
-Dpackaging=jar


這些資訊就如同您建立一個 POM 所需要填寫的,您在引用它時就如同引用一般 repository 上分享的 Artifact

1
2
3
4
5
<dependency>
    <groupId>xxx.yyy</groupId>
    <artifactId>foo</artifactId>
    <version>1.0.0</version>
</dependency> 


學會了引用和安裝自己的 JARs 後,要讓您使用 Maven 輔助開發工作還需要認識一些有用的 Plugin。其實您在使用 Maven 時,就已經在使用許多的 Plugin。本篇文件後半段的分享只是依筆者自己有限經驗之中,覺得一些有幫助的 plugin。

maven-compiler-plugin http://maven.apache.org/plugins/maven-compiler-plugin/
第一個要向您介紹的就是 compiler plugin,這個 plugin 在 Super POM 已經被引用。不過通常我們會覆寫他的設定,來滿足我們需要的編譯版本。在 pom.xml 是以 <project> 為根節點,要引用 plugin 您需要建立這樣的結構在 <project> 區塊之內(...代表省略):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>


通常我們使用 maven-compiler-plugin 是為了加上 <configuration> 並指定原始碼版本與編譯標的。這會影響您使用 mvn compile 或其他會使用到 mvn compile 指令的指令的結果。如果您有更進階的需求可能需要使用向 compiler 傳遞參數的方法,可以參考 http://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-compiler-arguments.html

maven-assembly-plugin http://maven.apache.org/plugins/maven-assembly-plugin/
另外,您可以使用 maven-assembly-plugin 將專案打包成一個 JAR 檔,在這個檔案會含有所有相依 JARs 的內容。

1
2
3
4
5
6
7
8
9
10
<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <descriptorRefs>
      <descriptorRef>
        jar-with-dependencies
      </descriptorRef>
    </descriptorRefs>
  </configuration>
</plugin>


您發現到,我們這次沒有填上 groupId 與 version。groupId 不填的時候會採用預設值 org.apache.maven.plugins,而 version 若未填寫則使用最新版本。您可以使用 mvn assembly:assembly 指令產生一個巨大的 JAR。這個的效果就像 Fat Jar 的功能。若有需要指令 Main Class 您可以參閱網站的描述自行指定。

maven-source-plugin http://maven.apache.org/plugins/maven-source-plugin/usage.html
有些時候,您希望在產生專案結果的同時,會產生一份原始碼打包版本的 JAR,那您就會需要使用 source plugin

1
2
3
4
5
6
7
8
9
10
11
12
13
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-source-plugin</artifactId>
  <executions>
    <execution>
      <id>attach-sources</id>
      <phase>verify</phase>
      <goals>
        <goal>jar</goal>
      </goals>
    </execution>
  </executions>
</plugin>


這樣的設定方式是說,當專案執行到 veritfy 的流程時,會自動執行 mvn source:jar 將原始碼打包起來。

maven-pmd-plugin http://maven.apache.org/plugins/maven-pmd-plugin/usage.html
PMD 是一套原始碼檢查的工具,相同性質的工作還有許多。我們可以使用這些工具檢查原始碼的並產生建議報告。PMD 在設定上很容易:

1
2
3
4
5
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-pmd-plugin</artifactId>
  <version>2.3</version>
</plugin>


不過它預設檢查的版本似乎是 1.4 的 source。若有需要您可以指令目標版本:

1
2
3
<configuration>
  <targetJdk>1.5</targetJdk>
</configuration>


您可使用以 mvn pmd:pmd 來產生檢查報告。或參考 source-jar 的方式將 pmd 綁定在某個 build lifecycle 上。而除了這些您還需要設定採用的檢查規則,請參閱 http://maven.apache.org/plugins/maven-pmd-plugin/examples/usingRuleSets.html。

除了這篇短文所提的部分,您可以參考 plugin list http://maven.apache.org/plugins/index.html 尋找需要的 plugin。


qrtt1 edited on 2008-09-10 09:32
reply to postreply to post
蝸牛角上爭何事?石火光中寄此身,隨富隨貧且歡樂,不開口笑是癡人。
my notes
作者 Re:Maven 入門(3) - 描述相依關係與常用 Plugin 介紹 [Re:qrtt1]
russelllee_1999





發文: 5
積分: 0
於 2008-09-05 11:23 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
感謝qrtt1 兄的分享

[2] 當 JAR 並非由 maven 專案產生時,使用 install-file
1 mvn install:install-file
2 -Dfile=/home/qty/Orz.jar
3 -DgroupId=xxx.yyy
4 -DartifactId=Foo
5 -Dversion=1.0.0

小弟實際操作會出現
[INFO] Missing group, artifact, version, or packaging information  

經過努力後發現需加入 -Dpackaging=jar 才能正確執行


reply to postreply to post
作者 Re:Maven 入門(3) - 描述相依關係與常用 Plugin 介紹 [Re:russelllee_1999]
qrtt1





發文: 1747
積分: 31
於 2008-09-10 09:33 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
russelllee_1999 wrote:
感謝qrtt1 兄的分享

[2] 當 JAR 並非由 maven 專案產生時,使用 install-file
1 mvn install:install-file
2 -Dfile=/home/qty/Orz.jar
3 -DgroupId=xxx.yyy
4 -DartifactId=Foo
5 -Dversion=1.0.0

小弟實際操作會出現
[INFO] Missing group, artifact, version, or packaging information  

經過努力後發現需加入 -Dpackaging=jar 才能正確執行


感謝您找出我的錯誤 Smile
我確實漏了它,已修正在本文之內。


reply to postreply to post
蝸牛角上爭何事?石火光中寄此身,隨富隨貧且歡樂,不開口笑是癡人。
my notes
» JWorld@TW »  Java Tools

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8