gradle wrapper 需要可写哪些文件才能 运行?
What files does gradle wrapper need writeable in order to run?
我正在使用基于容器的 CI/CD 系统设置 Gradle,该系统具有拆分构建与 运行 环境。在构建中,项目的磁盘是可写的。在 运行 时,只有选定的目录是可写的,而这些目录在构建期间不可用。两者之间有明显的区别。
我 运行ning 遇到的问题是构建步骤中的 运行ning gradlew build
有效,但随后 运行ning gradlew run
生产环境(在只读文件系统上)失败。具体来说,在 运行 时间,它尝试再次重新编译项目,但没有成功(当然,因为文件系统是只读的)。但是已经编译过为什么还要重新编译呢?
我已经尝试使 build
和 .gradle
目录都 运行 时间可写。这确实有效,然后 gradlew
将第二次重新编译整个系统,写入这些目录,然后 运行。如果我再次将 build
目录设置为只读,它会继续工作。这对我来说表明 .gradle
的某些部分需要在 运行 时可写,但到目前为止我还没有找到除 "everything and everything" 以外的组合,这显然不是可取的。 (进行一次性构建然后摆弄目录挂载作为生产实践是行不通的,因为它不是可重复的构建。)
我对 Gradle 还是很陌生,所以我不确定是什么原因。我最好的理论是 gradlew
想要重新下载 gradle 最初(即使它可能已经在 .gradle
中?)导致它跳过所有预先存在的生成文件,即使它们'代表。这就是为什么即使 build
目录是只读的,一次成功的构建也会为以后的构建修复它。
所以我的问题通常是 .gradle
的哪些部分需要 运行 时间可写才能使 Gradle 构建的应用程序以只读方式工作环境?或者,更一般地说,我如何使 Gradle 构建的应用程序在只读环境中运行?
不要在生产时使用 Gradle 来 运行 您的项目。 Gradle 是一个构建工具,由 application
插件添加的 run
任务仅用于测试目的。如果您不想生成可分发文件然后在生产时使用它,但如果您想 运行 离开项目目录,至少在构建时使用 installDist
然后 运行 使用生成的启动脚本在 build/install/...
中组装的项目。
我正在使用基于容器的 CI/CD 系统设置 Gradle,该系统具有拆分构建与 运行 环境。在构建中,项目的磁盘是可写的。在 运行 时,只有选定的目录是可写的,而这些目录在构建期间不可用。两者之间有明显的区别。
我 运行ning 遇到的问题是构建步骤中的 运行ning gradlew build
有效,但随后 运行ning gradlew run
生产环境(在只读文件系统上)失败。具体来说,在 运行 时间,它尝试再次重新编译项目,但没有成功(当然,因为文件系统是只读的)。但是已经编译过为什么还要重新编译呢?
我已经尝试使 build
和 .gradle
目录都 运行 时间可写。这确实有效,然后 gradlew
将第二次重新编译整个系统,写入这些目录,然后 运行。如果我再次将 build
目录设置为只读,它会继续工作。这对我来说表明 .gradle
的某些部分需要在 运行 时可写,但到目前为止我还没有找到除 "everything and everything" 以外的组合,这显然不是可取的。 (进行一次性构建然后摆弄目录挂载作为生产实践是行不通的,因为它不是可重复的构建。)
我对 Gradle 还是很陌生,所以我不确定是什么原因。我最好的理论是 gradlew
想要重新下载 gradle 最初(即使它可能已经在 .gradle
中?)导致它跳过所有预先存在的生成文件,即使它们'代表。这就是为什么即使 build
目录是只读的,一次成功的构建也会为以后的构建修复它。
所以我的问题通常是 .gradle
的哪些部分需要 运行 时间可写才能使 Gradle 构建的应用程序以只读方式工作环境?或者,更一般地说,我如何使 Gradle 构建的应用程序在只读环境中运行?
不要在生产时使用 Gradle 来 运行 您的项目。 Gradle 是一个构建工具,由 application
插件添加的 run
任务仅用于测试目的。如果您不想生成可分发文件然后在生产时使用它,但如果您想 运行 离开项目目录,至少在构建时使用 installDist
然后 运行 使用生成的启动脚本在 build/install/...
中组装的项目。