2016-01-08 20 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

相關問題