Java项目的构建工具一般有很多选择,其中Gradle是一个非常流行的选择,尤其是在Android开发领域中。Gradle使用DSL(Domain Specific Language)来定义项目的构建过程,功能非常强大。在配置Gradle时,经常会使用compile、api和implementation这三个关键词。这三个关键词是Gradle中声明依赖关系的方式。
1. compile、api和implementation的区别
在Gradle 3.4之前,使用compile、api和implementation三个关键词声明依赖关系的方式如下:
dependencies {
compile 'com.example:library:1.0.0'
api 'com.example:library:1.0.0'
implementation 'com.example:library:1.0.0'
}
在Gradle 3.4及以后的版本中,compile已被移除,只保留api和implementation。
(1)compile
compile是一种传递性依赖。这意味着,如果在你的代码中有一个类引用了一个库项目中的类,那么这个库项目就会被编译和打包进入你的代码中。如果你在编译时使用了compile,那么它会将库项目中的依赖传递给你的项目中。
例如,我们的应用需要引用一个网络请求库,这个网络请求库依赖了Volley库和OkHttp库。在这种情况下,我们需要在我们的build.gradle文件中添加以下声明:
dependencies {
compile 'com.android.volley:volley:1.1.1'
compile 'com.squareup.okhttp3:okhttp:4.9.1'
}
compile会将Volley库和OkHttp库的依赖传递到我们的项目中。
但是,在Gradle 3.4之后,compile已被移除。
(2)api
api是一种公共依赖,它可以在编译时和运行时被访问。当两个模块之间有api依赖关系时,Gradle会将这些依赖关系暴露出来,因此可以在其他模块中使用这些依赖关系。
例如,我们的应用需要引用一个库项目,这个库项目的API可以被其他项目所使用。在这种情况下,我们需要在我们的build.gradle文件中添加以下声明:
dependencies {
api 'com.example:library:1.0.0'
}
api会将库项目中的依赖关系(例如库项目依赖的其他库)暴露出来,可以被其他模块所使用。
(3)implementation
implementation是一种私有依赖,它只能在编译时被访问。当两个模块之间有implementation依赖关系时,Gradle会将这些依赖关系隐藏起来,因此不能被其他模块使用。
例如,我们的应用需要引用一个库项目,这个库项目的API只能在内部使用,不对外公开。在这种情况下,我们需要在我们的build.gradle文件中添加以下声明:
dependencies {
implementation 'com.example:library:1.0.0'
}
implementation会将库项目中的依赖关系隐藏起来,不能被其他模块所使用。
2. 例子说明
(1)使用compile声明依赖关系
在Gradle 3.4之前,通过使用compile声明依赖关系,可以将依赖传递给我们的项目中。例如,我们需要引用一个库项目,这个库项目依赖了Gson库。在这种情况下,我们需要在我们的build.gradle文件中添加以下声明:
dependencies {
compile 'com.example:library:1.0.0'
compile 'com.google.code.gson:gson:2.8.6'
}
compile会将Gson库的依赖传递给我们的项目中。
(2)使用implementation声明依赖关系
在Gradle 3.4及以后的版本中,通过使用implementation声明依赖关系,可以将依赖隐藏起来,不能被其他模块所使用。例如,我们需要引用一个库项目,这个库项目依赖了Gson库。在这种情况下,我们需要在我们的build.gradle文件中添加以下声明:
dependencies {
implementation 'com.example:library:1.0.0'
implementation 'com.google.code.gson:gson:2.8.6'
}
implementation会将Gson库的依赖隐藏起来,不能被其他模块所使用。
综上所述,在Gradle中,使用compile、api和implementation这三个关键词声明依赖关系,可以很好地控制依赖的传递性和可见性。根据具体的情况,选择合适的关键词声明依赖关系,会使项目构建更加简单、高效。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java用 Gradle配置compile及implementation和api的区别 - Python技术站