2016-10-04 86 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“引导”包装。