我对JVM World非常陌生,我发现Maven和Gradle非常非凡的工具来处理构建和依赖关系。如何处理Web托管的.jar文件作为Gradle中的依赖项?
我需要在我的解决方案中包含两个jar文件。它们不在任何Maven存储库中。我必须使用libs文件夹并在开发人员或回购中共享文件吗?
jar文件不受我控制,我也不想经过Maven Central或类似的东西。我相信这些jar文件的URL是非常持久的。
我对JVM World非常陌生,我发现Maven和Gradle非常非凡的工具来处理构建和依赖关系。如何处理Web托管的.jar文件作为Gradle中的依赖项?
我需要在我的解决方案中包含两个jar文件。它们不在任何Maven存储库中。我必须使用libs文件夹并在开发人员或回购中共享文件吗?
jar文件不受我控制,我也不想经过Maven Central或类似的东西。我相信这些jar文件的URL是非常持久的。
第一个解决方案
不要离开Gradle。相反,请尝试使用文件集合。它应该工作!但不适合我,SE第二个解决方案
dependencies {
def webHostedJarFiles = ["http://url.to.jar", "http://url.to.second.jar"]
.collect{fileName->new File(fileName)}
compile([
files{webHostedJarFiles},
'commons-validator:commons-validator:1.4.1'
/* and all the other Maven dependencies...*/])
}
直接把网址中的文件的方法给你一个不能转换URL“http://url.to.jar”到文件例外
通过某种原因,这并没有为工作我。这些依赖被下载并显示在IntelliJ的gradle插件中,但编译comilpiler时似乎无法找到它。
第二种解决方案
不要离开Gradle。而是将文件下载到libs文件夹中。
复印任务:
task downloadJarsToLibs(){
def f = new File('libs/myFile.jar')
if (!f.exists()) {
new URL('http://path.to/myFile.jar').withInputStream{ i -> f.withOutputStream{ it << i }}
}
}
依赖关系:
dependencies {
compile([
fileTree(dir: 'libs', include: ['*.jar']),
'commons-validator:commons-validator:1.4.1'
/* and all the other Maven dependencies...*/])
}
第三溶液(@RaGe的Cortesey)
实施例的文件:
http://exampe.com/uda/virtuoso/7.2/rdfproviders/jena/210/virt_jena2.jar
http://exampe.com/uda/virtuoso/7.2/jdbc/virtjdbc4.jar
的build.gradle:
repositories {
ivy {
url 'http://example.com/'
layout 'pattern', {
artifact '/uda/[organisation]/7.2/[module]/[revision].[ext]'
}
}
mavenCentral()
}
dependencies {
compile 'virtuoso:rdfproviders/jena210:virt_jena2:jar', 'virtuoso:jdbc:virtjdbc4:jar'
}
可惜,这似乎并没有对我的设置工作,但摇篮是幸福的,需要时下载文件(因为它们被缓存)
的替代方式做到这一点是假装在线jar文件是一个自定义布局ivy存储库。这样做的好处是您可以使用gradle的缓存功能,因此您无需为每个构建下载依赖项。见[我的答案在这里](http://stackoverflow.com/questions/23023069/gradle-download-and-unzip-file-from-url/34327202#34327202) – RaGe
我试了一下,byt我无法得到它上班。你能提供一个例子吗? – Fontanka16
我在这里举了一个例子:http://stackoverflow.com/a/34327202/745574 – RaGe