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日

相关文章

  • Java 锁的知识总结及实例代码

    Java 锁的知识总结及实例代码 在 Java 中,锁机制是一个非常重要的多线程编程的知识点。下面对 Java 锁相关的知识进行总结,并提供两个示例代码说明锁机制的应用。 概念 互斥锁(mutex):用于控制对共享资源的访问。对于任一个时刻,只有一个线程可以访问共享资源,其他的线程必须等待。 读写锁(ReadWriteLock):允许多个线程同时读共享资源,…

    Java 2023年5月23日
    00
  • Mybatis-Plus接口BaseMapper与Services使用详解

    关于“Mybatis-Plus接口BaseMapper与Services使用详解”的攻略,我来详细讲解一下。 一、前言 Mybatis-Plus是Mybatis的一个增强工具,可以帮助我们快速地开发数据库应用程序。Mybatis-Plus提供了BaseMapper和BaseService两个接口,可以非常方便地进行数据操作。接下来我将对这两个接口进行详细的讲…

    Java 2023年5月20日
    00
  • Spring Data JPA实现动态条件与范围查询实例代码

    接下来我将为您讲解使用Spring Data JPA实现动态条件与范围查询的完整攻略。在这个过程中我将包含两条示例,以便更好地了解实现的具体步骤。 什么是Spring Data JPA? Spring Data JPA是Spring Data项目中的一部分,它是对JPA(Java Persistence API)的封装。 通过使用Spring Data JP…

    Java 2023年5月20日
    00
  • JavaWeb实现图形报表折线图的方法

    下面就是JavaWeb实现图形报表折线图的方法的完整攻略: 1. 准备工作 在实现JavaWeb图形报表折线图前,我们需要先准备好以下资源: 前端使用的图表库,例如ECharts、Highcharts等; 后端使用的JavaWeb框架,例如Spring、Struts2等; 数据库,用于存储数据; 数据库连接池,用于连接数据库。 2. 使用ECharts绘制折…

    Java 2023年6月15日
    00
  • 浅谈Spring Boot 属性配置和自定义属性配置

    浅谈Spring Boot属性配置和自定义属性配置攻略 Spring Boot属性配置 Spring Boot通过提供大量的默认属性值来简化应用程序的配置。这些属性可以在application.properties文件中定义,也可以在application.yml文件中定义。在这两种文件类型中,属性都按照键值对的形式定义,具体的格式和语法规则可以参见官方文档…

    Java 2023年5月15日
    00
  • java文件输出流写文件的几种方法

    关于“java文件输出流写文件的几种方法”的攻略,我将分以下几个部分逐一讲解: 如何创建Java文件输出流(FileOutputStream)对象 普通文件输出流的写入方法 BufferedOutputStream 缓冲文件输出流的写入方法 PrintWriter 字符文件输出流的写入方法 示例展示 1. 如何创建Java文件输出流(FileOutputSt…

    Java 2023年5月20日
    00
  • JavaEE账号注册模拟网站邮箱激活

    JavaEE账号注册模拟网站邮箱激活是一个常见的Web应用程序开发需求。具体实现这个功能的步骤如下: 1. 搭建Web应用程序 首先,需要搭建一个基于JavaEE的Web应用程序,这个应用程序会充当网站的后端服务器,接收客户端请求并返回数据。可以使用诸如Tomcat、Jetty等开源的Web服务器来搭建这个Web应用程序。 2. 设计数据库 建立数据库表,通…

    Java 2023年6月15日
    00
  • 线上dubbo线程池耗尽CyclicBarrier线程屏障异常解决记录

    下面我来详细讲解“线上dubbo线程池耗尽CyclicBarrier线程屏障异常解决记录”的完整攻略。 问题背景 最近在自己开发的一个微服务中,使用了Dubbo框架(版本2.6.5),在线上运行时突然出现了一个严重的问题:dubbo线程池耗尽CyclicBarrier线程屏障异常。具体表现为调用Dubbo服务时,服务提供方无法及时响应请求,出现了较长时间的等…

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