自定義源代碼路徑、編譯輸出路徑
某些情況下默認的源代碼路徑等可能不符合我們項目的結構,這時除了修改項目結構外,我們還可以自定義源代碼路徑等配置。
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
此時就可以正常編譯及運行程序了。
相關代碼