2016年7月24日 星期日

POM、第三方jar檔 (Maven 2)

POM.xml 設定


這裡選擇左邊的POM Reference,右邊的5個紅框會對應下面的5個紅框

※dependencies

依賴就是說我寫了一支程式,有用到spring-core裡的東西,那就表示我這支程式依賴spring-core,如果我取得不到spring-core,那這支程式當然有問題
mvn dependency:list 可看目前的依賴
mvn dependency:tree 可看依賴的樹狀結構

一般要下載某些jar檔,都是到MVN Repository去搜尋的

scope

scope 預設是 compile
.compile:編譯、測試、執行都有效,一般都用這個
.test:測試有效,上一篇建出來的JUnit就是這一個
.provided:類似 compile,但打包時不包括,如servlet-api
.runtime:測試、執行有效,如JDBC的driver,因為是廠商提供的,不需要編譯
.system:類似 provided,但 jar 檔是系統路徑,所以還要設定<systemPath>自己從系統提供 jar 檔
.import:只能用在 dependencyManagement 裡的 dependency,maven 只能有一個 parent 標籤,也就是只能有一個父 pom,加這個表示此 dependency 自己會去抓,不會抓 parent 的檔案

exclusions

排除依賴
可以設定哪些檔案不要加入,搜尋exclusions,然後複製貼上即可


※properties

1.可以用${env.xxx}取得環境變數,如${env.JAVA_HOME}
想知道其他屬性要切到pom.xml的路徑,然後下mvn help:system,但要小心help:system裡面不能有空格

2.可以用${project.xxx}取得POM裡的屬性,如${project.version}
如果路徑有父子關係,如<build><sourceDirectory>xxx</sourceDirectory></build>
可以用「.」隔開,如${project.build.sourceDirectory}

3.可以用${settings.xxx},取得的是settings.xml裡資料,如${settings.localRepository}

4.在java印出java.lang.System.getProperties().list(System.out)可以取得java系統屬性
如:${java.home}、${file.separator}…等

5.如果以上都沒有適合的,那就自己定變數了,可以亂打
如<xxx.ooo>UTF-8</xxx.ooo>
要用變數的值時,就用${xxx.ooo}就會得到UTF-8了



※第三方jar檔

大部分都可以在上面講的MVN Repository下載到jar檔,但有一些沒辦法,如微軟的SQL Server
這時就要有一些設定才能抓的到
我是自己隨便寫一隻java,然後打包成jar檔,重點就是已經有jar檔了,才能如下的設定


※將第三方jar檔放到local repository

※第一步

這裡左邊選中的是Index(category),其中有個第三方jar到Local Repository

我用Enter看起來好看些,但執行時要用空格分開
mvn install:install-file
-Dfile=D:/xxx.jar
-DgroupId=abc
-DartifactId=def
-Dversion=2
-Dpackaging=jar

執行時,因為我的-Dfile是用絕對路徑,所以在哪個路徑下指令都沒有關係,成功後會在.m2\repository\abc\def\2看到def-2.jar


※第二步

在上一篇的App.java寫一些import這一支的程式碼
然後mvn package會build fail
此時在pom.xml的dependencies下加上如下的設定,local repository有個pom檔,可拿來複製

<dependency>
    <groupId>abc</groupId>
    <artifactId>def</artifactId>
    <version>2</version>
</dependency>

※這些資訊都是剛剛的GAV,因為是自己設的,所以一定會知道

※再次執行mvn package,就會發現build success了

※要執行可以用java -cp ...\xxx.jar;...\ooo.jar ooo.xxx.App


※將第三方jar檔放到pom.xml那層

指令如下方法找

就是上面放到local repository那一頁,有個maven-install-plugin



※其實也就比剛剛多了-DlocalRepositoryPath而已

我將路徑打成以下的樣子
mvn install:install-file
-Dfile=D:/xxx.jar
-DgroupId=abc
-DartifactId=def
-Dversion=2.2
-Dpackaging=jar
-DlocalRepositoryPath=hahaha

※執行好會在pom.xml那一層和local repository出現hahaha(注意要在pom.xml那層執行)

※想執行pom檔也要複製,執行mvn package會發現build fail,因為local repository並沒有產生hahaha,所以還得在pom.xml和dependencies同層增加上如下的設定:

<repositories>
    <repository>
        <id>zzz</id>
        <url>file://${project.basedir}/hahaha</url>
    </repository>
</repositories>

※id隨便打,因為我不打,它有提示

※此時mvn package會發現build success

※執行可用java -cp C:\Users\bruce_java\testMaven\p1.p2\hahaha\abc\def\2.2\def-2.2.jar;
target\p1.p2-1.jar ooo.xxx.App

沒有留言:

張貼留言