使用Gradle自定義配置構建Java程序

自定義源代碼路徑、編譯輸出路徑

某些情況下默認的源代碼路徑等可能不符合我們項目的結構,這時除了修改項目結構外,我們還可以自定義源代碼路徑等配置。

build.gradle

//使用 Java 插件
//默認在 src/main/java下查找源代碼
apply plugin: 'java'
//定義項目的版本
version = 0.1
//設置 Java 兼容版本
sourceCompatibility = 1.8
//jar 包相關配置
jar {
    //清單文件配置
    manifest {
        //啓動類
        attributes 'Main-Class': 'com.manning.gia.todo.ToDoApp'
    }
}
//改變項目默認結構
sourceSets {

    //設置源代碼所在目錄
    main {
        java {
            srcDirs = ['src']
        }
    }

    //設置測試代碼所在目錄
    test {
        java {
            srcDirs = ['test']
        }
    }
}

//改變編譯目錄
buildDir = 'out'

我們將源代碼從默認配置的路徑轉移到 src 下,然後進行編譯(gradle build)

│  build.gradle
│  使用Gradle自定義配置構建Java程序.md
│
├─.gradle
│  ├─3.4
│  │  ├─file-changes
│  │  │      last-build.bin
│  │  │
│  │  ├─fileContent
│  │  │      fileContent.lock
│  │  │
│  │  └─taskHistory
│  │          fileHashes.bin
│  │          fileSnapshots.bin
│  │          taskHistory.bin
│  │          taskHistory.lock
│  │
│  └─buildOutputCleanup
│          built.bin
│          cache.properties
│          cache.properties.lock
│
├─out
│  ├─classes
│  │  └─main
│  │      └─com
│  │          └─manning
│  │              └─gia
│  │                  └─todo
│  │                      │  ToDoApp.class
│  │                      │
│  │                      ├─model
│  │                      │      ToDoItem.class
│  │                      │
│  │                      ├─repository
│  │                      │      InMemoryToDoRepository.class
│  │                      │      ToDoRepository.class
│  │                      │
│  │                      └─utils
│  │                              CommandLineInput.class
│  │                              CommandLineInputHandler$1.class
│  │                              CommandLineInputHandler.class
│  │
│  ├─libs
│  │      使用Gradle自定義配置構建Java程序-0.1.jar
│  │
│  └─tmp
│      ├─compileJava
│      └─jar
│              MANIFEST.MF
│
└─src
    └─com
        └─manning
            └─gia
                └─todo
                    │  ToDoApp.java
                    │
                    ├─model
                    │      ToDoItem.java
                    │
                    ├─repository
                    │      InMemoryToDoRepository.java
                    │      ToDoRepository.java
                    │
                    └─utils
                            CommandLineInput.java
                            CommandLineInputHandler.java

此時我們可以看到,編譯輸出目錄變更爲 out ,並且正常編譯,且可以執行相關程序。

配置和使用外部依賴

下面我們使用 Apache Commons Lang 庫來替換我們的代碼(這部分內容不涉及到gradle,故不詳細闡述)

很顯然,我們引入了第三方庫,需要告知 Gradle 否則編譯是不能通過的,會被以下錯誤:

www.coderknock.com$ gradle build
:compileJava
D:\Windows\Desktop\LearnGradle\使用Gradle自定義配置構建Java程序\src\com\manning\gia\todo\ToDoApp.java:5: 錯誤: 程序包org.apache.commons.lang3不存在
import org.apache.commons.lang3.CharUtils;
                               ^
D:\Windows\Desktop\LearnGradle\使用Gradle自定義配置構建Java程序\src\com\manning\gia\todo\ToDoApp.java:17: 錯誤: 找不到符號
            command = CharUtils.toChar(input, DEFAULT_INPUT);
                      ^
  符號:   變量 CharUtils
  位置: 類 ToDoApp
2 個錯誤
:compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 1.517 secs

我們可以使用 Gradle 的依賴來實現。

在 build.gradle 添加

//定義倉庫,此處使用的是 Maven 的倉庫
//可以在 http://mvnrepository.com/ 或者 http://search.maven.org 【可能需要翻牆】 來查詢相關依賴
repositories {
    mavenCentral()
}

/**
 定義依賴相當於maven中的
 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
 <dependencies>
     <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-lang3</artifactId>
         <version>3.5</version>
     </dependency>
 </dependencies>
 */
dependencies {
    //group對應 groupId name 對應 artifactId  compile指定的是依賴使用的範圍
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
}

再次進行編譯

www.coderknock.com$ gradle build
//解析依賴,如果依賴不存在,則會在使用到該依賴時下載該依賴【再次構建時就不會下載了,除非手動刪除了下載的依賴或者更新了依賴的版本】
> Configuring > 0/1 projects > root project > Compiling D:\Windows\Desktop\LearnGradle\使用Gradle自定義配置構建Java程序\:compileJava
//此處就是從Maven中央庫下載相關依賴
Download https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.pom
Download https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar
:processResources NO-SOURCE
:classes
:jar UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava NO-SOURCE
:processTestResources NO-SOURCE
:testClasses UP-TO-DATE
:test NO-SOURCE
:check UP-TO-DATE
:build UP-TO-DATE

BUILD SUCCESSFUL

Total time: 40.259 secs

此時就可以正常編譯及運行程序了。
相關代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章