`
Adan-Chiu
  • 浏览: 21949 次
社区版块
存档分类
最新评论

gradle-依赖管理

 
阅读更多

   

依赖管理

       几乎所有的基于JVM的软件项目都需要依赖外部类库(通常以jar形式存在)来重用现有功能。jar文件规范不要求你指定类库版本。然而,将版本号添加到jar文件上来标识一个特定的发布版本(比如:spring-context-3.1.3.RELEASE.jar)是常见的做法。随着项目由小变大,项目所依赖的模块和第三方类库会越来越多。组织和管理好jar文件显得至关重要。

由于Java语言并没提供依赖管理的工具,所以你的团队需要自己开发一套存储和检索依赖的想法。你可能会采取以下几种常见的方法:

  • 手动复制JAR文件到目标机器,这是最原始的很容易出错的方法。
  • 使用一个共享的存储介质来存储JAR文件(比如共享的网盘),你可以加载网络硬盘或者通过FTP检索二进制文件。这种方法需要开发者事先建立好与仓库的连接,手动添加新的依赖到仓库中.

  • 把依赖的JAR文件同源代码都添加到版本控制系统中。这种方法不需要任何额外的步骤,你的同伴在拷贝仓库的时候就能检索依赖的改变。另一方面,这些JAR文件占用了不必要的空间,当你的项目存在相互之间依赖的时候你需要频繁的check-in的检查源代码是否发生了改变。

 尽管上面的方法都能用,但是这距离理想的解决方案差远了,因为他们没有提供一个标准化的方法来命名和管理JAR文件。至少你得需要开发库的准确版本和它依赖的库(传递依赖)

使用自动化的依赖管理

声明依赖


依赖属性

当依赖管理器从仓库中查找依赖时,需要通过属性的结合来定位,最少需要提供一个name。

  • group: 这个属性用来标识一个组织、公司或者项目,可以用点号分隔,Hibernate的group是org.hibernate。
  • name: name属性唯一的描述了这个依赖,hibernate的核心库名称是hibernate-core。
  • version: 一个库可以有很多个版本,通常会包含一个主版本号和次版本号,比如Hibernate核心库3.6.3-Final。
  • classifier: 有时候需要另外一个属性来进一步的说明,比如说明运行时的环境,Hibernate核心库没有提供classifier。

你可以使用下面的语法在项目中声明依赖

dependencies {
    compile 'org.apache.commons:commons-email:1.5'
    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.4.2.Final'
}

       首先声明要给哪个配置添加依赖,然后添加依赖列表,你可以用map的形式来注明,你也可以直接用冒号来分隔属性,比如这样的:

动态指定版本

        如果你想使用一个依赖的最新版本,你可以使用latest.integration,比如声明 Cargo Ant tasks的最新版本,你可以这样写org.codehaus .cargo:cargo-ant:latest-integration,你也可以用一个+号来动态的声明:cargo 'org.codehaus.cargo:cargo-ant:1.+'

        如果你项目中依赖比较多,你把一些共同的依赖属性定义成外部属性可以简化build脚本。

//声明外部属性
ext.cargoGroup = 'org.codehaus.cargo'
ext.cargoVersion = '1.3.1'
dependencies {
	//使用映射声明依赖
	compile group: cargoGroup, name: 'cargo-core-uberjar',version: cargoVersion
	//用快捷方式来声明,引用了前面定义的外部属性
	cargo "$cargoGroup:cargo-ant:$cargoVersion"
}

 配置仓库

repositories {
	mavenCentral()
}
 常用仓库
repositories {
        mavenLocal()//添加本地长裤
        maven {//自定义仓库,私服等
           name 'Custom Maven Repository',
           url 'http://repository.forge.cloudbees.com/release/')
        }
        mavenCentral()//maven中央仓库
        jcenter()//jcenter仓库
}

解决依赖问题

       版本冲突是一个棘手的问题。如果你的项目有很多依赖,而且你选择自动解决传递性依赖,那么版本冲突几乎是不可避免的。Gradle解决版本冲突的默认策略是选择最新的依赖版本(绝大部分情况下可以解决依赖冲突问题)。依赖报告是最有用的工具,它可以帮助选择所需要依赖的版本。

检查依赖报告

当你运行dependencies任务时,这个依赖树会打印出来,依赖树显示了你build脚本声明的顶级依赖和它们的传递依赖

仔细观察你会发现有些传递依赖标注了*号,表示这个依赖被忽略了,这是因为其他顶级依赖中也依赖了这个传递的依赖,Gradle会自动分析下载最合适的依赖。

应对版本冲突

       Gradle不会自动通知你项目遇到了版本冲突问题。必须不断的运行依赖报告以找出冲突并不是一个实际的解决方法。你可以更改默认的解决策略,当遇到版本冲突问题是让构建失败

 

//所有依赖
configurations.all {
  resolutionStrategy {
    failOnVersionConflict()
  }
}

//or 指定依赖
configurations.hibernate-core.resolutionStrategy {
    failOnVersionConflict()
}

      失败对于调试目的很有帮助,特别是建立项目的早期阶段和改变依赖关系时,运行项目的任何task都会显示版本冲突信息:

Conflict(s) found for the following module(s):
- org.slf4j:slf4j-api between versions 1.7.26 and 1.7.25
Run with:
--scan or
:dependencyInsight --configuration compileClasspath --dependency org.slf4j:slf4j-api
to get more insight on how to solve the conflict.

排除传递依赖

        Gradle允许你完全控制传递依赖,你可以选择排除全部的传递依赖也可以排除指定的依赖,假设你不想使用UberJar传递的xml-api的版本而想声明一个不同版本,你可以使用exclude方法来排除它

compile ('ch.qos.logback:logback-classic:1.2.3'){
//排除传递依赖 exclude
    exclude group: 'org.slf4j', module: 'slf4j-api'
    //transitive = false;//全部排除
}

       exclude属性值和正常的依赖声明不太一样,你只需要声明group和(或)module,Gradle不允许你只排除指定版本的依赖。

       有时候仓库中找不到项目依赖的传递依赖,这会导致构建失败,Gradle允许你使用transitive属性来排除所有的传递依赖:

dependencies {
    implementation('com.google.guava:guava:23.0') {
        transitive = false
    }
}

 项目可以决定完全禁用可传递依赖项(全部排除)

configurations.all {
    transitive = false
}

 强制指定一个版本

configurations.cargo.resolutionStrategy {
    force 'org.slf4j:slf4j-api:1.7.26'//强制性的指定一个版本
}

 或

configurations.all {
  resolutionStrategy {
    force 'org.slf4j:slf4j-api:1.7.26'
  }
}

 

 

分享到:
评论

相关推荐

    gradle-7.2-all,gradle-7.0.2-bin

    - Gradle 提供了强大的依赖管理系统,允许项目声明其依赖,并自动从Maven或 Ivy 仓库下载这些依赖。它还支持依赖版本管理和解决冲突。 4. **缓存机制**: - Gradle 的本地缓存机制可以存储已下载的依赖,避免不必...

    Android gradle 资源下载 gradle-6.7.1-all.zip gradle-4.10.1-all.zip

    相比Android Studio早期使用的Ant和后来的Maven,Gradle提供了更加灵活的依赖管理和构建流程定制。 `gradle-6.7.1-all.zip`是Gradle的6.7.1版本,这个版本可能包含了一些性能优化、新功能和对旧版的兼容性改进。...

    gradle-6.0.1-all.zip和gradle-6.0.1-bin.zip

    Gradle支持依赖管理,允许你在构建脚本中声明项目依赖,Gradle会自动下载并管理这些依赖。例如,对于一个Java项目,你可能会在`build.gradle`中这样写: ```groovy dependencies { implementation '...

    gradle-6.0.1-all.zip和gradle-6.0.1-all.zip.sha256

    使用Gradle 6.0.1版本,开发者可以享受其性能优化和新功能,例如改进的依赖管理和更高效的构建过程。此外,它支持Groovy和Kotlin DSL,使得构建脚本编写更加灵活。在Android Studio中,Gradle还负责处理Android应用...

    gradle-8.0-all和gradle-8.0-bin最新版本,因国内下载极其慢,我就上传上来了,希望大家可以用到

    - **依赖管理**: Gradle使用传递性依赖的概念,能自动解决项目中所有模块之间的依赖关系,并从Maven或 Ivy仓库下载所需的库。 - **增量构建**: Gradle智能地跟踪项目的改变,只执行必要的构建步骤,大大提高了构建...

    gradle-6.8.3-all.zip&gradle-6.8.3-bin.zip.zip

    - **构建脚本**: Gradle 使用Groovy或Kotlin DSL编写构建脚本(build.gradle),定义项目的构建逻辑,包括任务(Task)、依赖管理和编译规则。 - **依赖管理**: Gradle 支持声明式依赖,允许你在构建脚本中指定项目...

    gradle-3.3-all.zip 绿色版本,欢迎下载

    3. **改进的依赖管理和解决策略**:Gradle 3.3优化了依赖解析,能更准确地处理传递性依赖,并且提供了更好的冲突解决报告。 4. **集成开发环境(IDE)支持**:对于Android Studio这样的IDE,Gradle 3.3提供了更好的...

    gradle-6.5.1-bin.zip下载.rar

    在实际使用中,开发者会编写Gradle构建脚本(build.gradle),定义项目的构建逻辑,包括设置编译器版本、依赖管理、打包选项等。例如,Android应用的build.gradle文件通常会声明Android插件版本、应用的最低SDK版本...

    gradle-3.2.1-all.zip,完整版-解压即可使用

    例如,可能优化了依赖管理,使得库的下载和解析更快;或者改善了并行构建的能力,使得大型项目构建时间缩短。 总的来说,Gradle-3.2.1是一个全面且独立的构建工具,对于Android开发者来说尤其重要,因为它提供了...

    gradle-3.0-bin.zip

    在这个版本中,Gradle 对性能进行了提升,同时也改进了对依赖管理的支持。 在Android开发环境中,Gradle 是必不可少的一部分,因为Android Studio 默认使用Gradle作为构建系统。Gradle-3.0 版本为Android开发者带来...

    gradle-2.10-all.zip,完整版

    在Gradle-2.10中,依赖管理是其核心功能之一。你可以声明项目所需的库和它们的版本,Gradle会自动解决依赖关系并下载这些库。对于Android项目,它能处理AAR(Android Archive)格式的依赖。 3. **缓存机制**: ...

    gradle-4.4-all.zip

    Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。 gradle-4.4-all....

    Gradle-3.5-all.zip及gradle-3.2-bin.zip

    8. **多项目构建**:Gradle可以管理多个相互依赖的子项目,这对于大型的企业级项目尤为有用。 在升级Gradle时,从3.2到3.5版本,需要注意的是可能引入的新功能、性能改进以及可能的API变更。开发者应当查阅官方发布...

    gradle合集 gradle-4.7-all.zip

    例如,Gradle 4.7可能引入了对Java 9和10的支持,提升了构建速度,增强了依赖管理和插件系统的功能。 在压缩包子文件的文件名称列表中,我们看到两个文件:"gradle-4.7-all.zip"和"gradle 全部下载地址"。前者是...

    gradle-6.6-all.zip

    4. `licences`:包含Gradle及其依赖库的许可文件。 5. `init.d`:初始化脚本目录,可以放置自定义的Gradle初始化脚本来定制构建行为。 6. `samples`:可能包含示例项目,帮助用户了解如何使用Gradle进行项目构建。 ...

    gradle-4.4-rc-2-src.zip和gradle-4.4-rc-2-src.zip.sha256

    总的来说,了解和掌握Gradle对于任何Android开发者都是至关重要的,因为它负责处理应用构建、依赖管理和版本控制等关键任务。通过学习Gradle源码,开发者可以更好地优化构建流程,解决可能出现的构建问题,同时提升...

    gradle-4.5.1-bin.zip,完整版-解压即可使用 官方绿色版

    Gradle-4.5.1是Gradle的其中一个稳定版本,提供了一套完整的功能,包括编译、打包、依赖管理以及自定义构建逻辑等。这个版本在发布时被视为官方绿色版,意味着它是可以直接运行而无需安装的便携式版本,方便用户快速...

    gradle-3.4-all.zip,完整版-解压即可使用

    4. **依赖管理和版本控制**:Gradle-3.4改进了依赖管理和解决冲突的机制,允许开发者更精确地控制依赖关系,避免版本冲突问题。 5. **缓存策略**:Gradle-3.4对本地和远程缓存进行了优化,可以更高效地复用已下载的...

    gradle-4.8-bin下载

    5. **依赖管理**:自动处理项目依赖关系,可以从Maven仓库或其他源下载依赖。 总之,Gradle-4.8 是一个高效且功能强大的构建工具,对于Android开发者来说,它是构建和管理项目不可或缺的一部分。当遇到下载问题时,...

    下载 gradle-4.0-milestone-1-all.zip 官方绿色版

    - Gradle的依赖管理允许开发者声明项目所需库的版本,Gradle会自动处理这些依赖的下载和管理。 - 使用`apply plugin: 'com.android.application'`或`apply plugin: 'com.android.library'`来启用Android插件,这将...

Global site tag (gtag.js) - Google Analytics