繁体   English   中英

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

[英]What files does gradle wrapper need writeable in order to run?

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

gradlew run的问题是,在构建步骤中运行gradlew build可以正常运行,但是在生产环境中(在只读文件系统上)运行gradlew run却失败了。 特别是,在运行时,它尝试再次重新编译项目,但失败了(自然地,因为文件系统是只读的)。 但是,如果已经编译,为什么要重新编译呢?

我试图使build.gradle目录都在运行时可写。 这样做确实有效,然后gradlew将再次重新编译整个系统,写出到这些目录中并运行。 然后,如果我再次将build目录设置为只读,则它将继续工作。 对我来说,这意味着.gradle的某些部分需要在运行时可写,但是到目前为止,我还没有找到一种除了“所有东西”之外都可以工作的组合,这显然是不可取的。 (一次构建并摆弄目录挂载在生产实践中是行不通的,因为那不是可重复的构建。)

我对Gradle还是很陌生,所以我不确定原因是什么。 我最好的理论是gradlew想要重新下载gradle最初(即使它大概已经在.gradle吗?)会导致它跳过所有预先存在的生成文件,即使它们存在也是如此。 因此,即使build目录是只读的,拥有一个成功的构建也可以将其修复以用于将来的构建。

因此,我的问题通常是, .gradle哪些部分需要在运行时可写才能使Gradle构建的应用程序在只读环境中工作? 或者,更一般而言,如何使Gradle构建的应用程序在只读环境中工作?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM