Can';t升级到gradle 6.6,因为;前缀字符串太短“;
我正在尝试将现有项目从gradle 6.5.1升级到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
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,并且不是一个不同的数字。所以这几乎就像是从某个地方静态设置的
- 所以感觉就像是把字符串的结尾解释为文件名。也就是说,它可能认为路径末尾的ok实际上是一个文件名,如果少于3个字符,则会发送“前缀字符串太短”错误。请记住,这只是猜测,我不知道这是否真的是原因
您的问题似乎与artifactory插件有关
检查尝试使用
--stacktrace
运行gradle,查看完整的异常stacktraceLooks,就像您也在使用初始化脚本一样。它在干什么?