Gradleのコンパイル構成とランタイム構成の違い


102

私の質問は少し一般的ですが、Gradleにも関連しています。

コンパイルとランタイムの構成が必要な理由

何かをコンパイルするとき、Javaクラスをバイトコードに変換するためにアーティファクトが必要なので、コンパイル構成が必要ですが、JVMでアプリケーションを実行するためにランタイム構成が必要なのはなぜですか?

馬鹿げて聞こえたら申し訳ありませんが、わかりません。

回答:


149

最も一般的なケースでは、コンパイル時に必要なアーティファクトは、実行時に必要なアーティファクトのサブセットです。たとえば、呼び出されたプログラムappがライブラリを使用しfoo、ライブラリがfoo 内部的にライブラリを使用するとしますbar。その後のみfooコンパイルするために必要とされるappが、両方、fooおよびbarそれを実行するために必要とされます。これが、デフォルトで、Gradleのcompile構成に加えたすべてがそのruntime構成でも表示される理由ですが、その逆は当てはまりません。


20
残念ながら、これはgradle.org/docs/current/userguide/dependency_management.htmlで明示的に言及されていません。彼らは明示的にその意味を述べずにコンパイルとランタイムの両方を使用します...
silasdavis

2
@silasdavisドキュメントで違いを説明しています:8.3のgradle.org/docs/current/userguide/…。依存関係の構成
angelcervera 2014年

@angelcerveraああそう、8。依存関係管理の基本、51。依存関係管理。なぜ2つのセクションがあるのか​​はわかりますが、おそらく後者が前者を参照しているといいでしょう。私は51に着陸し、それが完全な説明を与えると期待していました。
silasdavis 2014年

@silasdavisはい。ドキュメントの他のセクションについても同じです。私はAからZにすべてのドキュメントを読むために同じ自由時間取らなければならない
angelcervera

1
@Peter Niederwieserコンパイルタスクがランタイムと同じ依存関係を表示する場合、コンパイルではなくランタイムをどのシナリオで使用しますか?
rj2700 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.