2016-07-05 66 views
0

在我的Gradle項目中,我需要定義兩種類型的存儲庫:一個平面目錄和一個Maven存儲庫(本地Nexus服務器)。在Gradle中合併/解析兩個存儲庫類型

我可以分開工作,但不能讓他們一起打好。理想情況下,我會讓Gradle首先查看本地目錄,然後在Maven存儲庫中查看。

當前設置

我在build.gradle定義的存儲庫這樣的:

repositories { 
    flatDir dirs: "${rootProject.projectDir}/libs" 
    flatDir dirs: "${rootProject.projectDir}/test.libs" 

    maven { 
     credentials { 
      username nexus_username 
      password nexus_password 
     } 
     url "http://nexus-server/nexus/content/groups/public" 
    } 
} 

libs(和test.libs)目錄,jar文件名可能會或可能不會有版本(但是當使用flatDir存儲庫時,我認爲這是無關緊要的):

libs\activation.jar 
libs\imap.jar 
.... 
libs\<closed_source_framework>.jar 
.... 
libs\gson-2.2.4.jar 
libs\stax-utils.jar 
..... 

我無法使用本地Nexus服務器的原因是因爲<closed_source_framework>.jar; libs文件夾中的大多數依賴項都與該分發包打包在一起,我無法可靠地獲取版本信息以將其從Nexus中提取出來。現在

,其他球隊的一個發佈自己的罐子Nexus的服務器,我想能夠獲得Nexus拉他們的罐子,所以我有(再次)在我build.gradle定義我的依賴關係:

dependencies { 

    // Grab other-team jar files from Nexus server 
    compile "other-team-group:other-team-jar-1:version" 
    compile "other-team-group:other-team-jar-2:version" 
    compile "other-team-group:other-team-jar-3:version" 

    // Grab everything else from 'flatDir' 
    compile name: 'activation' 
    compile name: 'imap' 
    ... 
    compile name: 'gson-2.2.4' 
    compile name: 'stax-utils' 
    ..... 

} 

的問題

所以現在談到我的問題。我曾預計Gradle會按照我的build.gradle中指定的順序搜索repositories;這意味着它會首先查找當地的libs文件夾,然後轉到Nexus,如果它無法在本地找到它。我看到的是,Gradle正在查看Nexus服務器,查找當地libs文件夾中的jar文件。顯然,這會減慢我的構建(我已定義了約30個依賴關係)。

一些信息

輸出gradle properties命令,以顯示存儲庫的信息:

..... 
repositories: [org.gradle.api.internal.ar[email protected]18814b1b, org.gradle.api.internal.[email protected]6dff028] 
..... 

輸出gradle --info compileJava,表明搖籃正在做一個查找到的Nexus:

..... 
// Successfully find the other team jar files in Nexus, this is okay 
Download http://nexus-server/nexus/content/groups/public/other-team-group/other-team-jar-1/version/other-team-jar-1-version.pom 
Download http://nexus-server/nexus/content/groups/public/other-team-group/other-team-jar-2/version/other-team-jar-2-version.pom 
Download http://nexus-server/nexus/content/groups/public/other-team-group/other-team-jar-3/version/other-team-jar-3-version.pom 
..... 
// Continues looking in Nexus for jar files that should be found in local libs folder 
Resource missing. [HTTP GET: http://nexus-server/nexus/content/groups/public//activation//activation-.pom] 
Resource missing. [HTTP HEAD: http://nexus-server/nexus/content/groups/public//activation//activation-.jar] 
Resource missing. [HTTP GET: http://nexus-server/nexus/content/groups/public///imap//imap-.pom] 
Resource missing. [HTTP HEAD: http://nexus-server/nexus/content/groups/public//imap//imap-.jar] 
..... 

底線

如何讓Gradle停止查看Maven存儲庫中的jar文件,我知道它只能在本地找到?

回答

1

我也在Gradle forums上發佈了這個問題。我有複製/粘貼下面的解決方案。


搖籃會更喜歡用POM /常春藤描述符的工件上的 神器沒有。我認爲這就是爲什麼gradle在 之後繼續搜索的原因,它在flatDir存儲庫中找到匹配項。這可能會或可能不會解決您的問題 ,但您可以使用FileCollectionDependency而不是 a ModuleDependency

如:

ext { 
    libs = "${rootProject.projectDir}/libs" 
    testLibs = "${rootProject.projectDir}/test.libs" 
} 
dependencies { 
    compile files("${libs}/activation.jar", "${libs}/imap.jar") 
    compile files("${testLibs}/gson-2.2.4.jar") 
    ... 
}