Gradle“无法打开buildscript类缓存” - 有更好的解决方法吗?

时间:2012-12-31 16:52:11

标签: gradle

在.gradle文件中添加依赖项后,我们的构建服务器开始出现以下问题:

FAILURE: Build failed with an exception.

* What went wrong:
Could not open buildscript class cache for build file '/u01/apps/.jenkins/workspace/[path name snipped]/build.gradle'     (/home/[username]/.gradle/caches/1.3/scripts/build_5jii90b0hvl37q9m8vfhik495b/ProjectScript/buildscript).
> java.io.EOFException

我们可以通过清除构建从属上的gradle缓存来解决它。但是,我担心这只是一个临时修复,它可能会再次出现。有没有更好的方法来解决这个问题?

7 个答案:

答案 0 :(得分:30)

转到位置“.gradle \ caches \ 2.0 \ scripts \ build_7l4t45nbnsvdcl79ol8u0beli4 \ ProjectScript”并删除 cache.properties.lock文件

答案 1 :(得分:7)

由于缓存文件已损坏,通常会发生这些异常。

在大多数情况下,删除缓存确实有效。

<强>的Linux

rm -rf ~/.gradle/caches

<强>窗

删除%USER_HOME%.gradle/caches文件夹

答案 2 :(得分:4)

首先,我建议您从Gradle 1.3升级到最新版本。自1.3以来,构建脚本缓存已经发生了很大的变化。

其次,当在Jenkins环境中运行时,考虑将gradle用户移动到除〜/ .gradle /之外的其他位置通常是一件好事。可以通过在Jenkins设置(配置系统)中设置环境变量GRADLE_USER_HOME来更改它。例如,在我们的环境中,我们将gradle缓存放在本地SSD磁盘而不是NFS挂载〜/。

三分之一的选择是将每个作业工作区用作gradle用户主页。这是通过在Jenkins作业配置中标记“强制GRADLE_USER_HOME使用工作空间”复选框来完成的。如果您的作业始终在同一台计算机上运行,​​并且在每次构建后都不删除工作区,则此方法非常有效。

答案 3 :(得分:3)

从命令行运行./gradlew clean(在项目文件夹中)似乎为我清除了它。

答案 4 :(得分:2)

public static class BitConverter<T> where T : struct { public static readonly Func<byte[], int, T> To = GetFunc(); static Func<byte[], int, T> GetFunc() { var type = typeof(T); if (type == typeof(bool)) return Cast(BitConverter.ToBoolean); if (type == typeof(sbyte)) return Cast(Extensions.ToSByte); if (type == typeof(byte)) return Cast(Extensions.ToByte); if (type == typeof(short)) return Cast(BitConverter.ToInt16); if (type == typeof(ushort)) return Cast(BitConverter.ToUInt16); if (type == typeof(int)) return Cast(BitConverter.ToInt32); if (type == typeof(uint)) return Cast(BitConverter.ToUInt32); if (type == typeof(long)) return Cast(BitConverter.ToInt64); if (type == typeof(ulong)) return Cast(BitConverter.ToUInt64); if (type == typeof(float)) return Cast(BitConverter.ToSingle); if (type == typeof(double)) return Cast(BitConverter.ToDouble); throw new NotSupportedException(); } static Func<byte[], int, T> Cast<U>(Func<byte[], int, U> func) { return (Func<byte[], int, T>)(object)func; } } public static class Extensions { public static bool ToBoolean(this byte[] bytes, int offset = 0) { return BitConverter.ToBoolean(bytes, offset); } public static sbyte ToSByte(this byte[] bytes, int offset = 0) { return unchecked((sbyte)bytes[offset]); } public static byte ToByte(this byte[] bytes, int offset = 0) { return bytes[offset]; } public static short ToInt16(this byte[] bytes, int offset = 0) { return BitConverter.ToInt16(bytes, offset); } public static ushort ToUInt16(this byte[] bytes, int offset = 0) { return BitConverter.ToUInt16(bytes, offset); } public static int ToInt32(this byte[] bytes, int offset = 0) { return BitConverter.ToInt32(bytes, offset); } public static uint ToUInt32(this byte[] bytes, int offset = 0) { return BitConverter.ToUInt32(bytes, offset); } public static long ToInt64(this byte[] bytes, int offset = 0) { return BitConverter.ToInt64(bytes, offset); } public static ulong ToUInt64(this byte[] bytes, int offset = 0) { return BitConverter.ToUInt64(bytes, offset); } public static float ToSingle(this byte[] bytes, int offset = 0) { return BitConverter.ToSingle(bytes, offset); } public static double ToDouble(this byte[] bytes, int offset = 0) { return BitConverter.ToDouble(bytes, offset); } public static T To<T>(this byte[] bytes, int offset = 0) where T : struct { return BitConverter<T>.To(bytes, offset); } } 使用Win命令提示符(在那里有很多.lock&#39; s)为我做了诀窍。对于类Unix系统,C:\Users\John\.gradle\caches\2.4\scripts>del /S *.lock也应该这样做。

答案 5 :(得分:0)

如果上述情况不起作用,您可以删除缓存文件夹。

答案 6 :(得分:0)

我在更新到Apache Cordova v7的工具后,在Visual Studio 2015中得到了这个。

如上所述删除.lock文件无济于事。

我还必须删除平台文件夹。此文件夹与www文件夹处于同一级别(不是VS将其添加到.gitignore)。

然后构建,删除.lock文件,删除整个cache_ *文件夹,冲洗,重复直到构建成功。