当我向一位同事解释如何将Gradle用于Java项目时(他正在远离Maven ),我们遇到了各种代码示例。 有些示例将编译配置用于依赖项,而其他示例则使用Implementsapi

dependencies {
compile 'commons-httpclient:commons-httpclient:3.1'
compile 'org.apache.commons:commons-lang3:3.5'
}
dependencies {
api 'commons-httpclient:commons-httpclient:3.1'
implementation 'org.apache.commons:commons-lang3:3.5'
}

这篇文章是基于文档和StackOverflow问题的摘要,向他解释了要使用的配置。

新的依赖项配置

Gradle 3.4引入了Java库插件 ,其中包括当时新的配置实现api (以及其他)。 这些是为了替换此插件不建议使用的编译配置。 想法是,新配置将有助于防止多模块项目的传递依赖项泄漏。

请注意,在本文中,我仅以compile vs Implementation / api配置为例。 还引入了其他新的替代配置,请阅读文档以获取更多信息。

Java

对于使用Gradle 3.4+的Java项目,则取决于您是构建应用程序还是库。

对于库项目或多模块项目中的库模块,建议使用Java库插件,因此在build.gradle中使用它

apply plugin: 'java-library'

代替

apply plugin: 'java'

然后,您将使用实现还是api ,这取决于您是否要将依赖项公开给库的使用者。

对于普通的应用程序项目,您可以坚持使用Java插件并继续使用编译配置。 话虽如此,我已经尝试将Java库插件用于一个应用程序项目,并且看起来工作正常。

安卓系统

对于Android项目,新配置带有Android Gradle Plugin 3.0 。 因此,除非您仍在使用2.x版本的Android Studio / Android Gradle插件,否则不建议使用compile 。 因此,即使是应用程序,也应该使用实现

实际上,当我最近升级Android Studio时,它想到了以下信息:

配置“编译”已过时,并已由“实现”代替。
它将在2018年底删除

如果您使用Kotlin而不是Java,我认为这也适用。

Groovy

使用Groovy和Java的项目怎么样? 这可以用于Groovy / Java混合项目,也可以用于需要Groovy支持某些支持工具(例如Spock或Logback配置 )的Java项目。

过去,我已经将Groovy插件而不是Java插件用于混合项目。 Groovy插件扩展了Java插件,并将处理Java源代码和Groovy源代码的编译。

apply plugin: 'groovy'

您可以继续对Java应用程序模块执行此操作,但是文档指出Groovy插件与Java库插件存在兼容性问题,因此需要解决库模块。

当然,这篇简短的文章是针对新手的,只是在学习所有新的依赖项配置方面只是一个草稿。

翻译自: https://www.javacodegeeks.com/2018/03/gradle-dependencies-java-use-compile-implementation.html

Java的Gradle依赖关系,使用编译还是实现?相关推荐

  1. Java EE CDI依赖关系消歧示例

    在本教程中,我们将向您展示如何避免CDI bean中的依赖关系消除歧义. 在CDI中,我们可以为应用程序中不同客户端的接口的多个实现实现依赖项注入. 依赖关系消除歧义的问题是客户端如何在不同的实现中调 ...

  2. gradle 编译java_Java的Gradle依赖关系,使用编译还是实现?

    gradle 编译java 当我向一位同事解释如何将Gradle用于Java项目时(他正在远离Maven ),我们遇到了各种代码示例. 一些示例将编译配置用于依赖项,而其他示例则使用Implement ...

  3. java maven 项目依赖关系,java – 关于依赖关系共享的Maven多模块项目组合

    有几个类似的问题,但没有这样的.你如何处理这种情况(典型情况): 一个由8-11个子项目组成的项目,具有父工件/项目和一个主要项目,主要使用/声明其他项目作为模块. 问题是所有项目"严格&q ...

  4. java ee cdi_Java EE CDI依赖关系消歧示例

    java ee cdi 在本教程中,我们将向您展示如何避免CDI bean中的依赖关系消除歧义. 在CDI中,我们可以为应用程序中不同客户端的接口的多个实现实现依赖项注入. 依赖性消除歧义的问题是客户 ...

  5. java什么是依赖注入_什么是依赖注入?

    转自 https://blog.csdn.net/coding_1994/article/details/80634810,这位作者写的很清晰. Spring 能有效地组织J2EE应用各层的对象.不管 ...

  6. make--变量与函数的综合示例 自动生成依赖关系

    一.变量与函数的示例 示例的要求 1.自动生成target文件夹存放可执行文件 2.自动生成objs文件夹存放编译生成的目标文件 3.支持调试版本的编译选项 4.考虑代码的扩展性 完成该示例所需的 1 ...

  7. java文件编译_【java】javac编译多个有依赖关系的java文件为class文件

    历史文章: [javac命令不能使用,提示不是内部命令或外部命令,请查看历史文章] =================需求说明========================== 之前的文章中,仅说明 ...

  8. gradle 查看依赖类库版本_使用Gradle命令查看项目中库的依赖关系

    在Terminal中,可以通过 gradle 的命令查看项目中所使用库的版本,并且可以更加直观看到库之间的依赖关系.同时它们可以帮助您跟踪并解决与库版本冲突有关的任何问题.Building Andro ...

  9. java ee cdi_Java EE CDI程序化依赖关系消歧示例–注入点检查

    java ee cdi 在本教程中,我们将看到在注入Java EE CDI bean时如何避免程序依赖消除歧义. 我们已经在Jave EE依赖关系消除歧义示例中展示了如何避免CDI Bean中的依赖关 ...

最新文章

  1. MySQL · 最佳实践 · 什么时候该升级内存规格
  2. Parcelab 和 Serializable
  3. php roadrunner,使用RoadRunner 加速 Laravel 应用
  4. logic回归是一种线性回归
  5. python中下划线开头的命名_Python 中各种下划线的骚操作:_、_xx、xx_、__xx、__xx__、_classname_...
  6. Spark之SparkStreaming数据源
  7. 吐血整理!必须收藏,44条代码优化细节
  8. Labview双通道虚拟示波器完整程序 实现功能如下图
  9. 汽车扭杆弹簧式悬架系统设计-轿车扭杆弹簧式悬架设计方案
  10. vue 创建项目时报错yorkie: Command failed.
  11. Photoshop2020默认快捷键整理(Mac版)
  12. opencv-图像阈值
  13. 如何从型号判断NVR支持的接入路数和硬盘数?
  14. 舌苔发白是什么原因造成的?
  15. 【GIS开发】VB6.0下MO控件的安装:安装教程及MO破解教程(MapObjects2.x)
  16. 一个jar包冲突引起的StackOverflowError
  17. 【Oracle数据库】关联、子查询
  18. Linux桌面录屏分享
  19. node-gyp编译失败
  20. 计算机中不同进制的转换说明

热门文章

  1. 一次堆外OOM问题的排查过程
  2. mybatis入门(三)之Mapper XML 文件
  3. MySQL trim()函数
  4. 11 个简练的 Java 性能调优技巧
  5. 并发场景下MySQL存在的问题及解决思路
  6. 教你如何监控 Java 线程池运行状态
  7. 分享一套阿里高级Java面试题,要去阿里的先过这些题。
  8. laravel如何生成swagger接口文档
  9. “温室里的花朵”也要直面困难
  10. Vue.js基础体验(一)