2016-10-04 51 views
0

我正在設計一個企業範圍的構建系統,迄今爲止已有超過一千個項目以約21種不同語言。我們正在使用gradle來解決這個問題,並且我遇到了問題。我們正在遷移到一個gitlab服務器,並且我們剛剛花了幾周時間來構建出系統和鉤子,這些系統和鉤子顯式地阻止了人們將jar文件和其他庫提交到源回購庫。 (長長的故事爲什麼,你根本不在乎)。沒有罐子的Gradle Wrapper

現在的問題

我們如何使用gradle這個包裝,而不在gradle/wrapper文件夾中的jar文件?我試着刪除文件夾,就像git hooks會做的那樣,gradlew給我們一個類未找到的錯誤,就像我所期望的那樣。

是否有可能使用不帶jar的包裝器,或者用戶在克隆項目時是否必須重新生成包裝器?如果gradle/wrapper文件夾或罐子丟失,gradlew文件是否可以設置爲自動重新生成?當設置包裝通過

gradle wrapper 

回答

0

因此,基本上,你你把:

  • 腳本
  • 性能
  • gradle這個包裝的jar文件

放入當前項目目錄。 gradle-wrapper.jar來自您當地的Gradle發行版。 You can check this in the source code

URL jarFileSource = Wrapper.class.getResource("/gradle-wrapper.jar"); 
if (jarFileSource == null) { 
    throw new GradleException("Cannot locate wrapper JAR resource."); 
} 
GFileUtils.copyURLToFile(jarFileSource, jarFileDestination); 

當您運行gradle wrapper調用從罐子主類,以下載並運行搖籃。因此,從技術上講,您可以修改SH和BASH腳本,以便在Java執行之前從Github存儲庫下載封裝器文件,顯然只有當該文件不存在時纔可以。我實際上做了它,它的工作,但我不知道它可能是多麼容易出錯。我不知道Github是否將來不會更改URL。我只是在gradlew.sh的某處添加了以下代碼段。在CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar

if [ ! -f "gradle/wrapper/gradle-wrapper.jar" ] 
then 
    curl https://raw.githubusercontent.com/gradle/gradle/master/gradle/wrapper/gradle-wrapper.jar -o $APP_HOME/gradle/wrapper/gradle-wrapper.jar 
fi 

反正之前,包裝文件有56K,它的目的是要儘可能小,讓人們把它變成Git倉庫。話雖這麼說,我認爲你不應該擔心它,只是添加這種特殊的JAR文件添加到白名單,以您的掛鉤,並允許它在資源庫中,

+0

謝謝,我會給這個鏡頭。我們將從我們自己的內部遠程服務器發佈,以便可以工作。我也有點閱讀包裝腳本,也許我可以將它移植到某個東西上。另一個想法是一個克隆鉤子,它檢測gradlew文件是否在那裏,並將它重新定位在克隆上。我會玩,看看它做了什麼。我們專門設計了沒有白名單的我們的罐式過濾系統,因爲他們在這裏受到虐待的長期和高貴的習慣。 – scphantm

0

gradlew腳本取決於gradle-wrapper.jar,因爲它只是簡單地調用GradleWrapperMain來自JAR。所以你不能使用沒有JAR的包裝器腳本。但是,您可以使用this script「引導」包裝。