没有罐子的Gradle Wrapper

时间:2016-10-04 15:50:28

标签: gradle gradlew

我正在设计一个企业级的构建系统,到目前为止已有大约21种不同语言的项目。我们正在使用gradle,我有一个问题。我们正在迁移到gitlab服务器,我们刚刚花了数周时间构建系统和挂钩,明确阻止人们将jar文件和其他库提交到源代码库。 (很长的故事,为什么,你真的不在乎)。

现在问题

我们如何在gradle/wrapper文件夹中使用没有jar文件的gradle包装器?我尝试删除文件夹,就像git钩子一样,gradlew给我们一个未找到类的错误,正如我所料。

是否可以在没有jar的情况下使用包装器,或者用户在克隆项目时是否必须重新生成包装器?如果gradlew文件夹或jar丢失,gradle/wrapper文件是否可以设置为自动重新生成?

2 个答案:

答案 0 :(得分:1)

所以基本上,当您通过

设置包装
gradle wrapper
你放了:

  • 脚本
  • properties
  • gradle wrapper 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时,从该jar调用主类以下载并运行Gradle。从技术上讲,您可以修改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文件添加到你的钩子白名单并允许它存储在存储库中。

答案 1 :(得分:0)

gradlew脚本取决于gradle-wrapper.jar,因为它只是从JAR调用 GradleWrapperMain 。因此,如果没有JAR,则无法使用包装器脚本。但是,你可以" bootstrap"使用this script的包装器。