【Kotlin】Gradle依赖管理

普通程序员

commons-httpclient-3.0-src.zip下载

在这里插入图片描述
用Eclipse新建一个kotlin项目,同时新建一个libs文件夹,把jar包放入
然后右键jar包-Build Path-Add to Build Path

官网tutorial

按照官方文档的写法我们写一个下载图片的代码

import org.apache.commons.httpclient.HttpClient
import org.apache.commons.httpclient.methods.GetMethod
import java.io.File

fun main(args: Array<String>) {
	//创建一个httpclient
	var client = HttpClient()
	var method = GetMethod("http://xx.jpg");
	client.executeMethod(method)
	var responseBody = method.getResponseBody();
	method.releaseConnection();
	var file = File("1.jpg")
	file.writeBytes(responseBody)
}

第一次运行报错
在这里插入图片描述
一番百度后,原因是缺少commons-logging的jar包,下载后添加到libs,再次运行,又报错了
在这里插入图片描述
经过一番百度,原因是缺少commons-codec-1.x.jar,下载后添加到libs中,重新运行,这次生成了1.jpg
在这里插入图片描述

高级程序员

高级程序员使用IDEA,新建一个项目
在这里插入图片描述
在kotlin文件夹下新建Downloader.kt

import org.apache.commons.httpclient.HttpClient
import org.apache.commons.httpclient.methods.GetMethod
import java.io.File

fun main(args: Array<String>) {
    val httpClient = HttpClient()
    val method =
        GetMethod("图片网址.jpg")
    httpClient.executeMethod(method)
    val responseBody = method.getResponseBody();
    method.releaseConnection();

    //输出文件
    val file = File("1.jpg")
    file.writeBytes(responseBody)
}

同样修改gradle为我们之前下载的版本
在这里插入图片描述
这里我们用自动生成的build.gradle来了解依赖,不用kotlin写,我们在原始的文件中添加

implementation group: 'commons-httpclient', name: 'commons-httpclient', version: '3.1'

这就是我们添加的httpclient的依赖,当我们添加好这行代码后,IDEA会弹出一个框让我们引入依赖包
在这里插入图片描述
完整的代码为

plugins {
    id 'application'
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.41'
}

group 'com.errol.www'
version '1.0-SNAPSHOT'

application {
    mainClassName = "DownloaderKt"
}

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    testCompile group: 'junit', name: 'junit', version: '4.12'
    implementation group: 'commons-httpclient', name: 'commons-httpclient', version: '3.1'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

执行run
在这里插入图片描述
成功下载了图片
在这里插入图片描述
普通程序员百度查找解决方案,下载http-client.jar,错误然后百度下载commons-logging.jar和commons-codec.jar,这种开发效率很低,而且有个jar包可能依赖很多个jar包
高级程序员通过依赖管理,只需一个依赖,其他相关commons-logging和commons-codec都会自定依赖到项目中,这就是gradle依赖管理的优势
在这里插入图片描述

测试时依赖

公共仓库:
maven center:http://mvnrepository.com
jcenter:https://bintray.com/bintray/jcenter

举个栗子来说明,项目的build.gradle默认引入了junit

testCompile group: 'junit', name: 'junit', version: '4.12'

新建Calc.kt和测试类TestCalc.java
在这里插入图片描述

class Calc {
    fun add(x:Int,y:Int) = x + y
}
import org.junit.Assert;
import org.junit.Test;

public class TestCalc{
    @Test
    public void testAdd(){
        Calc calc = new Calc();
        int result = calc.add(1,2);
        Assert.assertEquals(3,result);
    }
}

运行test
在这里插入图片描述
测试通过在这里插入图片描述

gradle依赖冲突的解决

我们引入spring依赖

 implementation group: 'org.springframework', name: 'spring-core', version: '4.1.2.RELEASE'

在这里插入图片描述
我们看到logging的版本变成了1.1.3,之前未引入spring之前是1.0.4,可以看下之前的截图

高版本logging1.1.3理论上兼容1.0.4版本,gradle会自动解决版本兼容问题,但是特殊情况,可能会出现冲突

假如,我们希望去掉保留http-client依赖的loggin 1.0.4版本,可以在spring依赖中添加闭包,让spring去除loggin依赖

    implementation group: 'commons-httpclient', name: 'commons-httpclient', version: '3.1'

    implementation(group: 'org.springframework', name: 'spring-core', version: '4.1.2.RELEASE')
            {
                exclude group: 'commons-logging', module: 'commons-logging'
            }

在这里插入图片描述
以后遇到依赖冲突问题。可以exclude取消其他项目依赖,保留一个即可

发布了640 篇原创文章 · 获赞 143 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/103160585
今日推荐