由于项目需要集成jenkins,千辛万苦的在github上找到了jenkins非官方的java api,
compile group: 'com.offbytwo.jenkins', name: 'jenkins-client', version: '0.3.7'本来是一件非常高兴的事,没想到用gradle引入的时候,死活编译不通过,报以下的错误:
D:\daydao-code\dayhr-patchManager>gradle clean build -x test
:clean UP-TO-DATE
:compileJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all files for configuration ':compileClasspath'.
> Could not find json-lib.jar (net.sf.json-lib:json-lib:2.4).
Searched in the following locations:
http://nexus.dayhr.com/nexus/content/groups/public/net/sf/json-lib/json-lib/2.4/json-lib-2.4.jar
通过依赖分析才知道,jenkins的java client api依赖了一个比较老的json包
com.offbytwo.jenkins:jenkins-client:0.3.7
+--- com.fasterxml.jackson.core:jackson-annotations:2.3.4 -> 2.6.5
+--- com.fasterxml.jackson.core:jackson-core:2.3.4 -> 2.6.5
+--- com.fasterxml.jackson.core:jackson-databind:2.3.4 -> 2.6.5 (*)
+--- dom4j:dom4j:1.6.1 (*)
+--- net.sf.json-lib:json-lib:2.4 (*)
+--- com.google.guava:guava:17.0 -> 19.0
+--- commons-lang:commons-lang:2.6
+--- commons-io:commons-io:2.4
+--- org.apache.httpcomponents:httpclient:4.3.6 (*)
+--- jaxen:jaxen:1.1.6
+--- org.slf4j:slf4j-api:1.7.21
\--- xml-apis:xml-apis:1.4.01
在maven的pom依赖定义为
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<classifier>jdk15</classifier>
</dependency>
详细的依赖信息可以参考
http://repo1.maven.org/maven2/com/offbytwo/jenkins/jenkins-client/0.3.7/jenkins-client-0.3.7.pom
当时自家的私服是有这个jar包的,仔细比较发现是gradle没有解析出jdk15这个尾巴。
/net/sf/json-lib/json-lib/2.4/json-lib-2.4-jdk15.jar
通过查阅gradle bug中心,找了几个比较有代表的bug给大家看看
https://discuss.gradle.org/search?q=Classifiers
https://discuss.gradle.org/t/build-failure-when-4-1-0-of-net-java-dev-jna-jna-is-selected-in-place-of-3-3-0-due-to-change-in-artifacts-with-classifiers/9377
https://issues.gradle.org/browse/GRADLE-1934
https://issues.gradle.org/browse/GRADLE-67
看到有这么问题,我只能是说gradle毕竟还是太年轻了,没有maven的成熟。
经过这么一方折腾后,最后按maven的jar包管理的最原始依赖【system】,还果真在gradle中找到了类似的方法:
https://docs.gradle.org/current/userguide/dependency_management.html#sub:file_dependencies
大家可以详细的阅读下gradle依赖管理,懂maven的一看就能懂。
最终把依赖配置修改成如下配置,项目顺利编译通过。
compile (group: 'com.offbytwo.jenkins', name: 'jenkins-client', version: '0.3.7'){ exclude group: 'net.sf.json-lib' } compile fileTree(dir: 'libs', include: '*.jar')