㈠ gradle是什麼呢
Gradle是一個構建工具。它是用來幫助我們構建app的,構建包括編譯、打包等過程。我們可以為Gradle指定構建規則,然後它就會根據我們的命令自動為我們構建app。androidStudio中默認就使用Gradle來完成應用的構建。有些同學可能會有疑問:」我用AS不記得給Gradle指定過什麼構建規則呀,最後不還是能搞出來個apk。
gradle構建工具多項目管理
實際使用中,往往需要管理的都不是單單一個項目,maven使用依賴,繼承,組成的概念,在父模塊指定自己的子模塊,並且准備一些各個子模塊公用的資源,配置信息等等。將打包的模塊與實現具體功能的模塊分開的做法來管理多個項目。Gradle在這一方面做得更加清楚。
㈡ 如何通俗地理解 Gradle
來自知乎:
如何通俗地理解 Gradle?
我以前一直用 Eclipse with ADT 來開發Android 項目,而且對它的基礎的原理掌握不深,直接上手開發的,沒有去考慮太多的東西。現在手頭上有一個新的項目要使用到Android Studio ,我早有耳聞AS大名,但是由於本人才疏學淺,這幾天在學習AS的過程中對Gradle這個東西表示很不能理解,找了很多資料但是都描述得很專業,所以想問問各位,有沒有什麼比較形象易懂的解釋來描述一下Gradle,它是什麼東西,它有什麼用,相對於Eclipse with ADT 中編譯Android 程序的機制,他有什麼優勢?
ghui
謝邀
Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基於Groovy的特定領域語言來聲明項目設置,而不是傳統的XML。當前其支持的語言限於java、Groovy和Scala,計劃未來將支持更多的語言。
上面是維基上對Gradle的解釋,相信一個沒有接觸過構建的人是不大能看明白的,當初我也是.下面是我對Gradle通俗的理解:
軟體開發講究代碼復用,通過復用可以使工程更易維護,代碼量更少..... 開發者可以通過繼承,組合,函數模塊等實現不同程度上的代碼復用.但不知你有沒有想過,軟體開發也是一種工程作業,絕不僅僅是寫代碼,還涉及到工程的各種管理(依賴,打包,部署,發布,各種渠道的差異管理.....),你每天都在build,clean,簽名,打包,發布,有沒有想過這種過程,也可以像代碼一樣被描述出來, 也可以被復用.
舉個例子
我是做Android開發的,你可知道國內有n個Android市場,n個手機品牌,n個手機尺寸......,一般公司都會針對不同的市場單獨發包用來統計不同渠道的下載量等情況,可能需要針對不同(品牌,尺寸等各種硬體信息)的手機做一些特殊的處理,這個時候你可以針對不同的情況單獨建一個工程,或者更好一點你可以通過一些變數來控制,像這樣:
if(isMoto){do something} else if(isHuawei){do something} ...
差異管理
但這兩種解決方法都有自己的缺點,特別是前一種有極大的代碼重復.後一種稍微好一點,但這種方式的差異是運行時的,不是靜態的,對於moto手機上的處理邏輯對華為手機來說一點作用也沒有,但這一段針對moto手機的處理邏輯也被裝到了華為手機上了,通過gradle的proctFlavor與buildtype可以實現靜態級的差異控制可以參考如何通過Gradle實現一套代碼開發不同特性的APK · ByGhui
說到前面的多渠道問題,不同的渠道一般會對應不同的渠道號,你當然可以通過修改一次打一個包這種純手工的方式來生成你的多渠道包,但據聽說國內某團購網站的Android App有100多個渠道.這里出現了什麼?重復,反復的去打包而且這些包之前的差異很小(只是渠道號不同),和寫代碼一樣我們應該復用,通過Gradle可以實現一個命令打出所有的渠道包,一個命令打出指定的渠道包.再復雜一點,你可能需要不同的渠道對應不同的簽名文件,不同的icon,不同的伺服器地址...這些都可以通過Gradle來方便的實現.
依賴管理:
做軟體開發你可能需要依賴各種不同的jar,library.你當然可以通過將.jar/library工程下載到本地再到你的工程中,但不知你是否聽說過國外有個叫中央倉庫的東西,在這個倉庫里你可以找到所有你能想到以及你從來沒聽說過的jar,aar...The Central Repository Search Engine這里可以找到所有你需要的依賴,而你需要的只是指定一個坐標,如下:
<img src="https://pic4.mg.com/_b.jpg" data-rawwidth="330" data-rawheight="24" class="content_image" width="330">剩下的依賴的尋找,下載,添加到classpath等你都不需要去關心,通過這種方式來維護依賴的好處有以下幾點:
剩下的依賴的尋找,下載,添加到classpath等你都不需要去關心,通過這種方式來維護依賴的好處有以下幾點:
依賴不會進入到你的版本控制倉庫中(默認會緩存到~/.gradle/下)
方便卸載裝載依賴(只是一條坐標依賴,不需要刪除即可)
方便的版本管理,如上圖中的2.3.3既是picasso的版本號,若改為+就表示從中央倉庫中下載最新的版本
不同工程的相同依賴不會存在重復副本(只在~/.gradle下存在一份)
項目部署
這方面我沒怎麼接觸過,但據我所知通過一些插件,可以實現自動將你的輸出(.jar,.apk,.war...)上傳到指定倉庫,自動部署...
羅哩羅嗦說了這么多,不知大家有沒有理解
總結一下:
Gradle是一種構建工具,它可以幫你管理項目中的差異,依賴,編譯,打包,部署......,你可以定義滿足自己需要的構建邏輯,寫入到build.gradle中供日後復用.
Gradle不是一種編程語言,它不能幫你實現軟體中的任何實際功能
通俗的解釋肯定是不嚴謹的解釋,不妥之處歡迎討論.
###
贊同過百,放出之前相關分享的幻燈片
###
截止到現在(1432311622353)共收到342個贊同與感謝,再次感謝大家的支持!如果你覺得我的分享對你有幫助,請關注我! 以後我會分享更多更優質的內容給大家.
說好的幻燈片在這里
(是之前在樂視時一次內部分享的幻燈片,內容有刪減(涉及到公司具體項目的部分),此幻燈片參考了很多其它的資料,內部的鏈接很值得大家打開看看)
編輯於 2017-02-2753 條評論感謝
nonesuccess
你都說了要通俗的理解,那就用不著學習什麼理論了,通俗著來就是了。
通俗的說:gradle是打包用的。
你覺得解決你的問題了嗎?如果沒解決,那是你的問題提得不夠好。比如我猜你應該提:為什麼要打包發布,打包發布有幾種常見方法,為什麼這些常見方法中要選gradle,等等。
針對我猜的這些內容,通俗的講是這樣的:
以在eclipse裡面寫java程序為例
為什麼需要打包:
最初寫完了,直接右鍵run就可以了。但是程序寫完了畢竟是要發布到伺服器上或者給別人用的,你第一不可能讓所有要運行的人都裝個eclipse,第二不可能把源代碼公布給所有人。所以你需要把你的代碼發布成二進制形式,讓其它環境方便運行,這就是打包。
為什麼用ant
打包的時候要做很多事,比如說配置文件中的用戶名和密碼,你本地開發和程序實際運行時的內容肯定不一致,所以需要有兩個文件,開發的時候用一個,實際運行的時候用一個。這樣每次打包的時候都要重復的做這些事,ant可以讓你用xml的形式把這些事情寫成腳本,然後自動運行。
為什麼用maven
你的項目要用很多jar包,比如你寫日誌要用個log4j吧,連資料庫要用個connector吧。這年頭寫程序不用個spring都不好意思出門,下載下來的spring包打開一看,密密麻麻的好幾十個jar,不知道用哪個不用哪個。而且,即便是你一狠心把這些jar包都放進來,很大可能性還是不能運行,因為還要依賴其它的jar包。哪天想升級個spring小版本,所有jar包都要重來一遍,你也不記得哪些是由於spring引進來的jar包了。
所以有了maven,你只要配置一下說我要用spring 3,所有jar包都給你下載好了,你直接運行就行了。趕明兒想升級版本,直接把3改成4,新的jar包也給你下載好了。
然後?
用了maven,jar包是方便了,但我打包的時候還是有好多事要做啊,然後你會發現maven實在是不知道怎麼做這些事,於是開始懷念ant。
gradle就是又能幹maven的活,又能幹ant的活,用groove語言寫腳本,表達能力還更強。
就這意思。
===
我也是這兩天才看了兩眼gradle,了解不深。簡化版如下:
ant可以自動化打包邏輯。
maven也可以自動化打包,相比於ant,它多做的事是幫你下載jar包。
但是maven的打包邏輯太死板,定製起來太麻煩,不如ant好用。gradle就是又能自動下jar包,又能自己寫腳本,並且腳本寫起來還比ant好用的這么個東西。
㈢ 如何在 Eclipse 下用 Gradle 構建 Web Application
使用的環境是: Eclipse IDE for Java EE Developers Kepler + JDK 1.7.
好, 下面正式開始:
1.安裝 Gradle 插件. 在 Eclipse Marketplace 中搜索 Gradle, 選擇安裝 Gradle Integration for Eclipse
2.新建一個 Dynamic Web Project, 在項目根目錄下新建 build.gradle 文件, 並向其中寫入如下內容:
importorg.gradle.plugins.ide.eclipse.model.Facet
applyplugin:'java'
applyplugin:'war'
applyplugin:'eclipse-wtp'
sourceCompatibility=1.7//設置JDK版本
webAppDirName='WebContent'//設置WebApp根目錄
sourceSets.main.java.srcDir'src'//設置Java源碼所在目錄
//設置maven庫地址
repositories{
mavenCentral()//中央庫
//maven{url'http://maven.oschina.net/content/groups/public/'}//自定義庫地址
}
//設置依賴
dependencies{
providedCompile'javax.servlet:servlet-api:2.5'//編譯期
providedRuntime'javax.servlet:jstl:1.2'//運行時
}
//設置ProjectFacets
eclipse{
wtp{
facet{
facetname:'jst.web',type:Facet.FacetType.fixed
facetname:'wst.jsdt.web',type:Facet.FacetType.fixed
facetname:'jst.java',type:Facet.FacetType.fixed
facetname:'jst.web',version:'3.0'
facetname:'jst.java',version:'1.7'
facetname:'wst.jsdt.web',version:'1.0'
}
}
}
3.接下來在項目上右擊 -> configure -> convert to Gradle project
4.再次在項目上右擊 -> Gradle -> Refresh All
5.如果沒有 web.xml 文件的話, 再右擊項目 -> Java EE Tools -> Generate Deployment Descriptor Stub
6.最後看下效果如何, 在 WebContent 下新建 index.jsp 裡面隨便寫點什麼, 然後項目上右擊 -> Run As -> Run on Server
如果成功顯示的話那麼就一切 OK 了.
㈣ gradle可以編譯android源碼嗎
方法/步驟
1
(可以省略)通過cmd命令行下載gradle源碼:
git clone https://github.com/spring-guides/gs-gradle-android.git
2
下載最新的gradle安裝包,地址:
http://gradle.org/downloads
點擊下載二進制文件
3
解壓到d盤,路徑為:D:\gradle-2.4
4
打開「計算機」-「右鍵」-「屬性」-「更改設置」-「高級」-「環境變數」,
在系統變數中,點擊新建,屬性名為GRADLE_HOME,屬性值為"D:\gradle-2.4"
5
打開「計算機」-「右鍵」-「屬性」-「更改設置」-「高級」-「環境變數」,
在系統變數中,找到Path,將";D:\gradle-2.4\bin"加入到Path中
6
打開cmd命令行,執行gradle,如果出現如圖所示,則說明gradle安裝成功
7
打開cmd命令行,進入android工程目錄,找到build.gradle文件,在目錄執行執行
gradle build
既可開始使用gradle打包apk,在成功後會在同目錄生成build文件夾,
㈤ android gradle 怎麼用本地包
千鋒扣丁學堂Android開發為您解答:
------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------
Build time: 2014-11-24 09:45:35 UTC
Build number: none
Revision:
Groovy: 2.3.6
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013 JVM: 1.7.0_60 (Oracle Corporation 24.60-b09) OS:
Mac OS X 10.9.5 x86_64
2、接著執行 ./gradlew clean
執行這個命令會去下載Gradle的一些依賴,下載成功並編譯通過時會看到如下信息:
:app:clean UP-TO-DATE
:extras:ShimmerAndroid:clean UP-TO-DATE BUILD SUCCESSFUL
3、最後執行 ./gradlew build
這個命令會直接編譯並生成相應的apk文件,如果看到如下字樣就代表build成功了
BUILD SUCCESSFUL
Total time: 31.456 secs
緊接著在 9GAG/app/build/outputs/apk 目錄下會看到類似於app-debug-unaligned.apk, app-release-unsigned.apk等,看名字應該能理解意思,unaligned代表沒有進行zip優化的,unsigned代表沒有簽名的。然後就可以直接安裝apk查看運行效果了。
以上是我個人習慣的一種閱讀第三方源碼的習慣,關於上面提到的一些gradle命令大家應該還不理解,後面會一一進行說明的。
導入Android Studio
但是如果你還是想導入Android Studio的話,下面就來簡單介紹下導入Studio的方法以及一些注意事項。
1、選擇File->Import Project, 選擇本地9GAG項目的目錄
2、第一次依然會下載Gradle,其實自己在命令行已經下載過了,但是這次依然還要下載一次(依然要翻牆),可能是個bug,接下來的版本中可能會修復。
3、導入之後你需要注意以下幾個地方
每個Mole下的 build.gradle 下的buildToolsVersion,即9GAG/app/build.gradle 和 9GAG/extras/ShimmerAndroid/build.gradle , 可以打開 SDK Manager 查看本地你安裝的 SDK Build-tools, 如下圖,如果相應版本沒有安裝請先下載
項目根目錄下的 build.gradle 下gradle插件的版本,如 9GAG/build.gradle 的內容:
classpath 『com.android.tools.build:gradle:1.0.0』
Android Studio 1.0必須指定gradle插件1.0的版本
Gradle Wrapper的版本,在 9GAG/gradle/wrapper/gralde-wrapper.properties 文件里有如下內容:
#Thu Dec 18 16:02:24 CST 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
上述內容制定了gradle的版本使用2.2.1,在Studio中如果你手動改了gradle插件的版本會有提示要不要更新Gradle Wrapper的版本。
如果以上幾個地方確定版本是ok的,那麼導入Android Studio應該沒有問題,有些老的項目可能gradle版本比較老,仍然在使用一些老的語法,如果編譯還通不過參考Android Studio系列教程四–Gradle基礎更改成最新的語法。
Gradle常用命令
上面大家接觸了一些命令如 ./gradlew -v ./gradlew clean ./gradlew build, 這里注意是./gradlew, ./代表當前目錄,gradlew代表 gradle wrapper,意思是gradle的一層包裝,大家可以理解為在這個項目本地就封裝了gradle,即gradle wrapper, 在9GAG/gradle/wrapper/gralde-wrapper.properties文件中聲明了它指向的目錄和版本。只要下載成功即可用grdlew wrapper的命令代替全局的gradle命令。
理解了gradle wrapper的概念,下面一些常用命令也就容易理解了。
./gradlew -v 版本號
./gradlew clean 清除9GAG/app目錄下的build文件夾
./gradlew build 檢查依賴並編譯打包
這里注意的是 ./gradlew build 命令把debug、release環境的包都打出來,如果正式發布只需要打Release的包,該怎麼辦呢,下面介紹一個很有用的命令 **assemble**, 如
./gradlew assembleDebug 編譯並打Debug包
./gradlew assembleRelease 編譯並打Release的包
除此之外,assemble還可以和proctFlavors結合使用,具體在下一篇多渠道打包進一步解釋。
./gradlew installRelease Release模式打包並安裝
./gradlew uninstallRelease 卸載Release模式包
下一篇來介紹用Gradle進行方便的多渠道打包,以及項目中完整的Gradle配置。
㈥ 如何 gradle build
1. 為什麼選擇Gradle?
2. 簡單入門
2.1 使用Intellij Idea創建gradle項目
首先在Idea中啟用Gradle支持:Settings->Plugins: Gradle
然後創建一個gradle項目或模塊,會發現目錄結構和maven的很像,其中build.gradle是gradle的配置文件,類似於maven中pom.xml文件,以下是build.gradle的簡單示例:
apply plugin: 'java'
group = 'org.yousharp'
version = '1.0-SNAPSHOT'
sourceCompatibility = 1.7
targetCompatibility = 1.7
repositories {
mavenCentral()
maven { url "repo.maven.apache.org/maven2" }
}
dependencies {
compile group: 'com.google.guava', name: 'guava', version:'17.0'
compile group: 'redis.clients', name: 'jedis', version:'2.6.0'
testCompile group: 'junit', name: 'junit', version:'4.11'
}
插件(plugin):是gradle的一種擴展,gradle預定義了很多插件,常見的如java插件、war插件等;java插件中定義了一些有用的task,如編譯源碼、執行單元測試、生成jar包、約定默認的目錄結構等; repositories定義倉庫,dependencies定義項目的依賴,比maven的XML定義更簡潔;
那麼,如何編譯、測試,以及運行gradle的項目呢?
剛才說到java插件預定義了很多task,其中就包括編譯、測試、生成jar包等task,可以在命令行通過 $ gradle tasks 查看項目已定義的所有task以及含義,如java插件中常用的task有:
+ assemble: 編譯
+ build:編譯並執行測試
+ clean:刪除build目錄
+ jar: 生成jar包
+ test:執行單元測試
2.2 將Java項目從maven遷移到gradle
如何將一個java項目從maven遷移到gradle呢?gradle集成了一個很方便的插件:Build Init Plugin,使用這個插件可以很方便地創建一個新的gradle項目,或者將其它類型的項目轉換為gradle項目。
要將maven項目轉換為gradle項目,只需要在項目的pom文件所在的目錄下執行以下命令:
$ gradle init --type pom
上面的命令會根據pom文件自動生成gradle項目所需的文件和配置,然後以gradle項目重新導入即可。
㈦ 請教,gradle編譯spring5源碼時報錯,怎麼回事呢命令 .\gradlew cleanIdea:spring-oxm:compileTestJava
這不是有報錯嗎。。。
㈧ 如何看IDEA編譯一個工程的命令行
2.1 使用Intellij Idea創建gradle項目
首先在Idea中啟用Gradle支持:Settings->Plugins: Gradle
然後創建一個gradle項目或模塊,會發現目錄結構和maven的很像,其中build.gradle是gradle的配置文件,類似於maven中pom.xml文件,以下是build.gradle的簡單示例:
apply plugin: 'java'
group = 'org.yousharp'
version = '1.0-SNAPSHOT'
sourceCompatibility = 1.7
targetCompatibility = 1.7
repositories {
mavenCentral()
maven { url "repo.maven.apache.org/maven2" }
}
dependencies {
compile group: 'com.google.guava', name: 'guava', version:'17.0'
compile group: 'redis.clients', name: 'jedis', version:'2.6.0'
㈨ 如何使用gradle構建工具打包groovy腳本成jar文件
准備工作安裝 gradle, groovy。
要使用gradle的groovy plugin 來打包groovy 腳本,項目結構。
目錄 含義
src/main/java Java 代碼
src/main/resources Java需要的資源文件
src/main/groovy Groovy代碼,也可以包含Java代碼
src/test/java Java 測試代碼
src/test/resources 測試需要的資源文件
src/test/groovy Groovy測試需要的資源文件
src/sourceSet/java Java代碼源
src/sourceSet/resources 資源文件源
src/sourceSet/groovy Groovy代碼源
我們只需要編譯打包groovy腳本 所以只需要創建 src/main/groovy目錄結構。例子:
gradle_groovy_archive項目 結構是:
gradle_groovy_archive
創建helloWorld.groovy腳本,代碼如下:
package hello
println 'Gradle compile groovy'
創建Gradle構建文件:
apply plugin: 'groovy'
apply plugin: 'maven'
group = 'com.hello'
archiveBaseName = 'hello'
version = '0.1-SNAPSHOT'
defaultTasks 'clean', 'jar'
configurations {
deployerJars
}
repositories {
mavenCentral()
}
dependencies {
//使用本地groovy環境
groovy localGroovy()
//groovy group: 'org.codehaus.groovy', name: 'groovy', version: '1.8.6'
compile fileTree( dir: 'lib', include: ['*.jar'])
deployerJars 'org.apache.maven.wagon:wagon-webdav-jackrabbit:1.0-beta-7'
}
sourceSets {
main {
groovy {
srcDir 'src/main/groovy'
}
}
}
uploadArchives {
repositories.mavenDeployer {
uniqueVersion = false
configuration = configurations.deployerJars
repository(id : repositoryId, url : repositoryUrl) {
authentication (userName : 'deployment', password : 'deployment')
proxy()
}
}
}
創建構建文件屬性文件:
//根據不同情況修改
repositoryId=ND
repositoryUrl=ND
systemProp.http.proxyHost=ND
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=ND
systemProp.http.proxyPassword=ND
在命令行中 敲 gradle 運行,會自動運行 defaultTasks,clean 和 jar,會把 所有groovy下的腳本打成jar包。