2016-01-08 18 views
2

我对JVM World非常陌生,我发现Maven和Gradle非常非凡的工具来处理构建和依赖关系。如何处理Web托管的.jar文件作为Gradle中的依赖项?

我需要在我的解决方案中包含两个jar文件。它们不在任何Maven存储库中。我必须使用libs文件夹并在开发人员或回购中共享文件吗?

jar文件不受我控制,我也不想经过Maven Central或类似的东西。我相信这些jar文件的URL是非常持久的。

回答

1

第一个解决方案
不要离开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' 

} 

可惜,这似乎并没有对我的设置工作,但摇篮是幸福的,需要时下载文件(因为它们被缓存)

+1

的替代方式做到这一点是假装在线jar文件是一个自定义布局ivy存储库。这样做的好处是您可以使用gradle的缓存功能,因此您无需为每个构建下载依赖项。见[我的答案在这里](http://stackoverflow.com/questions/23023069/gradle-download-and-unzip-file-from-url/34327202#34327202) – RaGe

+0

我试了一下,byt我无法得到它上班。你能提供一个例子吗? – Fontanka16

+0

我在这里举了一个例子:http://stackoverflow.com/a/34327202/745574 – RaGe

相关问题