Java用 Gradle配置compile及implementation和api的区别

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技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Netty分布式解码器读取数据不完整的逻辑剖析

    Netty是一个高性能的异步事件驱动网络应用框架,由于它的高性能和良好的可扩展性,被广泛应用于分布式架构中。但是在网络传输过程中,数据被分成了多个部分,数据的读取不完整会导致数据的解码出现问题。这种情况下,我们需要对Netty的分布式解码器的读取数据不完整的逻辑进行剖析。 完整攻略 步骤一:设置解码器 在Netty中,分布式解码器负责将字节流解码成Java对…

    Java 2023年5月20日
    00
  • 如何两步解决maven依赖导入失败的问题

    当我们使用Maven处理项目依赖时,有时会出现依赖导入失败的问题。这时我们可以进行如下两步操作解决: 第一步:清空本地仓库 有时本地仓库会存储有损坏或不完整的依赖。为了从远程仓库重新拉取完整可用的依赖,我们需要先清空本地仓库。清空命令如下: mvn dependency:purge-local-repository 运行此命令后Maven会将本地仓库完全清空…

    Java 2023年5月20日
    00
  • SpringBoot如何整合Springsecurity实现数据库登录及权限控制

    这是一个相对比较复杂的话题,需要比较详细的讲解,由于篇幅所限,我将对该过程进行简化和概括,方便您快速了解需要的知识点。 首先,Spring Boot是Spring框架的一种简化版本,可以快速构建基于Spring的项目。而Spring Security则是Spring框架中的一个安全模块,可以实现用户认证、授权等功能。下面我们来讲一下如何整合Spring Se…

    Java 2023年5月20日
    00
  • 如何进行Java压力测试?

    作为网站的作者,您想进行Java应用程序的压力测试以确保应用程序的性能能够满足用户期望和要求。在这里,我们将提供一个完整的Java应用程序压力测试攻略,它将使您了解压力测试的概念,不同类型的测试以及如何开始执行压力测试。下面是一个详细的步骤: 1.准备测试环境和工具 要执行Java应用程序的压力测试,您需要准备一个测试环境。这意味着您需要一个测试计划,例如一…

    Java 2023年5月11日
    00
  • Maven setting.xml配置文件详解

    下面是Maven setting.xml配置文件详解的完整攻略。 什么是Maven的setting.xml配置文件? Maven的setting.xml配置文件是Maven构建系统的配置文件之一,它可以对Maven构建过程中的各种参数进行设置,比如Maven的本地仓库路径、代理服务器地址、编译插件、发布仓库等等。设置这些参数可以让我们的Maven构建过程更加…

    Java 2023年5月19日
    00
  • JAVA随机打乱数组顺序的方法

    下面是“JAVA随机打乱数组顺序的方法”的完整攻略: 题目分析 首先,我们需要了解一下题目的意思,了解题目的要求是什么。题目要求我们实现一种方法,可以随机打乱给定数组的元素顺序。 方法解析 接下来,我们来分析一下如何实现这种方法。一种简单的方式是通过 Fisher–Yates 洗牌算法(也称为 Knuth 洗牌算法)来实现。该算法通常被认为是一种非常高效的打…

    Java 2023年5月26日
    00
  • java+SQL server2008学生信息管理系统源码

    下面是详细的攻略讲解: 1. 下载源码并导入到IDE中 首先,你需要从网站下载Java + SQL Server 2008学生信息管理系统的源码。该源码通常是一个压缩包。下载完成后,你需要解压该压缩包。解压完成后,你会看到一个文件夹,文件夹中包含了一些Java源代码和配置文件。 接下来,你需要将该源码导入到你的IDE中,比如Eclipse等IDE。具体的导入…

    Java 2023年5月20日
    00
  • java去除字符串中的空格、回车、换行符、制表符的小例子

    以下是详细讲解 “Java去除字符串中的空格、回车、换行符、制表符的小例子”的完整攻略以及两条示例说明: 1. Java中的字符串常见空白字符 Java中的字符串中包含了许多不可见的字符,如”空格、回车、换行符和制表符”,称为”空白字符”,这些字符在某些情况下可能会干扰代码的正常执行,特别是在字符串方面可能会引起问题。所以,在某些情况下,需要将这些字符从字符…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部