其他網址
Gradle 教程_w3cschool(不帶子目錄)
Gradle User Guide 中文版(帶子目錄) (英文版:Gradle User Manual)
Gradle DSL Version 6.5(Gradle英文文檔)
簡介
任務是最小的工作單元,每個任務由動作和任務依賴組成,對應類 org.gradle.api.Task
jar
其他網址
簡介
jar是任務,用於組裝 JAR 文件。
實例1:最簡單的grable打包
打出來的Jar包中,只包含了自己編寫的代碼編譯成的Class文件。其它依賴的Jar包中的類,不在其中。
1.Idea創建普通gradle工程:Idea項目系列--創建gradle工程_feiying0canglang的博客-CSDN博客
2.在src/main/java下新建org.example.a.Demo.java,內容爲:
package org.example.a;
public class Demo {
public static void main(String[] args) {
System.out.println("This is main");
}
}
4.修改build.gradle
plugins {
id 'java'
}
group 'com.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
jar {
manifest {
attributes "Main-Class": "org.example.a.Demo"
}
}
4.執行打包操作
法1:直接點gradle的build按鈕
法2:執行gradle jar命令
上邊第3步執行完之後,會在項目路徑的build\libs生成test_gradle-1.0-SNAPSHOT.jar
解壓test_gradle-1.0-SNAPSHOT.jar:
若build.gradle這樣寫:
plugins {
id 'java'
}
group 'com.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
jar {
manifest {
attributes "Main-Class": "org.example.a.Demo"
attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
}
}
生成的MANIFEST.MF結果:
因爲java插件已有jar任務,上邊兩種寫法其實只是修改了jar任務,若這樣寫build.gradle
plugins {
id 'java'
}
group 'com.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
生成的MANIFEST.MF結果:
4.測試結果
執行java -jar test_gradle-1.0-SNAPSHOT.jar,運行結果:
This is main
實例2:將第三方類打包進去
將第三方類也打包進去的方法
- 引用application插件,通過distTar或distZip打包。這樣生成的包裏不僅包含了自己項目中寫的源碼編輯成的jar包,還包括gradle中配置依賴的jar包,同時還生成了shell和bat腳本,通過腳本,可以直接運行我們的程序。
- 打jar包,直接依賴的第三方類庫中的類,一起打包到我們的jar中。(本例採用此法)
build.gradle
jar {
manifestContentCharset 'utf-8'
metadataCharset 'utf-8'
manifest {
attributes "Main-Class": "cn.buddie.GradleTest"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
也可以直接用java -jar xxx.jar運行
實例3:單jar包與tar包都生成
如果領導說,你即需要提供單個的jar,又需要提供tar包,怎麼辦呢?因爲修改了task jar,而task distTar是依賴於task jar。這樣的後果就是打出來的tar包中,已經包含了所有你依賴的第三方jar包。同時,你自己項目打出的jar包中,又包含了這些第三方jar包中的類。也就是所有第三方的類,都重複了!
解決方案爲:增加參數,讓task jar根據參數來決定是否將第三方依賴類打入自己的jar包。
jar {
manifestContentCharset 'utf-8'
metadataCharset 'utf-8'
manifest {
attributes "Main-Class": "cn.buddie.GradleTest"
}
if (project.hasProperty("allInOne")) {
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
}
增加了一個“allInOne”的參數,如果不指定參數,就不會將第三方依賴類打入jar包。這樣在執行task distTar時,不指定參數,打出來的tar中,第三方依賴類就只有一份。而在需要所有類在一個Jar包中的Jar文件時,可以使用參數打包
gradle jar -PallInOne