Gradle依赖关系之间的区别。Gradle依赖关系编译之间的区别,apk项目,编译项目,提供的,执行项目
compile
apk project
compile project
provided project
implementation
我的问题是
什么compile
,apk project
,compile project
,provided project
这里有什么区别?
Gradle依赖关系之间的区别。Gradle依赖关系编译之间的区别,apk项目,编译项目,提供的,执行项目
compile
apk project
compile project
provided project
implementation
我的问题是
什么compile
,apk project
,compile project
,provided project
这里有什么区别?
这里有两件独立的事情要讨论:依赖配置和依赖源。
依赖关系配置
配置帮助定义的依赖,进而去除了发现并指定库自己的项目/库的疼痛传递要求,包括自动它们。在gradle这个结构的这个概念是非常相似的Maven's scopes:
compile
:编译依赖关系是在一个项目的所有类路径可用。而且,这些依赖关系会传播到依赖项目。运行时通常需要编译时间依赖性。apk
:定义运行时相关性。编译时不需要依赖此范围,但它将用于执行。这意味着您可以在编译时节省时间,并且在项目实际运行时仍然可以使用依赖项。 This是何时使用apk依赖关系的一个很好的例子。provided
:这意味着该依赖关系在运行时环境中可用。因此,此范围仅在编译和测试类路径中可用,且不是传递性的。它在Android项目中不受支持,但您可以通过定义您自己的配置来解决该问题,如讨论here。还有更多的配置,你可以在Android遭遇,如testCompile
,它允许你指定将仅用于测试编译时依赖,说你想在你的测试使用JUnit,然后你会做如下:一旦你了解为您提供的配置
testCompile 'junit:junit:4.12'
依赖源
,你需要指定一个实际的依赖。依赖关系可能是内部的或外部的,你可能依赖于你正在处理的另一个库,以及公共可用的库。这里是project
关键字出现的位置,允许您指定对内部模块或库的依赖关系。通过将依赖关系定义为compile project
,即可将该模块或库作为传递依赖项添加到项目中。
假设你有一个项目messages
有三个模块(producer
,consumer
和shared
),项目结构将如下所示:
messages/
build.gradle
settings.gradle
consumer/
build.gradle
producer/
build.gradle
shared/
build.gradle
现在假设JSON格式,并且两个consumer
和producer
存储消息你想为此使用google-gson。假设这两个项目都有一些它们依赖的通用源代码,即shared
模块。然后consumer
的的build.gradle可以定义以下依赖性:
dependencies {
// Internal dependency to project shared
compile project (':shared')
// External dependency to publicly available library,
// through public repositories such as jcenter() or mavencentral()
compile 'com.google.code.gson:gson:1.7.2'
}
综上所述,它是让你声明依赖关系compile
,compile project
,apk project
两者配置和来源的组合更多!
Gradle使用*配置*而不是*范围* – RaGe
谢谢@RaGe,你是对的。用适当的gradle词汇表更新答案。 – unbekant