`
wbj0110
  • 浏览: 1602853 次
  • 性别: 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')
}
分享到:
评论

相关推荐

    cordova生成android的settings.gradle配置module(csdn)————程序.pdf

    ### Cordova生成Android的settings.gradle配置Module解析 #### 一、引言 ...对于Android平台,Cordova会自动生成一系列...对于开发者而言,理解这一机制有助于更好地管理项目的依赖关系,并确保应用程序能够顺利构建。

    手把手带你自定义 Gradle 插件 —— Gradle 系列(2).doc

    插件的本质与`.gradle`文件类似,但它们更易于管理和复用。例如,Android Gradle Plugin就是引入Android构建流程的关键。 ### 2. Gradle插件的优点 - **逻辑复用**:通过Gradle插件,可以将通用的构建逻辑封装起来...

    为什么说 Gradle 是 Android 进阶绕不去的坎 —— Gradle 系列(1).doc

    ale 插件: 提供具体构建逻辑,如 Android 插件负责处理 Android 项目的构建细节; Project: 表示一个独立的构建项目,可以包含多个子 ...通过逐步深入学习 Gradle 系列文章,你将能够更好地掌握这个强大的构建工具。

    gradle全集之gradle-6.1.1-all.zip

    Gradle以其灵活的构建脚本和强大的依赖管理机制而著名,允许开发者构建、自动化测试和部署软件。`gradle-6.1.1-all.zip`是Gradle的一个特定版本——6.1.1的完整发行版,包含所有必要的组件以供离线使用。 该压缩包`...

    gradle-7.4-bin

    Gradle 是一个强大的构建自动化工具,广泛用于Java、Kotlin、Groovy等语言的项目管理。"gradle-7.4-bin" 指的是 Gradle 的 7.4 版本的二进制发行版。这个版本包含了运行Gradle所需的所有文件,包括可执行的JAR和其他...

    gradle-5.0-all.zip 快速下载

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

    Java项目构建新型利器——Gradle

    随着现代软件开发的复杂性不断增加,构建自动化成为了一种必要,Java项目构建的新型利器——Gradle应运而生。Gradle是基于Java的下一代构建工具,它的出现改变了构建工具的格局,提供了更强的表现力和更好的可维护性...

    gradle-6.7.1-bin离线包

    2. **更好的依赖管理**:Gradle的依赖管理和解决策略在6.7.1版本中得到增强,能更准确地处理依赖关系,减少不必要的下载,并能自动处理版本冲突。 3. **插件生态系统**:Gradle 6.7.1 支持各种插件,这些插件扩展了...

    gradle-7.6.2解压即用

    在Gradle中,管理项目依赖是相当直观的。你可以通过`dependencies`块来指定项目所需库。例如,添加对JUnit测试框架的依赖: ```groovy dependencies { testImplementation 'junit:junit:4.13.2' } ``` **3. 缓存...

    Android studio 配置gradle 2.3.1 插件所需pom、jar文件

    它描述了Gradle的依赖关系、版本信息和其他元数据,可以帮助构建系统正确地下载和管理Gradle的依赖。 在实际操作中,如果需要手动配置Gradle,通常会将这些文件放在本地或远程仓库。Android Studio通过配置`...

    gradle-4.5.1-all

    4. **依赖管理**:Gradle 提供了强大的依赖解析和管理机制,可以自动管理项目中所有依赖库的版本,避免版本冲突,同时支持动态版本,使得开发者可以轻松地更新依赖。 5. **插件系统**:Gradle 的插件系统允许开发者...

    gradle-3.5.1-bin.zip

    1. **依赖管理**:Gradle的核心功能之一是管理项目依赖。通过在构建脚本中声明依赖,Gradle可以从远程仓库(如Maven Central或JCenter)下载所需库,并管理它们的版本,确保正确解决依赖关系。 2. **插件系统**:...

    gradle.docx

    综上所述,Gradle凭借其灵活的DSL、强大的多项目构建支持、高效的依赖管理和易于迁移等特点,已成为现代软件开发中不可或缺的构建工具之一。无论是对于单个项目还是大型多项目体系结构,Gradle都能够提供高效、可靠...

    gradle-6.5.7z

    - **依赖管理(Dependency Management)**: Gradle支持声明性依赖,通过在构建脚本中指定依赖库,自动解决和下载这些依赖。它可以处理多种类型的依赖,如编译、运行、测试等。 - **插件(Plugins)**: 插件是预先...

    gradle-4.8-all.zip 快速下载

    Gradle 4.8 版本引入了重要的新特性——依赖锁定,这是该版本的核心亮点。依赖锁定功能旨在解决一个常见的问题,即当项目依赖于多个库的不同版本时,由于这些库的版本动态更新,可能导致构建的不一致性和复现性难题...

    gradle-2.8

    Gradle使用基于Groovy或Kotlin的声明式语言编写构建脚本,使得配置项目结构、依赖管理、构建任务等变得直观而灵活。在`gradle-2.8`中,你可以找到这些脚本,了解如何定义项目、添加依赖、定制构建过程。 依赖管理是...

    gradle-4.6-all.zip

    在本案例中,我们关注的是Gradle的特定版本——Gradle 4.6,它包含在一个名为"gradle-4.6-all.zip"的压缩包内。这个压缩包是Gradle的全量发行版,包含了运行Gradle所需的全部依赖和库。 `gradle-4.6-all.zip`通常...

    gradle-3.3

    依赖管理是Gradle的核心功能之一。它允许开发者声明项目所需的库和其他依赖项,Gradle会自动下载并管理这些依赖。在Gradle 3.3中,引入了更精细的依赖版本控制策略,比如“strict”约束,可以确保项目只使用指定的...

    gradle-3.4-bin.zip

    Gradle的强大之处在于其灵活的依赖管理。在`build.gradle`中,你可以声明项目依赖,Gradle会自动下载并管理这些依赖。例如: ```groovy dependencies { compile 'com.example:library:1.0.0' } ``` 这行代码表示...

    gradle-2.11-all.zip

    - **依赖管理**: Gradle通过配置文件管理项目依赖,并自动下载所需的库。 - **任务**: 任务是Gradle中的基本工作单元,比如`assemble`(组装项目)、`test`(运行测试)等。任务之间可以有依赖关系,形成任务图。 - ...

Global site tag (gtag.js) - Google Analytics