Gradle中编译和运行时configuration的区别

我的问题有点普遍,但也和Gradle有关系。

为什么我们需要编译和运行时configuration?

当我编译的东西我需要工件来转换我的Java类字节码,所以我需要编译configuration,但为什么需要运行时configuration我需要别的东西来运行我的应用程序在JVM中?

对不起,如果听起来很愚蠢,但我不明白。

在最常见的情况下,编译时所需的构件是运行时所需的子集。 例如,假设一个名为app使用库foo ,而库foo 内部使用库bar 。 然后只需要foo来编译app ,但是需要foobar来运行它。 这就是为什么默认情况下,放在Gradle的compileconfiguration上的所有内容在其runtimeconfiguration中也是可见的,但事实恰恰相反。