`
wbj0110
  • 浏览: 1551419 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Gradle学习系列之七——依赖管理

阅读更多

请通过以下方式下载本系列文章的Github示例代码:

git clone https://github.com/davenkin/gradle-learning.git

 


 

一个Java项目总会依赖于第三方,要么是一个第三方类库,比如Apache commons;要么是你自己开发的另外一个Java项目,比如你的web项目依赖于另一个核心的业务项目。通常来说,这种依赖的表示形式都是将第三方的Jar文件放在自己项目的classpath下,要么是编译时的classpath,要么是运行时的classpath。

在声明对第三方类库的依赖时,我们需要告诉Gradle在什么地方去获取这些依赖,即配置Gradle的Repository。在配置好依赖之后,Gradle会自动地下载这些依赖到本地。Gradle可以使用Maven和Ivy的Repository,同时它还可以使用本地文件系统作为Repository。

在本文中,我们将以Maven的Repository为例进行讲解,要配置Maven的Repository是非常简单的,我们只需要在build.gradle文件中加入以下代码即可:

repositories {
   mavenCentral()
}

 

Gradle将对依赖进行分组,比如编译Java时使用的是这组依赖,运行Java时又可以使用另一组依赖。每一组依赖称为一个Configuration,在声明依赖时,我们实际上是在设置不同的Configuration。值得一提的是,将依赖称为Configuration并不是一个好的名字,更好的应该叫作诸如“DependencyGroup”之类的。但是,习惯了就好的。

要定义一个Configuration,我们可以通过以下方式完成:

configurations {
   myDependency
}

 

以上只是定义了一个名为myDependency的Configuration,我们并未向其中加入依赖。我们可以通过dependencies()方法向myDependency中加入实际的依赖项:

dependencies {
   myDependency 'org.apache.commons:commons-lang3:3.0'
}

 

以上,我们将Apache的commons加入了myDependency中。之后,如果有Task需要将Apache commons加入到classpath中,我们可以通过以下方式进行获取:

task showMyDependency << {
   println configurations.myDependency.asPath
}

 

执行“gradle showMyDependency”命令,在笔者的电脑上终端将显示:

:showMyDependency
/Users/twer/.gradle/caches/artifacts-26/filestore/org.apache.commons/commons-lang3/3.0/jar/8873bd0bb5cb9ee37f1b04578eb7e26fcdd44cb0/commons-lang3-3.0.jar

BUILD SUCCESSFUL

Total time: 4.405 secs

 

在实际应用时,比如我们需要调用Ant的某个target,而该target在执行时需要设置classpath,那么我们便可以通过以上方式进行设置。

 

下面,我们来看一个Java项目,该项目依赖于SLF4J,而在测试时依赖于Junit。在声明依赖时,我们可以通过以下方式进行设置:

dependencies {
   compile 'org.slf4j:slf4j-log4j12:1.7.2'
   testCompile 'junit:junit:4.8.2'
}

 

我们并没有定义名为compile和testCompile的Configuration,这是这么回事呢?原因在于,java Plugin会自动定义compile和testCompile,分别用于编译Java源文件和编译Java测试源文件。
另外,java Plugin还定义了runtime和testRuntime这两个Configuration,分别用于在程序运行和测试运行时加入所配置的依赖。


再举个来自Gradle官网的例子:在Gradle中调用Ant,首先我们通过Configuration声明一组依赖,然后在Ant定义中将该Configuration所表示的classpath传给Ant:

复制代码
configurations {
   pmd
}

dependencies {
   pmd group: 'pmd', name: 'pmd', version: '4.2.5'
}

task check << {
   ant.taskdef(name: 'pmd', classname: 'net.sourceforge.pmd.ant.PMDTask', classpath: configurations.pmd.asPath)
   ant.pmd(shortFilenames: 'true', failonruleviolation: 'true', rulesetfiles: file('pmd-rules.xml').toURI().toString()) {
      formatter(type: 'text', toConsole: 'true')
      fileset(dir: 'src')
   }
}
复制代码

 

如果存在依赖冲突,在默认情况下,Gradle会选择最新版本,这和Maven是不同的,Maven会选择离依赖树最近的版本。当然,我们可以通过设置Configuration的resolutionStrategy来
重新设置依赖冲突的处理规则,对此本文将不予讲解。

 

除了可以加入Maven和Ivy的Repository中的依赖之外,Gradle还允许我们声明对其他Project或者文件系统的依赖。比如,如果ProjectA的compileJava依赖于ProjectB,那么可以在ProjectA中声明如下:

dependencies {
   compile project(':ProjectB')
}

 

另外,对于本地文件系统中的Jar文件,我们可以通过以下方式声明对其的依赖:

dependencies {
   compile files('spring-core.jar', 'spring-aap.jar')
   compile fileTree(dir: 'deps', include: '*.jar')
}
分享到:
评论

相关推荐

    gradle-5.0-all.zip 快速下载

    依赖约束 —— 依赖对齐和版本锁定提供了可扩展且灵活的依赖管理模型。 通过新的性能和依赖关系管理、日志记录和弃用的 API 使用检查,构建扫描得到了显著的改进。 静态类型的 Kotlin DSL 可在创建构建逻辑时提供...

    gradle-7.6.2-all.zip 快速下载

    11、Gradle抱怨无效的工具链——拾取源包位置——它应该忽略它们[Backport] 12、仅在依赖关系约束中引用的Maven项目会引发IllegalStateException:损坏的序列化解析结果[backport] 13、无法反序列化到7.x的测试异常的...

    gradle-ios-plugin:用于 iOS 移动开发的 Gradle 插件

    Gradle iOS 插件——测试版 用于 iOS 移动开发的 Gradle 插件 有一个适用于 Gradle 的 Android 插件,为什么没有适用于 iOS 的插件? 请参阅示例 - 要求 XCode (iOS SDK) CocoaPods(依赖项) iOS-Deploy(部署到...

    霸屏天下源码java-Gradle_study:Gradle_study

    高度可定制——Gradle 以最基本的方式可定制和可扩展的方式建模。 快速——Gradle 通过重用先前执行的输出、仅处理更改的输入并并行执行任务来快速完成任务。 强大——Gradle 是 Android 的官方构建工具,支持多种...

    NineOldAndroidsFix2——master.zip

    NineOldAndroidsFix更换gradle 和删掉kotlin依赖代码

    Android实战——Tinker的集成和使用

    对于热修复我相信很多小伙伴都已经知道它们普遍的操作套路,Tinker主要是依赖自己的gradlePlugin生成拆分包,所以其拆分包的生成就由Gradle来完成,当然也可以通过命令行的方式,这里就不对命令行做讲解

    Launch4j 教程——JAR应用程序生成exe

    七、设置 JRE.8 八、保存配置.9 九、编译并生成 exe ..10 十、执行生成的 exe ..11 十一、常见问题.12 1、设置的 icon文件必须是.icon格式的;..12 2、设置的classpath必须能找到外部依赖包和文件; 12 3、...

    jinkubator-gradle-presentation-tutorial

    4_configuring_test——改变现有任务属性——基于gradle教程中的测试任务 5_custom_task_types -- 创建自定义任务类型 6_simple_build_file——插件、项目配置、java任务配置、存储库。 7_build_cycle -- 在初始化...

    Android代码-XModulable

    XModulable Latest Version ...业务组件/模块独立运行,只需要更改module.gradle对应的业务组件/模块isStandalone为true即可 使用方法 1. 添加依赖配置 android { defaultConfig { ... javaCompileOptions {

    embeddedjetty9-spring4:存根项目

    这个项目使用 Spring 4 MVC 和 gradle 2 作为构建和依赖管理代理设置了一个快速而肮脏的嵌入式 Jetty 服务器。 它提供: 几个 RESTful 测试端点来测试 MVC 功能 提供静态 HTML 页面和简单的 JavaScript 文件来测试...

    时间和三级联动控件

    PickerView 仿iOS的PickerView控件,有时间选择...使用gradle 依赖: java compile 'com.bigkoo:pickerview:1.0.0' Demo 图片(招行信用卡的“掌上生活”里面条件选择器他们用的就是我这个库,大家可以当实际项目参考)

    PrettyGirls:基于gank.io的个人应用程序

    优化gradle配置文件结构 优化冷启动速度 优化RxJava生命周期管理 修正错误 添加retrolambda依赖 添加Checksytle,Findbugs,PMD和Android Lint等代码检测工具以及使用脚本 V1.2.0 添加配置项 关于 亲,喜欢就开始...

    Android代码-YzsBaseActivity

    远程依赖方法在项目根目录下的build.gradle添加如下 allprojects { repositories { ... &lt;!--添加的话,就这一句--&gt; maven { url "https://jitpack.io" } } } 在引用项目处添加 dependencies { ...

    Android-PickerView

    PickerView (2.x系列) 精仿iOS的PickerView控件,有时间选择和选项选择并支持一二三级联动效果 ——TimePickerView 时间选择器,支持年月日时分,年月日,年月,时分等格式 ——OptionsPickerView 选项选择器,支持...

    Android打包篇:Android Studio将代码打包成jar包教程

    然后再app中的build.gradle中添加model的依赖。然后编译项目。 二、编译完成后,打开model下的build——intermediates——bundles目录,目录下有两个文件夹,debug,default,在default文件夹下有一个classess.jar,...

    java8集合源码分析-mini-spring:手写Spring——从头实现一个小型Spring框架

    java8 集合源码分析 mini-spring 手写Spring系列 手动实现一个Spring框架 内容持续更新,详细教程欢迎关注我的博客 ...依赖管理与项目构建:Gradle 功能结构 Mimi_Spring ├─framework │ ├─beans │

    auto-ftp:自动 FTP 文件下载器

    项目设置这是一个基于 Gradle 的项目,包括获取其依赖项所需的一切。 包含的 Gradle Wrapper 意味着您无需在获得项目之前预先安装 Gradle。 它将下载任何特定于 Gradle 的库本身。 只需执行以下操作,Gradle 就会为...

    yutils:工具类

    子模块添加依赖,当前最新版本:————&gt; dependencies { implementation 'com.github.yutils:yutils:1.4.5' } Github地址: : 我的CSDN: : 感谢关注微博: 下面列出一些主要类的方法,具体每个类方法和和使用...

    java实现新建文件夹源码-android-chromium:Android/Gradle为ChromiumAndroidWebview、Te

    )将剪掉大多数库依赖项,并有更好的机会避免上述问题。 注意:Google 最近宣布他们将使用 . 虽然这对于想要在 Android 平台上构建应用程序的 Web 开发人员来说是个好消息,但您可能仍然有充分的理由希望走这样的...

    android自定义组件实现仪表计数盘

    前几天开发公司项目,有个地方要做一个分数的仪表盘,根据...项目目录——&gt;build.gradle allprojects { repositories { ... maven { url 'https://jitpack.io' } } } app——&gt;build.gradle dependencies { ...

Global site tag (gtag.js) - Google Analytics