gradle包装器需要哪些文件才能运行?

时间:2017-03-06 22:42:30

标签: java gradle gradlew

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

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

我尝试将build.gradle目录都设置为运行时可写。这确实有效,然后gradlew将再次重新编译整个系统,写出这些目录并运行。如果我再次将build目录设为只读,它将继续工作。那对我来说,.gradle的某些部分需要在运行时可写,但到目前为止,我还没有发现除了"所有内容和所有内容之外的其他组合#34 ;,这显然是不可取的。 (进行一次性构建然后摆弄目录安装并不适合作为生产实践,因为它不是可重复的构建。)

我仍然是Gradle的新手,所以我不确定原因是什么。我最好的理论是gradlew想要最初重新下载gradle(尽管它可能已经在.gradle?)导致它跳过所有预先存在的生成文件,即使它们& #39;重新出席。这就是为什么即使build目录是只读的,也有一个成功的构建修复它以用于将来的构建。

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

1 个答案:

答案 0 :(得分:2)

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