2017-03-15 96 views
5

我正在嘗試爲我正在進行的項目設置配置項,並且我在想我們是否確實需要提交gradlew和/或gradle.bat文件以使其正常工作。Travis CI是否強制執行?

有沒有解決這個問題,或提交這些文件是唯一的方法?

+0

建議您使用https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:wrapper_generation – petey

+0

不知道這是否是唯一的方法,但這是我自己設置回購的方式向上。 –

+0

一位朋友告訴我,如果你的系統上安裝了gradle和一個系統變量,它可能會運行它。但我認爲它不適用於具有不同gradle版本的項目...... – Mauker

回答

4

提交gradlew腳本並非強制在Travis CI中構建Gradle項目。

也許最好的選擇是使用預先安裝的Gradle來安裝Gradle包裝。這是一個簡單的build.gradle的樣子:

apply plugin: 'java' 

check.doFirst { 
    println "Running gradle v${project.gradle.gradleVersion}" 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '3.4.1' 
} 

如果您使用的標準特拉維斯描述這個構建文件,它不會工作。它將簡單地使用gradle來運行你的構建。不過,如果你的包裝任務添加到描述:

language: java 
jdk: 
    - oraclejdk8 
before_install: 
    gradle wrapper 

特拉維斯將首先運行正確的包裝任務,然後檢測gradlew存在並使用它來運行你的構建。

但是,這種方法有一個缺點,可以打破你的構建。如果您使用Gradle中預先安裝的Gradle版本之後實施的一些功能,則步驟將失敗。我相信這個功能的例子是S3 Maven倉庫,它是在v2.4中引入的。

爲了防止這種情況,你可以移動的包裝任務到一個單獨的構建文件,比方說wrapper.gradle

task wrapper(type: Wrapper) { 
    gradleVersion = '3.4.1' 
} 

而且.travis.yml文件更改爲:

language: java 
jdk: 
    - oraclejdk8 
before_install: 
    gradle -b wrapper.gradle wrapper 

這應該這樣做。此設置使用預安裝的Gradle來安裝包裝器,而不更改主構建腳本。

您可以看到一個example build herethis is the whole GitHub repository


注意:還有另一種方法。您可以使用before_install步驟從可下載的發行版安裝必需的Gradle版本,或者使用Debian軟件包系統。但是,這將需要sudo特權。這些虛擬機需要很長時間才能啓動(大約30秒?)。

另一件事,我在另一個答案的評論中提到它,如果你提交了gradlew腳本,你還需要包裝jar和屬性。該jar是一個二進制文件,並將其放入版本控制有時被認爲是有爭議的。因此,如果您使用上述解決方案,則還可以省略提交gradle文件夾。

2

這不是強制性的,因爲它已經爲pre-installed Java和Android項目。

但是,這是推薦的方法,因爲安裝的版本取決於創建虛擬機的日期,可能已過時。

您可以試試看,並使用gradle --version命令檢查version


更新#1

我證明,我的答案是正確的分叉您MaterialSearchView

搖籃版本2.2.1已經預先安裝,所以搖籃包裝不是強制性的,但這是推薦的方式,因爲你的項目需要版本2.14.1。

script: 
    - gradle clean build 

我還證明選定的答案是正確的是基於錯誤的假設。嘗試使用不必要的文件,並且破解構建不會使該文件成爲強制性的,只是不要使用它並刪除chmod行。

enter image description here

您可以檢查here所需的搖籃版本爲每個搖籃插件版本,你的情況插件版本2.2.3需要搖籃2.14.1+

+2

重要的是補充一點,建議不只是關於腳本。 'jar'和'properties'也必須提交。許多人不喜歡將二進制文件提交到版本控制(可以理解)。 – sm4

0

是,需要這些文件。

我確定了這一點與一些試驗和錯誤。我從我的個人項目中的一個分支中刪除了它們,並將它們推送到GitHub,並且Travis構建失敗。

如果您好奇日誌的樣子,check this gist

正如你可以在底部附近看到,這是失敗的錯誤:

chmod: cannot access `gradlew': No such file or directory 
The command "chmod +x gradlew" failed and exited with 1 during . 

小編輯:我試圖使用它與gradlew文件,但不是gradlew.bat文件。這可以用於簡單的清理/構建,但是當Travis試圖啓動一個模擬器時,它會掛起10多分鐘。

TL; DR使用這兩個文件。

+0

看起來,如果你完全控制你的CI環境,它可能不是強制性的,但對於Travis CI來說,它似乎是強制性的。感謝測試! – Mauker

+0

沒問題。我現在正在使用gradlew文件進行測試,但沒有使用gradlew.bat,並且很快就會根據結果編輯我的答案。 – AdamMc331

+0

@Mauker請閱讀我更新的答案,併爲將來的讀者解決這個問題。 – albodelu