java - gradle 包装器需要哪些文件可写才能运行?

标签 java gradle gradlew

我正在使用基于容器的 CI/CD 系统设置 Gradle,该系统具有分离的构建与运行环境。在构建中,项目的磁盘是可写的。在运行时,只有选定的目录是可写的,并且这些目录在构建期间不可用。两者之间有明显的区别。

我遇到的问题是,在构建步骤中运行 gradlew build 有效,但随后在生产环境中运行 gradlew run (在只读环境中)文件系统)失败。具体来说,在运行时它尝试再次重新编译项目,但失败了(当然,因为文件系统是只读的)。但既然已经编译过了,为什么还要重新编译呢?

我尝试使 build.gradle 目录都可运行时写入。这确实有效,然后 gradlew 将再次重新编译整个系统,写入这些目录并运行。如果我再次将 build 目录设置为只读,它会继续工作。对我来说,这表明 .gradle 的某些部分需要在运行时可写,但到目前为止,我还没有找到除“一切和一切”之外的其他组合,这显然是不可取的。 (进行一次性构建然后摆弄目录挂载作为生产实践是行不通的,因为它不是可重复的构建。)

我对 Gradle 还很陌生,所以我不确定原因是什么。我最好的理论是 gradlew 最初想要重新下载 gradle(即使它可能已经在 .gradle 中?)导致它跳过所有预先存在的生成文件,即使他们在场。这就是为什么一次成功的构建会修复它以供将来的构建使用,即使 build 目录是只读的。

所以我的问题是,一般来说,.gradle 的哪些部分需要运行时可写,以便 Gradle 构建的应用程序能够在只读环境中工作?或者,更一般地说,如何使 Gradle 构建的应用程序在只读环境中工作?

最佳答案

不要使用 Gradle 在生产时运行您的项目。 Gradle 是一个构建工具,application 插件添加的 run 任务仅用于测试目的。如果您不想生成可分发文件,然后在生产时使用它,但如果您想用完项目目录,则至少在构建时使用 installDist ,然后将项目运行为它与生成的启动脚本一起在 build/install/... 中组装。

关于java - gradle 包装器需要哪些文件可写才能运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42636986/

相关文章:

java - GWT:如何将 java 数组传递给 javascript native 方法?

java - Jersey:在后台调用另一个API实现

gradle - Android Studio 包含 aar 依赖

java - Gradle版本升级到3.0.0后编译错误

android - React Native ./gradlew assembleRelease assembleAndroidTest失败: “More than one file found with OS independent path”

android-studio - R8 从 AndroidStudio 中抛出 NullPointerException,但不会通过 gradlew 从命令行抛出

java - Maven 出现间歇性问题,缺少所需的类

java - 在Java中使用HTML代码是否只能在互联网系统上工作?

java - Gradle 构建失败,消息为 : TaskDependencyResolveException: Could not determine the dependencies of task ':compileDebugKotlin'

android - 无法获取 Crashlytics 中 native 崩溃的堆栈跟踪