Can';t升级到gradle 6.6,因为;前缀字符串太短“;

Can';t升级到gradle 6.6,因为;前缀字符串太短“;,gradle,Gradle,我正在尝试将现有项目从gradle 6.5.1升级到6.6 但当我构建时,它会失败并出现错误: Successfully started process 'Gradle build daemon' An attempt to start the daemon took 1.116 secs. The client will now receive all logging from the daemon (pid: 122). The daemon log file: /home/****/.gr

我正在尝试将现有项目从gradle 6.5.1升级到6.6

但当我构建时,它会失败并出现错误:

Successfully started process 'Gradle build daemon'
An attempt to start the daemon took 1.116 secs.
The client will now receive all logging from the daemon (pid: 122). The daemon log file: /home/****/.gradle/daemon/6.6/daemon-122.out.log
Starting build in new daemon [memory: 519.0 MB]
Using 1 worker leases.
Starting Build
Compiling initialization script '/home/****/agent/workspace/Enrich_build_PR-41@tmp/artifactory/init-artifactory449129576487257952gradle' using SubsetScriptTransformer.
FAILURE: Build failed with an exception.
* What went wrong:
Failed to create Jar file /home/****/.gradle/caches/jars-8/8535adf040d7c5fdb7fd6bc28bb0ef3f/ok.
> Prefix string too short
使用--debug运行时,看起来唯一相关的是:

020-10-05T16:38:54.631+0000 [DEBUG] [org.gradle.internal.component.model.LoggingAttributeMatchingExplanationBuilder] Selected match ok from candidates [ok] for {org.gradle.dependency.bundling=external, org.gradle.jvm.version=8, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}
这似乎是一个内部梯度问题。如何修复或避免此错误? (我也试过6.6.1,也有同样的问题)

它也发生在我运行“/gradlew help”时,因此它不应该与我的构建配置相关

stacktrace看起来像:

* Exception is:
org.gradle.api.GradleException: Failed to create Jar file /home/****/.gradle/caches/jars-8/8535adf040d7c5fdb7fd6bc28bb0ef3f/ok.
    at org.gradle.internal.classpath.ClasspathBuilder.jar(ClasspathBuilder.java:47)
    at org.gradle.internal.classpath.InstrumentingClasspathFileTransformer.transform(InstrumentingClasspathFileTransformer.java:76)
    at org.gradle.internal.classpath.InstrumentingClasspathFileTransformer.transform(InstrumentingClasspathFileTransformer.java:70)
    at org.gradle.internal.classpath.DefaultCachedClasspathTransformer$TransformFile.lambda$schedule$0(DefaultCachedClasspathTransformer.java:261)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.IllegalArgumentException: Prefix string too short
    at org.gradle.internal.classpath.ClasspathBuilder.buildJar(ClasspathBuilder.java:53)
    at org.gradle.internal.classpath.ClasspathBuilder.jar(ClasspathBuilder.java:45)
    ... 6 more
快速修复 建议降级至6.5级以解决问题

进一步详情/可能原因 虽然我不知道发生这种情况的根本原因,但我在Gradle 6.6.1中遇到了相同的“前缀字符串太短”错误。 特别是,这是我确切的错误信息,来自Mac:

Failed to create Jar file /Users/****/.gradle/caches/jars-8/8535adf040d7c5fdb7fd6bc28bb0ef3f/ok.
由于“prefix”错误来自Java,我查看了Java安装,认为这可能是问题所在。在我的例子中,Java落后了很多版本,所以我升级到了8u261,但这似乎没有改变任何事情

在我们的案例中,它是如何开始的:

  • 用户为Gradle启动Jenkins工作
  • Jenkins作业因无法在缓存目录中创建文件而失败。每次缓存的数字实际上也是相同的;它总是'.gradle/caches/jars-8/8535adf040d7c5fdb7fd6bc28bb0ef3f/ok,并且不是一个不同的数字。所以这几乎就像是从某个地方静态设置的
所以关注这个错误,我遇到了一个类似的ish前缀错误,是针对Java问题的。虽然这并不能完全回答我们看到的问题,但它确实有助于解释为什么它可能是一个“合法”错误,因为它认为文件名少于3个字符。

  • 所以感觉就像是把字符串的结尾解释为文件名。也就是说,它可能认为路径末尾的ok实际上是一个文件名,如果少于3个字符,则会发送“前缀字符串太短”错误。请记住,这只是猜测,我不知道这是否真的是原因
我们碰巧有另一台运行Gradle 6.5的Mac电脑,它与Jenkins的工作完全一样,运行得很好。因此,我们从Gradle 6.6.1降级到6.5,以匹配另一个,并像以前一样重新开始工作。 由于我们使用Mac,Brew实际上没有旧版本可供回滚。因此,我被迫通过brew卸载gradle,然后按照以下步骤安装并指向较旧版本的gradle。 希望通过yum/apt降级对你来说比我更容易。
您的问题似乎与artifactory插件有关


检查尝试使用
--stacktrace
运行gradle,查看完整的异常stacktraceLooks,就像您也在使用初始化脚本一样。它在干什么?