文章目录
普通程序员
commons-httpclient-3.0-src.zip下载
用Eclipse新建一个kotlin项目,同时新建一个libs文件夹,把jar包放入
然后右键jar包-Build Path-Add to Build Path
按照官方文档的写法我们写一个下载图片的代码
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取消其他项目依赖,保留一个即可