2016年8月30日 星期二

Eclipse 和 Android Studio 的快速鍵和一些好用的功能

由於版本的不同,快速鍵不一定就是下面寫的按法,所以我將Command打上,
如果有衝突,不一定優先權一定是Eclipse比較高,如Ctrl+Alt+Del,此時會打不出來,這時就可以設定別的快速鍵

※Eclipse

Window-->Preferences-->General-->Keys

※也可以在綠框搜尋「keys」

※Scheme是Default的,待會下面打的快速鍵是針對這裡打出來的

※橘框可以裡面的文字,通通都可以搜尋,和Android Studio不一樣

※在藍框將滑鼠游標放進去,然後打裡想打的快速鍵即可

※以下列出常用快速鍵,「:」左邊是圖的Command

快速完成

Content Assist:Alt+/
Window-->Preferences-->Java-->Editor-->Content Assist
在右邊的紅框裡,預設是「.」,只要打裡面的按鍵,也會跳出Content Assist

整行往上複製,可選多行

Duplicate Lines:Ctrl+Alt+Up

整行往下複製,可選多行

Copy Lines:Ctrl+Alt+Down

整行往上移動,可選多行

Move Lines Up:Alt+Up

整行往下移動,可選多行

Move Lines Down:Alt+Down

游標的上一行多一個空行

Insert Line Above Current Line:Ctrl+Shift+Enter

游標的下一行多一個空行

Insert Line Below Current Line:Shift+Enter

游標反白的部分變大寫

To Upper Case:Ctrl+Shift+X

游標反白的部分變小寫

To Lower Case:Ctrl+Shift+Y

刪除行,可選多行

Delete Line:Ctrl+D

需要Import的Import,不需要的移除,有兩個以上可Import的會跳出視窗供選擇

Organize Imports:Ctrl+Shift+O

到指定的行數

Go to Line:Ctrl+L

游標在括號 (花括、角括、圓括) 使用,游標會跳到[開始 | 結束]

Go to Matching Bracket:Ctrl+Shift+P

單行[移除]註解,也可以選多行,不管是java、javascript、HTML、XML都可以

Toggle Comment:Ctrl+Shift+C

上一個呼叫的程式碼

Backward History:Alt+Left

下一個呼叫的程式碼

Forward History:Alt+Right

排版

Format:Ctrl+Shift+F

整體重命名

Rename:Alt+Shift+R

自動增加[全域 | 區域]變數

在沒有變數名的地方按Ctrl+2後,右下角出現提示
全域變數
Quick Assist - Assign to field:Ctrl+2, F
區域變數
Quick Assist - Assign to local variable:Ctrl+2, L


這樣子的快速鍵就差不多了,其他建議用滑鼠去按,如下:
按右鍵

字型、文字大小

※右邊的Text Font最上面是Basic

顯示行號

打程式碼的左邊那一條按右鍵可顯示行號,會自動將下選的路徑打勾

程式碼的task

預設有FIXME、XXX、TODO 3種,而且預設一定要大寫,程式碼的右邊才會出現藍色的

看上圖就知道還可以增加,修改優先權、區分大小寫
FIXME:寫錯了
XXX:寫了,但可以寫的更好
TODO:還沒寫

搜尋所有專案的task可以用Window-->Show View-->Other...,然後在General下有個Tasks

優先權是High的會有紅色的驚嘆號
Path是專案名稱+package名稱
Resource是檔案名稱

內鍵的快速功能

打main就會出現下面的效果,${cursor}表示打完後游標出現的位置

按右邊的New按鈕可以自定
這是我自定的,打insert就會出現下面的字串,綠框還有很多${}這樣的東西,我只會${cursor}而已



※Android Studio

File-->Settings-->Keymap

※Keymaps是Default的,待會下面打的快速鍵是針對這裡打出來的

※對要設定的快速鍵按兩下會出現提示,第一個是鍵盤快速鍵、第二個是滑鼠快速鍵、第三個是縮寫

滑鼠快速鍵有:左鍵、中鍵、右鍵、滾輪向上、滾輪向下5種,要在滑鼠圖示地方按才可以,按兩個鍵以上看來是沒有用的

縮寫用法是設定完後,在程式碼區按兩下Shift,會跳出一個視窗,將剛剛設定的文字打在裡面就會搜尋到,這時在按下去就可以了

※注意搜尋時,只會搜尋左邊的文字

※以下列出常用快速鍵

快速完成

如下圖Ctrl+Space和Ctrl+Shift+Space
打字打到一半按Ctrl+Space,預設是有分大小寫的,我的2.1.3版預設是First letter
First letter:第一個字區分大小寫
All:全部區分大小寫
None:不分大小寫
改成None就和Eclipse一樣了

整行往下複製,可選多行

Duplicate Line or Block:Ctrl+D
選多行時,要把每一個都拖到,這點和Eclipse不同,且複製的點是在最後一行的最後面

整行往上移動,可選多行

Move Line Up:Alt+Shift+Up

整行往下移動,可選多行

Move Line Down:Alt+Shift+Down

游標的上一行多一個空行

Start New Line Before Current:Ctrl+Alt+Enter

游標的下一行多一個空行

Start New Line:Shift+Enter

游標反白的部分變[大|小]寫

Ctrl+Shift+U

刪除行,可選多行

Delete Line:Ctrl+Y

單一Import,有兩個以上可Import的會跳出視窗供選擇

Alt+Enter
如果將整個單字打完,不會幫你import,就會出現紅線上的提示
如果用選的,會幫你import(要選對哦)

import沒幫我們排版,可以用下面的排版Ctrl+Alt+L,但如果用Ctrl+Alt+O,排版只會針對import的部分和將沒用到的import拿掉


到指定的行數

Line...:Ctrl+G

游標在括號(花括、角括、圓括)使用,游標會跳到[開始 | 結束]

MoveCaret to Matching Brace:Ctrl+Shift+M

單行[移除]註解,也可以選多行,不管是java、XML都可以

Comment with Line Comment:Ctrl+/

上一個呼叫的程式碼

Ctrl+Alt+Left(沒Ctrl是上一頁)
我試的結果無效,但按上面的按鈕卻可以,如果一定要用就改快速鍵吧!

下一個呼叫的程式碼

Ctrl+Alt+Right(沒Ctrl是下一頁)
我試的結果無效,但按上面的按鈕卻可以,如果一定要用就改快速鍵吧!

排版

Reformat Code:Ctrl+Alt+L

整體重命名

Rename...:Shift+F6

誰呼叫我,在方法名稱上按才有用

Call Hierarchy:Ctrl+Alt+H

看整個階層,包括父類、子類

Type Hierarchy:Ctrl+H

自動增加[全域 | 區域]變數

搜尋Assign可找到兩個Assign Shortcut...,預設都沒有快速鍵,但按了以後,還要點左邊的圖示,太慢了,不建議使用


這樣子的快速鍵就差不多了,其他建議用滑鼠去按,如下:
按右鍵Generate...快速鍵是Alt+Ins
這時就有很多常用的功能

顯示行號


※雖然用下圖的就可以顯示,但重啟Android Studio後,又不見了,這時可以用上圖的方法

字型、文字大小
預設的Default無法改,所以要複製一份出來,按Save As...,然後隨便打個字,就可以改了
Primary font是字型,用Eclipse時,大部分的人都喜歡用Consolas

TODO、FIXME

 點進去還可以改一些設定


※上圖是所有預設AndroidComments的效果
打開TODO,如果沒有,這種活頁標籤都是開View-->Tool Window
只會看到TODO和FIXME

※和Eclipse不一樣的地方是,只會找自己的專案,還有大小寫都可以,且沒有XXX

內鍵的快速功能

右邊有教學,關鍵字會閃,可惜我沒看到自定的功能

2016年8月3日 星期三

加Eclipse (Gradle 4)

我的EclipseVersion: Mars Release (4.5.0) Build id: 20150621-1200,目前都還沒有內鍵
安裝之前,先檢查裝了沒有
有很多方法,如下:
1.Window-->Preferences

2.File-->New-->Other

3.在隨便一個專案按右鍵選Configure,看有沒有Add Gradle Nature


4.Help-->About Eclipse


如果沒有的話,就Help-->Eclipse Marketplace,然後搜尋gradle,選圖示和官網一樣的大象
(我還看到有人是選gradle package的,功能更多,這篇以這個為例)

下一步、同意、完成後,會有重啟Eclipse的提示,重啟後再依上面的圖檢查看看裝好了沒,沒有就重新再裝


※測試

裝好後,新增一個Gradle專案,File-->New-->Gradle-->Gradle Project
會發現圖示會綠綠的,而且在根目錄已經有build.gradle檔了,去網路下載gradle後貼上去,還要在專案按右鍵gradle-->Refrest Gradle Project


※其他設定

Window-->Show View-->Other-->Gradle
可看到兩個View,如下圖,已經幫我們用好相關命令了,選到想執行的命令按右鍵Run Gradle Tasks,執行的結果可在下選左邊的Gradle Executions的View看見,當然Console也是有,只是Gradle Executions 顯示的內容比較詳細,也比較漂亮



在Gradle專案按右鍵,或者隨便一個資料夾或檔按按右鍵,都會有Run As -->Run Configurations
另外一個方法是Run-->Run Configurations,都會出現下面的圖

會出現build是因為我剛剛執行過build了,可以自己加

2016年8月1日 星期一

下載jar檔、第三方jar檔 (Gradle 3)

※下載jar檔

apply plugin: 'java'
    
task xxx << {
    sourceSets*.java.srcDirs*.each{ it.mkdirs() }
    sourceSets*.resources.srcDirs*.each{ it.mkdirs() }
}
    
repositories {
    mavenCentral()
    
    jcenter {
        url "http://jcenter.bintray.com/"
    }
    
    mavenLocal()

    flatDir {
        dirs 'lib'
    }
    
    flatDir {
        dirs 'lib1', 'lib2'
    }
}
    
dependencies {
    compile group: 'org.springframework', name: 'spring-webmvc', version: '4.3.2.RELEASE'
    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.1.Final'
}

※repositories 的部分在23.25~23.46 專門講這些,反正就是要寫一些地方讓它去找jar,不一定要像我寫這麼多,而且寫法也不只一種,參考官網的寫法

※dependencies的部分在Example 23.4. Module dependencies,寫法也是好幾種,最左邊有compile、runtime…等,在7.3. Dependency configurations有講,有四個合法值
.compile:編譯時需要jar
.runtime:預設的,執行時需要jar
.testCompile:測試、編譯時需要jar
.testRuntime:測試、執行時需要jar

※網路下載和maven一樣,如下:

※執行gradle clean build後,會在C:\Users\使用者名稱\.gradle\caches增加jar檔



※第三方jar檔

如果網路上找不到,例如自己寫的一定找不到,我一樣寫一個package叫ttt,然後class叫Test, 寫一支echo方法,印出Hello World,最後包成xxx.jar

隨便放在一個地方,假設我放在ooo資料夾裡,然後整個拿到gradle_test資料夾裡
gradle.build的dependencies修改如下(其他的都和上面一樣):
dependencies {
    compile files('ooo/xxx.jar')
}

※然後將上一篇的ZYX.App.java多增加一行new ttt.Test().echo();

※執行gradle clean build(因為有加new ttt.Test().echo(),所以如果將dependencies裡的compile files拿掉會build fail),files是Project裡的method

※執行java -cp ooo\xxx.jar;build\libs\gradle_test.jar ZYX.App,如下:


※以上是javaSE,如果要用web的,可以看第47章

2016年7月29日 星期五

Hello World (Gradle 2)

在build.gradle打上apply plugin: 'java'然後執行gradle tasks會看到有更多的task出現了,多出來的參考45.3. Tasks

※產生資料夾

apply plugin: 'java'
task xxx << {
    sourceSets*.java.srcDirs*.each{ it.mkdirs() }
    sourceSets*.resources.srcDirs*.each{ it.mkdirs() }
}

※打上 gradle xxx 就執行了,如果不確定,可以先不要mkdirs(),先print it看一下

※srcDirs和resources.srcDirs在Table 45.9. Java plugin - source set properties有寫

※第一行產生src/main(test)/java

※第二行產生src/main(test)/resources,可根據需要再加


※build、clean

打上gradle build會產生build資料夾,clean會刪除

※build的架構如下:

build有兩個子資料夾libs和tmp,libs就一個jar檔,名稱是專案名稱
tmp下還有資料夾叫jar,裡面放的就一個檔案,叫MANIFEST.MF,內容也只有一行
Manifest-Version: 1.0

也可以像maven那樣,用gradle clean build,只用build會顯示11個,用了clean build,第一行會出現clean,如下:

假設下的是build,那麼他會從compileJava一直到build
又假設下的是test,那麼他會從compileJava一直到test
各個功能在做什麼事,要看Table 45.1. Java plugin - tasks,但這張表沒照順序,以我上面的圖,或你自己執行的為準
Example 44.2. Building a Java project還有
clean:刪除build資料夾
assemble:編譯但不測試
check:編譯並測試
所以我知道的總共15個

還有三個在dos沒有看到,javadoc、uploadArchives、cleanTaskName,javadoc會在build底下產生一個子資料夾就docs,其他兩個我試的結果都是找不到task


※測試

1.在src\main\java裡加上一個package,叫ZYX,裡面放一支Class,叫App.java,自己寫一支Hello World

2.下gradle build,會產生build資料夾,裡面有classes和libs等,classes最裡面真的有class檔,而libs裡有jar檔,jar檔裡也看得到class

3.下java -cp build\libs\gradle_test.jar ZYX.App即可看到結果,如下圖:



2016年7月25日 星期一

基本 Build Script (Gradle 1)

到gradle官網下載解壓後,設定環境變數,指到bin目錄,然後path加一下
最後到第16章練習,以下是一些心得

在命令提示字元輸入gradle,就會在「當前目錄」和「C:\Users\使用者名稱」增加一個目錄,叫「.gradle」

要練習的檔案都存成build.gradle,程式碼最後有沒有「;」都可以

打上gradle直接按enter會有提示說要gradle 後要加上task才能執行
如果要看全部的task就要下gradle tasks
gradle --help 看說明
gradle help --task task名稱,可以看到Task的包在org.gradle.api,是個介面
-q是只要印log的意思

※基本task

task hello1 {
    doLast {
        println 'Hello world1!'
    }
}
    
task hello2 {
    doLast {
        println 'Hello world2!'
    }
}

※gradle hello1
gradle hello2

※把task想成一個method較好理解

※doLast不寫也ok,是最後執行的意思,還有doFirst,下面還會有範例


※<<

task hello1 << {
    println 'Hello world1!'
}
    
task hello2 << {
    println 'Hello world2!'
}

※也可以用「<<」


※dependsOn

task hello << {
    println 'Hello world!'
}
    
task intro(dependsOn: hello) << {
// task intro(dependsOn: 'hello') << {
// task intro(dependsOn: "hello") << {
    println "I'm Gradle"
}

※intro依賴hello,所以gradle intro時,會先呼叫hello,然後再呼叫自己

※「'」「"」都可以,在這裡沒差別,下面還有範例會說明


※迴圈

task count << {
    10.times { print "$it " }
}

※print沒有ln,所以不會換行

※只要是變數,就一定要用「"」,用「'」不行,會把它當字串

※it是內鍵的變數,10.times表示跑10次,一樣從0開始


※自定迴圈變數

task hello1 {
    10.times {
        xxx -> print "$xxx "
    }
}

10.times { c ->
    task "xxx$c" << {
        println "I'm task number $c"
    }
}

※要使用變數,要用「$」開頭

※gradle -q xxx0會印出I'm task number 0

※xxx0~xxx9也會個別印出自己的

※呼叫xxx是不行的,因為task定的名稱後面有變數


※迴圈的依賴

10.times { c ->
    task "xxx$c" << {
        println "I'm task number $c"
    }
}
xxx2.dependsOn xxx4, xxx6, xxx9

※gradle -q xxx2
I'm task number 4
I'm task number 6
I'm task number 9
I'm task number 2
自己會最後執行

※如果下其他的,如gradle -q xxx6不會有依賴,只會印出自己


※執行順序1

task hello << {
    println '$hello.name 2'
}
    
hello.doFirst {
    println '$hello.name 1'
}
    
hello.doLast {
    println "$hello.name 3"
}
    
hello << {
    println '$hello.name 4'
}

※以doFirst最先,然後自己,最後是doLast

※如果再呼叫,再排最後,如2和4一樣,但2寫的比較前面,會先執行

※要注意變數用「'」和「"」的差別


※執行順序2

task hello {
    doLast {
        println '$hello.name 3'
    }
    
    doFirst {
        println "$hello.name 2"
    }
    
    println "$hello.name 1"
}

※執行順序1,是用hello去「.」,這裡直接寫doLast、doFirst

※此時自己是最先執行的,結果如下:
hello 1
hello 2
$hello.name 3


※ext變數

task ooo {
    ext.p = "ppp"
}
    
task xxx << {
    println ooo.p
}

※呼叫xxx,可以得到ppp


※預設task

defaultTasks 'ooo', 'xxx'
    
task xxx << {
    println 'I\'m xxx'
}
    
task ooo << {
    println 'I\'m ooo'
}
    
task other << {
    println "I'm not a default task!"
}

※gradle -q會自動呼叫ooo和xxx的task,順序是左邊最先,右邊最後,other當然不會執行


※呼叫不同task,取得不同的version

task ooo << {
    println "I\'m $version"
}
    
task xxx(dependsOn: 'ooo') << {
    println 'I\'m xxx'
}
    
gradle.taskGraph.whenReady {taskGraph ->
    if (taskGraph.hasTask(xxx)) {
        version = 'xxx'
    } else {
        version = 'ooo'
    }
}

※結果:
gradle -q ooo
I'm ooo

gradle -q xxx
I'm xxx
I'm xxx

※version是內鍵的,不能改


※內鍵的project

task hello {
    println project.name
    println project.buildDir
}

※project直接點就有一些功能了,還有很多,可按下圖綠色的DSL Reference,然後選右邊的Core types的Project查詢


上面是Properties,下面還有Methods,當然也是可以,以下寫一個瀏覽目錄的程式(修改14.14的範例)
task hello {
    // ConfigurableFileTree file = fileTree('C:\\Users\\bruce_java\\Downloads\\mybatis-3.3.0');
    // fileContent(file.getDir());
    
    File file = file('C:\\Users\\bruce_java\\Downloads\\mybatis-3.3.0');
    println file
    fileContent(file);
}
    
void fileContent(File f) {
    fileContent(f, '')
}
    
void fileContent(File f, String indent) {
    def fs = f.listFiles().sort()
    fs.each { File file ->
        if(file.isDirectory()) {
            println indent + "d-$file.name"
            fileContent(file, indent + "\t")
        } else if(file.isFile()) {
            println indent + "l-$file.name"
        }  
    }
}

※Project的file方法回傳java.io.File;而fileTree回傳ConfigurableFileTree,裡面的getDir方法也是回傳java.io.File,所以註解的部分也是可以,只是看起來比較不像純java

加Eclipse (Maven 3)

Eclipse新版的都已經有內鍵Maven了
Window-->Preferences

除了 User Settings 外,Installations 也要看一下是不是自己下載的版本

Eclipse已經自動抓到了,因為前兩篇已說過一些觀念,所以錯了要會改

再來的操作的方式我之前寫Struts2有寫過,看這篇

然後Run-->Run Configurations...

※右邊綠框取完名字,按下Apply後,會到左邊綠框的位置,以後可直接點取拿來修改或執行

※雖然叫Goals,但phases、options、goals都可以,反正它就是下指令的地方

※Browse Workspaces...和 Browse File System就是選maven 專案用的,擇其一
Add按鈕是增加-D時用的參數
以上一篇第三方jar檔為例

我試的是Browse File System按鈕,將上一篇的maven加進來,要選到pom.xml那一層
Add按鈕的key,「-D」不用打
執行後,真的在local repository新增了

有一些的checkbox,
Offline=mvn -o,不使用網路更新依賴
Update snapshots=mvn -U,強制下載
Debug Output=mvn -X,執行mvn …發生錯誤時,錯誤資訊不夠多,可加上-X
skipTests=mvn -DskipTests,可以忽略測試
Non-recursive=mvn -N,這有可能是有父專案時,不要更新到父專案吧!我沒用過
Resolve Workspace artifacts:如果專案p1依賴p2和p3專案,那只要勾這個,就會將p2和p3下載到p1裡


如果用的是專案,那在專案按右鍵Run as已經有內鍵的clean、test、install了,generate-sources感覺像是validate

※build...(有點點點的)永遠都會跳出Run-->Run Configurations...的畫面,但沒有左邊的部分

※build只有第一次會跳出Run-->Run Configurations...的畫面,而每次都會幫你存個名字,就是
Run-->Run Configurations...圖右邊的綠框,會跳出你要執行哪一個的畫面

※Run Configurations...等同Run-->Run Configurations...


打上第三方的GAV後,會看到jar檔已經進來了

但maven只會幫我們下載一次,如果下載失敗(網路斷線之類的),這招就沒用了,在命令模式可加上「-U」強制重新下載,在Eclipse可在專案按右鍵Maven,然後用如下的設定

※執行的時候就簡單了,Eclipse會提示


※java版本

在專案按右鍵Properties

預設是1.5,當然可以用eclipse改,但如果用maven改的話,要在mvn repository網站找關鍵字「Apache Maven Compiler Plugin」,只要GAV就好,我選目前最新的3.5.1
然後在pom.xml加設定build(和dependencies同層)

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

※source和target裡面都是1.8版,所以也可以在<properties>裡面設定變數來用,只要改完pom.xml就要按-U的畫面強制更新,此時再看Java Compiler就會改改了

※我有試過把target刪除,發現還是1.8,但那個勾就沒有了

※一般專案可以轉換成maven專案,但架構就不一樣了,就不會是src/main/java之類的了



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