2013-06-18 35 views
2

我很難弄清楚如何解決Artifactory中的遠程工件從Gradle構建中的依賴關係。Gradle Artifactory依賴關係:SNAPSHOT模式問題

這件神器,請訪問:

http://192.168.2.130:8081/artifactory/simple/libs-snapshot-local/com/company/test/1.0-SNAPSHOT/TestArtifact-1.0-20130607.104006-2.apklib 

我的build.gradle是:

buildscript { 
    repositories { 
     maven { 
      url "http://192.168.2.130:8081/artifactory/gradle" 

      credentials { 
       username = "$artifactory_user" 
       password = "$artifactory_password" 
      } 
     } 

     dependencies { 
      classpath 'com.android.tools.build:gradle:0.4.2' 
      classpath(group: 'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '2.0.12', changing: true) 
     } 
    } 
} 

allprojects { 
    apply plugin: 'idea' 
    apply plugin: 'android' 
    apply plugin: 'artifactory' 
} 

repositories { 
    maven { 

     url "http://192.168.2.130:8081/artifactory" 

     credentials { 
      username = "$artifactory_user" 
      password = "$artifactory_password" 
     } 
    } 
} 

artifactory { 
    contextUrl = 'http://192.168.2.130:8081/artifactory/simple' 

    resolve { 
     repository { 
      repoKey = 'libs-snapshot' 
      maven = true 
     } 
    } 
} 

在Artifactory的,倉庫libs-snapshot使用maven獨特的快照行爲,並結合maven-2-default佈局,具有以下配置:

工件路徑模式:[orgPath]/[module]/[baseRev](-[folderItegRev])/[module]-[baseRev](-[fileItegRev])(-[classifier]).[ext]

文件夾整合修訂的RegExp:SNAPSHOT

文件集成修訂的RegExp:SNAPSHOT|(?:(?:[0-9]{8}.[0-9]{6})-(?:[0-9]+))

所以從我的理解搖籃應通過查看解決的依賴:

http://192.168.2.130:8081/artifactory/simple/libs-snapshot/com/company/test/TestArtifact/1.0-SNAPSHOT/TestArtifact-1.0-xxxxxxxx.xxxxxx-x.apklib 

,但它實際上是在看:

http://192.168.2.130:8081/artifactory/com/company/test/TestArtifact/1.0/TestArtifact-1.0.apklib 

所以顯然它不能解決依賴。我還試圖用通過Artifactory的產生gradle這個編譯行,但它沒有這樣做的伎倆之一:

compile(group: 'com.company.test', name: 'TestArtifact', version: '1.0-20130607.104006-2', ext: 'apklib') 

雖然我花了一些時間閱讀文章和搖籃/ Artifactory的文檔,我更糊塗了,現在我剛剛開始...所以,我有幾個問題:

1)Gradle似乎沒有使用artifactory {}部分。實際上,它只使用我在存儲庫{}部分中聲明的url。但是,當我刪除存儲庫部分時,它只會在本地查找依賴關係。這是爲什麼?聲明Artifactory存儲庫的正確方法是什麼?

2)請問Gradle是否知道底層的libs-snapshot佈局?如果沒有,Artifactory插件是否提供了一種自定義工件搜索模式的方法(直接Maven,而不是常春藤)?因爲我只使用Artifactory的免費版本,因此我將無法編輯存儲庫佈局。

3)爲什麼Artifactory會生成一個Gradle編譯行,它似乎不匹配工件容器存儲庫使用的佈局?

在此先感謝!

+0

我遇到同樣的問題。你能弄清楚這一點嗎? – amadib

回答

3

這是一個溫和的回答我知道,但我們使用gradle這個在Artifactory的解決文物和所有我們指定如下:

repositories { 
    mavenLocal() 
    maven { 
     url "http://repo1:8081/artifactory/repo" 
    } 
} 

這是一個非常根本不同的配置結構,考慮到它具有基本相同的詳細信息。可能值得一試。

+0

所以你只是不使用artifactory插件和artifactory節{}? – user1860579

+0

我在我們的gradle文件的任何地方都找不到任何提及。甚至grep可以找到的'artifactory'的唯一實例是在url中。正如我所說,我對解釋沒有深入的回答,但我可以說我們的東西正在發揮作用。顯然有很多變數,但我甚至都沒有意識到有一個artifactory插件! –

+0

我應該補充一點,我們使用的是付費Artifactory,並且發佈工程團隊爲我們設置了它。他們很可能做了一些配置,以便爲我們簡單地工作。 –

2

你有一些混亂與Artifactory的URL聲明:)

首先,當您使用Artifactory的插件,你可以跳過repositories{}聲明(你已經在artifactory{}塊聲明它) 該塊中的contextUrl應該指向Artifactory根,在你的情況下http://192.168.2.130:8081/artifactory(沒有simple)。 這在Artifactory documentation中有很好的記錄。

如果你喜歡使用repositories{}聲明,您必須聲明一個真正的倉庫在那裏,沒有根,你的情況http://192.168.2.130:8081/artifactory/libs-snapshot 這在Gralde documentation有據可查。

我強烈建議你使用Artifactory插件方法。使用DSL可讓您更輕鬆地進行配置和更強大的集成。

+0

這是我第一次嘗試。但是,當刪除存儲庫聲明並僅使用artifactory {}聲明時,似乎Gradle只嘗試在本地解決依賴關係。事實上,當我使用--debug選項運行它時,它甚至沒有提到我給出的contextUrl。也許這是我的Gradle配置的問題... – user1860579

+0

有沒有人有任何進一步的這一個?我遇到了同樣的問題。 – IanWatson

+0

你遇到什麼問題?你使用Artifactory插件嗎? – JBaruch