【问题标题】:Gradle Wrapper without the jar没有罐子的 Gradle Wrapper
【发布时间】:2019-04-09 19:52:52
【问题描述】:

我正在设计一个企业范围的构建系统,到目前为止,我使用大约 21 种不同的语言设计了超过一千个项目。我们为此使用 gradle,但我遇到了问题。我们正在迁移到 gitlab 服务器,我们刚刚完成了花费数周构建系统和挂钩的工作,这些系统和挂钩明确阻止人们将 jar 文件和其他库提交到源代码库。 (长篇大论,无论如何,你并不在乎)。

现在的问题

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

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

【问题讨论】:

    标签: gradle gradlew


    【解决方案1】:

    所以基本上,当你通过

    设置 wrapper
    gradle wrapper
    

    你说的:

    • 脚本
    • 属性
    • 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 时,您会从该 jar 调用主类以下载和运行 Gradle。所以从技术上讲,您可以修改 SH 和 BASH 脚本以在 Java 执行之前从 GitHub 存储库下载包装文件,显然只有在文件不存在的情况下。我确实做到了,并且成功了,但是我不确定它有多容易出错。我不知道 GitHub 将来是否不会更改 URL。我刚刚在gradlew.shCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 行之前的某处添加了以下sn-p。

    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 文件添加到您的钩子的白名单中并允许它在存储库中。

    【讨论】:

    • 谢谢,我会试一试。我们将从我们自己的内部 dist 服务器分发,以便可以工作。我也会稍微阅读一下包装脚本,也许我可以将它移植到某个东西上。另一个想法是克隆钩子,它检测 gradlew 文件是否在其中并在克隆时重新生成它。我会玩,看看它的作用。我们专门设计了没有白名单的罐子过滤器系统,因为它们有在这里被滥用的长期而显着的习惯。
    【解决方案2】:

    gradlew 脚本依赖于gradle-wrapper.jar,因为它只是从 JAR 中调用 GradleWrapperMain。所以你不能在没有 JAR 的情况下使用包装脚本。但是,您可以使用 this script“引导”包装器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2012-08-11
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多