Soumettre la recherche
Mettre en ligne
淺談 Groovy 與 Gradle
•
26 j'aime
•
8,411 vues
Justin Lin
Suivre
- 從 Java 到 Groovy - 使用 Groovy 建立 DSL - 自動化工具 Gradle - Gradle 與 IDE
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 39
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Spring 2.0 技術手冊第四章 - Spring AOP
Spring 2.0 技術手冊第四章 - Spring AOP
Justin Lin
Spring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 Spring
Justin Lin
Gitのよく使うコマンド
Gitのよく使うコマンド
YUKI Kaoru
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
JobSchedulerでのジョブの多重実行・排他制御
JobSchedulerでのジョブの多重実行・排他制御
OSSラボ株式会社
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Justin Lin
負荷試験ツールlocustを使おう
負荷試験ツールlocustを使おう
iRidge, Inc.
計算量のはなし(Redisを使うなら必読!O(logN)など)
計算量のはなし(Redisを使うなら必読!O(logN)など)
Makoto SAKAI
Recommandé
Spring 2.0 技術手冊第四章 - Spring AOP
Spring 2.0 技術手冊第四章 - Spring AOP
Justin Lin
Spring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 Spring
Justin Lin
Gitのよく使うコマンド
Gitのよく使うコマンド
YUKI Kaoru
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
JobSchedulerでのジョブの多重実行・排他制御
JobSchedulerでのジョブの多重実行・排他制御
OSSラボ株式会社
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Spring 2.0 技術手冊第五章 - JDBC、交易支援
Justin Lin
負荷試験ツールlocustを使おう
負荷試験ツールlocustを使おう
iRidge, Inc.
計算量のはなし(Redisを使うなら必読!O(logN)など)
計算量のはなし(Redisを使うなら必読!O(logN)など)
Makoto SAKAI
Planet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: Bigdam
SATOSHI TAGOMORI
ログ管理のベストプラクティス
ログ管理のベストプラクティス
Akihiro Kuwano
本当に怖いパフォーマンスが悪い実装 #phpcon2013
本当に怖いパフォーマンスが悪い実装 #phpcon2013
Yahoo!デベロッパーネットワーク
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
Azure上の データベース 機能の選び方。KVSからDWHまで
Azure上の データベース 機能の選び方。KVSからDWHまで
Daisuke Masubuchi
Spring 2.0 技術手冊第三章 - IoC 容器
Spring 2.0 技術手冊第三章 - IoC 容器
Justin Lin
vm meetup_tokyo #1 NSX の運用と DFW トラブルシューティング
vm meetup_tokyo #1 NSX の運用と DFW トラブルシューティング
富士通クラウドテクノロジーズ株式会社
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
ドメイン駆動設計 実践ガイド
ドメイン駆動設計 実践ガイド
増田 亨
Spring 2.0 技術手冊第二章 - Spring 入門
Spring 2.0 技術手冊第二章 - Spring 入門
Justin Lin
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
実践 Git - 低レベルに知る Git
実践 Git - 低レベルに知る Git
Youhei Nitta
Jenkinsとamazon ecsで コンテナCI
Jenkinsとamazon ecsで コンテナCI
shigeyuki azuchi
Spring 12年の歴史
Spring 12年の歴史
movmov
Kongの概要と導入事例
Kongの概要と導入事例
briscola-tokyo
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
Tomoaki Uchida
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
lestrrat
バージョン管理のワークフロー
バージョン管理のワークフロー
add20
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
Takafumi Yoshida
SSH力をつけよう
SSH力をつけよう
(^-^) togakushi
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Justin Lin
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
Contenu connexe
Tendances
Planet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: Bigdam
SATOSHI TAGOMORI
ログ管理のベストプラクティス
ログ管理のベストプラクティス
Akihiro Kuwano
本当に怖いパフォーマンスが悪い実装 #phpcon2013
本当に怖いパフォーマンスが悪い実装 #phpcon2013
Yahoo!デベロッパーネットワーク
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
Azure上の データベース 機能の選び方。KVSからDWHまで
Azure上の データベース 機能の選び方。KVSからDWHまで
Daisuke Masubuchi
Spring 2.0 技術手冊第三章 - IoC 容器
Spring 2.0 技術手冊第三章 - IoC 容器
Justin Lin
vm meetup_tokyo #1 NSX の運用と DFW トラブルシューティング
vm meetup_tokyo #1 NSX の運用と DFW トラブルシューティング
富士通クラウドテクノロジーズ株式会社
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
ドメイン駆動設計 実践ガイド
ドメイン駆動設計 実践ガイド
増田 亨
Spring 2.0 技術手冊第二章 - Spring 入門
Spring 2.0 技術手冊第二章 - Spring 入門
Justin Lin
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
実践 Git - 低レベルに知る Git
実践 Git - 低レベルに知る Git
Youhei Nitta
Jenkinsとamazon ecsで コンテナCI
Jenkinsとamazon ecsで コンテナCI
shigeyuki azuchi
Spring 12年の歴史
Spring 12年の歴史
movmov
Kongの概要と導入事例
Kongの概要と導入事例
briscola-tokyo
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
Tomoaki Uchida
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
lestrrat
バージョン管理のワークフロー
バージョン管理のワークフロー
add20
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
Takafumi Yoshida
SSH力をつけよう
SSH力をつけよう
(^-^) togakushi
Tendances
(20)
Planet-scale Data Ingestion Pipeline: Bigdam
Planet-scale Data Ingestion Pipeline: Bigdam
ログ管理のベストプラクティス
ログ管理のベストプラクティス
本当に怖いパフォーマンスが悪い実装 #phpcon2013
本当に怖いパフォーマンスが悪い実装 #phpcon2013
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
Azure上の データベース 機能の選び方。KVSからDWHまで
Azure上の データベース 機能の選び方。KVSからDWHまで
Spring 2.0 技術手冊第三章 - IoC 容器
Spring 2.0 技術手冊第三章 - IoC 容器
vm meetup_tokyo #1 NSX の運用と DFW トラブルシューティング
vm meetup_tokyo #1 NSX の運用と DFW トラブルシューティング
PHP AST 徹底解説
PHP AST 徹底解説
ドメイン駆動設計 実践ガイド
ドメイン駆動設計 実践ガイド
Spring 2.0 技術手冊第二章 - Spring 入門
Spring 2.0 技術手冊第二章 - Spring 入門
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
実践 Git - 低レベルに知る Git
実践 Git - 低レベルに知る Git
Jenkinsとamazon ecsで コンテナCI
Jenkinsとamazon ecsで コンテナCI
Spring 12年の歴史
Spring 12年の歴史
Kongの概要と導入事例
Kongの概要と導入事例
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
いまさら聞けないselectあれこれ
いまさら聞けないselectあれこれ
バージョン管理のワークフロー
バージョン管理のワークフロー
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
SSH力をつけよう
SSH力をつけよう
En vedette
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Justin Lin
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理
Justin Lin
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法
Justin Lin
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型
Justin Lin
Java SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Justin Lin
Java 8 與 retrolambda
Java 8 與 retrolambda
Justin Lin
資料結構
資料結構
Justin Lin
Python 起步走
Python 起步走
Justin Lin
3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD
Justin Lin
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
En vedette
(20)
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 1 章 - Java平台概論
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 8 章 - 例外處理
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 9 章 - Collection與Map
Java SE 8 技術手冊第 9 章 - Collection與Map
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Java 8 與 retrolambda
Java 8 與 retrolambda
資料結構
資料結構
Python 起步走
Python 起步走
3D 之邏輯與美感交會 - OpenSCAD
3D 之邏輯與美感交會 - OpenSCAD
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Similaire à 淺談 Groovy 與 Gradle
Groovy:Candy for Java Developers
Groovy:Candy for Java Developers
foxgem
Android gradle 从入门到gg 3
Android gradle 从入门到gg 3
Jun Liu
第十一堂 學習編譯與上架
第十一堂 學習編譯與上架
力中 柯
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
Ching Yi Chan
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
Weizhong Yang
Java Build Tool course in 2011
Java Build Tool course in 2011
Ching Yi Chan
Android gradle 从入门到gg 0
Android gradle 从入门到gg 0
Jun Liu
Grails敏捷项目开发
Grails敏捷项目开发
Michael Yan
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
CC
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
Philip Zheng
如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進
Mu Chun Wang
Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程
洧杰 廖
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
Jackson Tian
前端自動化工具
前端自動化工具
國昭 張
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
Mu Chun Wang
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
Wei-Yu Chen
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
Stipc Nsysu
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
LainZQ
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
taobao.com
Similaire à 淺談 Groovy 與 Gradle
(20)
Groovy:Candy for Java Developers
Groovy:Candy for Java Developers
Android gradle 从入门到gg 3
Android gradle 从入门到gg 3
第十一堂 學習編譯與上架
第十一堂 學習編譯與上架
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
Java Build Tool course in 2011
Java Build Tool course in 2011
Android gradle 从入门到gg 0
Android gradle 从入门到gg 0
Grails敏捷项目开发
Grails敏捷项目开发
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進
Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
前端自動化工具
前端自動化工具
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
Plus de Justin Lin
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Justin Lin
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Justin Lin
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Justin Lin
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Justin Lin
Ch09 整合資料庫
Ch09 整合資料庫
Justin Lin
Ch08 自訂標籤
Ch08 自訂標籤
Justin Lin
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
Ch04 會話管理
Ch04 會話管理
Justin Lin
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
14. 進階主題
14. 進階主題
Justin Lin
13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin
12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin
11. 常用內建模組
11. 常用內建模組
Justin Lin
10. 資料永續與交換
10. 資料永續與交換
Justin Lin
9. 資料結構
9. 資料結構
Justin Lin
Plus de Justin Lin
(20)
Ch14 簡介 Spring Boot
Ch14 簡介 Spring Boot
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
Ch12 Spring 起步走
Ch12 Spring 起步走
Ch11 簡介 JavaMail
Ch11 簡介 JavaMail
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
Ch09 整合資料庫
Ch09 整合資料庫
Ch08 自訂標籤
Ch08 自訂標籤
Ch07 使用 JSTL
Ch07 使用 JSTL
Ch06 使用 JSP
Ch06 使用 JSP
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch04 會話管理
Ch04 會話管理
Ch03 請求與回應
Ch03 請求與回應
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
14. 進階主題
14. 進階主題
13.並行、平行與非同步
13.並行、平行與非同步
12. 除錯、測試與效能
12. 除錯、測試與效能
11. 常用內建模組
11. 常用內建模組
10. 資料永續與交換
10. 資料永續與交換
9. 資料結構
9. 資料結構
淺談 Groovy 與 Gradle
1.
淺談 Groovy 與 Gradle 林信良 http://openhome.cc
2.
議程 • • • • 從 Java 到
Groovy 使用 Groovy 建立 DSL 自動化工具 Gradle Gradle 與 IDE
3.
從 Java 到
Groovy
4.
Hello, world! • 這是
Java …
5.
• 這是 Groovy
… - 預設 public - 內建 print 函式
6.
• 短一點 … -
自動產生 Setter - 自動產生 Getter
7.
• 省一點 … -
Gstring 直譯 - 透過 Setter 設值 - 透過 Getter 取值 - 括號、逗號可省
8.
• • 還要更少 … 太少了? …
9.
• 多一點 … -
List - Map - Range
10.
• 方便一點 …
11.
• 安全一點 …
12.
• 強大一點 … -
建構式 - 運算子重載
13.
• 更強大一點 … String.prototype.toUpperEach
= function(action) { for(var i = 0; i < this.length; i++) { action(this.charAt(i).toUpperCase()); } }; 'abcdef'.toUpperEach(function(ch) { console.log(ch); });
14.
• 強大、強大再強大 …
XD function toString() { return this.name + ', ' + this.age; } var p1 = {name : 'Justin', age : 38}; var p2 = {name : 'Monica', age : 35}; p1.toString = toString; console.log(p1.toString()); p2.toString = toString; console.log(p2.toString());
15.
使用 Groovy 建立
DSL
16.
Groovy 的 Closure •
Closure? • Lambda?匿名函式?一級函式?
17.
• Closure 應用
18.
• this -
像 Java 的 this,參考至定義 Closure 的類別之實例。 • owner - 包圍 Closure 之物件,也許是 this 參 考之物件,也許是包圍 Closure 之 Closure。 • delegate - 預設是 owner,可以變更指定。
19.
20.
• DSL –
Domain Specific Language • 構思 …傳入 Closure、會有 make、to、 from、body、xml 等方法 …
21.
簡單吧?
22.
自動化工具 Gradle
23.
建構工具元老 • 一組 XML
標籤 - 專案(Project) - 目標(Target) - 任務(Task) • Ant 的經驗累積 <?xml version="1.0" encoding="UTF-8"?> <project name="helloworld" default="build"> <property name="src.dir" value="src" /> <property name="lib.dir" value="libs" /> <property name="resource.dir" value="resources" /> <property name="build.dir" value="build" /> <property name="dist.dir" value="dist" /> <!-- 刪除 build.dir 與 dist.dir --> <target name="clean"> <delete dir="${build.dir}" /> <delete dir="${dist.dir}" /> </target> <!-- 建立 build.dir 與 dist.dir 與複製相關設定檔 --> <target name="prepare" depends="clean"> <mkdir dir="${build.dir}" /> <mkdir dir="${dist.dir}" /> <mkdir dir="${build.dir}/libs" /> <mkdir dir="${build.dir}/all" /> </target> ... - 自動建構的標準化 - 相依管理的需求(以 Ant Ivy 補足)
24.
專案管理工具 • 一組 XML
標籤 - Convention Over Configuration - Archetype plugin - 相依性宣告 • Maven 的經驗累積 - 相依性管理的濫用 - 修改預設行為的難度 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://maven.apache.org/POM/4.0. 0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>tw.com.codedata</groupId> <artifactId>helloworld</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>helloworld</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
25.
企業自動化工具 • 保持 Ant
的自由度、低於 Maven 學習門檻 - - - - 有著 Lifecycle 的精神 相依性管理機制的便利 DSL 的可讀性與容易撰寫 引用 plugin 獲得需要的編譯功能 • 許多開放原始碼專案與工具採用 Gradle - Hibernate 從 Maven 改用 Gradle … - Spring 只提供 Maven 或 Gradle 兩種下載方式 - Android Studio 使用 Gradle 建構專案
26.
第一個 Gradle 專案 apply
plugin: 'java' apply plugin:'application' mainClassName = "tw.com.codedata.HelloWorld" repositories { mavenCentral() } dependencies { compile group: 'commons-logging', name: 'commons-logging', version: '1.1.1' compile group: 'log4j', name: 'log4j', version: '1.2.16' }
27.
第一個 Gradle 專案 $
gradle run :compileJava :processResources apply plugin: 'java' :classes :run apply plugin:'application' INFO [main] (HelloWorld.java:11) - Hello World mainClassName = "tw.com.codedata.HelloWorld" BUILD SUCCESSFUL repositories { mavenCentral() } Total time: 6.027 secs dependencies { compile group: 'commons-logging', name: 'commons-logging', version: '1.1.1' compile group: 'log4j', name: 'log4j', version: '1.2.16' }
28.
Every configuration file
becomes a programming language…
29.
Hello World • build.gradle Closure task
hello { doLast { println 'Hello world!' } } Closure • 它是一個 Groovy … $ gradle -q hello Hello world!
30.
task upper <<
{ String someString = 'mY_nAmE' println "Original: " + someString println "Upper case: " + someString.toUpperCase() } task count << { 4.times { print "$it " } } 4.times { counter -> task "task$counter" << { println "I'm task number $counter" } } $ gradle -q task1 I'm task number 1
31.
• 我不只是設定檔 …
XD task checksum << { fileList('../antLoadfileResources').each {File file -> ant.checksum(file: file, property: "cs_$file.name") println "$file.name Checksum: ${ant.properties["cs_$file.name"]}" } } task loadfile << { fileList('../antLoadfileResources').each {File file -> ant.loadfile(srcFile: file, property: file.name) println "I'm fond of $file.name" } } File[] fileList(String dir) { file(dir).listFiles({file -> file.isFile() } as FileFilter).sort() }
32.
• 不用 Groovy
太多知識,先知道二件事 … - Groovy DSL 大量運用 Closure 機制 - Gradle 的實作大量使用 Delegation 模式 嗯?好像哪裡怪怪的?
33.
Gradle 與 IDE
34.
Gradle 建立基本專案目錄? • build.gradle
可視為 Groovy 原始碼檔案 apply plugin: 'java' task "create-dirs" << { sourceSets*.java.srcDirs*.each { it.mkdirs() } sourceSets*.resources.srcDirs*.each { it.mkdirs() } } • 使用 gradle-templates - https://github.com/townsfolk/gradle-templates - gradle createJavaProject - gradle createWebappProject - gradle createScalaProject - ...
35.
Eclipse • build.gradle apply plugin:
'eclipse'
36.
• 安裝 eclipse-integration-gradle -
https://github.com/spring-projects/eclipse-integration-gradle/ ….
37.
NetBeans • Gradle Plugins -
http://plugins.netbeans.org/plugin/44510/gradle-support
38.
39.
參考資料 • Groovy - http://groovy.codehaus.org/Documentation -
http://www.oracle.com/technetwork/articles/java/groovy1695411.html - http://java.dzone.com/articles/groovy-dsl-simple-example • Gradle - http://www.gradle.org/documentation - http://www.codedata.com.tw/tag/gradle/ • Gradle 與 IntelliJ IDEA - http://blog.lyhdev.com/2013/11/intellij-idea-communityedition-free.html
Télécharger maintenant