Gradle依赖之间的区别。
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'
依赖源
一旦了解了可用的配置,就需要指定一个实际的依赖项。依赖关系可能是内部的或外部的,您可能依赖于您正在使用的另一个库,以及公共(public)可用的库。这是 project
关键字的用武之地,它允许您指定对内部模块或库的依赖关系。通过将依赖项定义为 compile project
,您将该模块或库作为传递依赖项添加到您的项目中。
假设您有一个包含三个模块(producer
、consumer
和shared
)的项目messages
,该项目结构如下所示:
messages/
build.gradle
settings.gradle
consumer/
build.gradle
producer/
build.gradle
shared/
build.gradle
现在假设 consumer
和 producer
都以 json 格式存储消息,并且您想使用 google-gson为了这个目的。假设这两个项目都有一些它们依赖的公共(public)源代码,即您的 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项目
、apk 项目
等等!
关于android - Gradle dependencies compile, apk project, compile project,provided,implementation project的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35947897/