私は、スプリットビルドと実行環境を持つコンテナベースのCI/CDシステムでGradleをセットアップしています。ビルドでは、プロジェクトのディスクは書き込み可能です。実行時には、選択されたディレクトリだけが書き込み可能であり、これらのディレクトリはビルド中に使用できません。これは、2つの間の明確な分離です。実行するためにはどのファイルに書き込み可能なファイルが必要ですか?
私が実行している問題は、ビルドステップでgradlew build
を実行すると動作しますが、プロダクション環境(読み取り専用ファイルシステム上)でgradlew run
を実行すると失敗します。具体的には、実行時にプロジェクトを再コンパイルしようとしましたが、失敗しました(当然、ファイルシステムは読み取り専用なので)。しかし、もしそれが既にコンパイルされているなら、それはなぜ再コンパイルしていますか?
私はbuild
と.gradle
ディレクトリの両方を実行時書き込み可能にしようとしました。それはうまくいき、gradlew
はシステム全体をもう一度再コンパイルし、それらのディレクトリに書き出して実行します。私がbuild
ディレクトリを再び読み取り専用にすると、それは引き続き機能します。私には、実行時に書き込み可能にする必要がある.gradle
の部分があることが示唆されていますが、これまでのところ、「すべてとすべて」以外の組み合わせは見つかりませんでした。 (1回限りのビルドを行った後、ディレクトリマウントを行うのは、繰り返し実行するビルドではないため、実際には実用的ではありません)。原因はです。私の最高の理論は、最初に.gradle
になっているにもかかわらず、最初にgradleを再ダウンロードしたいというgradlew
が存在する場合でも、既存のすべての生成済みファイルをスキップするということです。そのため、たとえbuild
ディレクトリが読み取り専用であっても、1つのビルドを成功させると、将来のビルドでそれを修正できます。
一般的に、.gradle
の部分は、読み取り専用環境で動作するように構築されたアプリケーションを実行可能にする必要がありますか?または、より一般的には、期間限定の読み取り専用環境で、Gradleで作成されたアプリケーションを動作させるにはどうすればよいですか?
gradlew runを使用して、本番環境でプロジェクトを実行しないでください。ビルドで生成されたアーティファクトを実行/展開するだけです。 –