2017-04-04 106 views
0

我有一個關於Gradle構建的問題,我很難解決。問題與gradle構建和pom解析

我不斷收到一個錯誤說更新:

> Could not resolve credit/open/fabric:credit-open-fabric-api:17.4.1.RELEASE. 
    > Could not parse POM http://Mywebsite/content/groups/public/openapi/17.4.1.RELEASE/open-api-17.4.1.RELEASE.pom 
    > Could not resolve open:api:17.4.1.RELEASE. 
     > Could not resolve open:api2:17.4.1.RELEASE. 
      > Could not parse POM http://Mywebsite/content/groups/public/open/api2/17.4.1.RELEASE/api2-17.4.1.RELEASE.pom 
       > Could not resolve open:open-parent:17.4.1.RELEASE. 
       > Could not resolve open:open-parent:17.4.1.RELEASE. 
        > Could not parse POM http://Mywebsite/content/groups/public/open/open-parent/17.4.1.RELEASE/open-parent-17.4.1.RELEASE.pom 
         > Unable to resolve version for dependency 'tibco:${tibrv.native}:jar' 

和堆棧跟蹤顯示有一個問題解析包含更新如下依存性的POM:

<dependency> 
<groupID>tibco</groupID> 
<artifactId>${tibrv.native}</artifactID> 
</dependency> 

<dependency> 
<groupID>tibco</groupID> 
<artifactId>tibask</artifactID> 
</dependency> 
. 
. 
. 
<profile> 
<id>tib-windows</id> 
<activation> 
    <os> 
    <family>windows</family> 
    </os> 
</activation> 
<properties> 
    <tibrv.native>tibask</tibrv.native> 
</properties> 
</profile> 

在我的構建.gradle文件我有:

compile 'tibco:ask:8.3.1' 

其中,nativity是我的POM中的artifactID。

我需要在我的build.gradle文件中爲gradle中的pom解析器添加什麼內容才能獲得${tibrv.native}值的真實值?

+0

請粘貼'pom.xml'的相關部分,它定義了'tibrv.native'財產。希望它不在

+0

這正是它在... – koala421

+0

請參閱[這裏](https://blog.gradle.org/maven-pom-profiles)討論關於gradle中maven配置文件的支持。和[這裏](https://dzone.com/articles/maven-profile-best-practices)爲什麼在依賴管理中使用配置文件被認爲是反模式 –

回答

0

如前所述here<os>輪廓激活不支持

這是可能的,你可以設置tibrv.native系統屬性,我真的不知道,但它是值得一試。

可能的解決方法是將nativity-8.3.1.pom的「固定」版本存儲在另一個在主存儲庫之前排序的存儲庫中。 Maven存儲庫可以來自本地文件夾,我認爲gradle能夠從多個存儲庫中獲取單個依賴項的工件(例如,來自一個倉庫的倉庫和另一個倉庫的倉庫),但不能100%確定。

如:

repositories { 
    maven { 
     url uri('localrepo') // gradle will look here first 
    } 
    maven { 
     url 'http://Mywebsite/content/groups/public' 
    } 
} 

然後,您可以存儲XML POM的固定版本在

$projectDir/localrepo/tibco/nativity/8.3.1/nativity-8.3.1.pom 
+0

有沒有一種方法讓gradle查看存儲庫位置並忽略位於此處的pom文件,並且只使用此內部的jar locaiton? – koala421

+0

我這麼認爲,看到我的其他答案 –

0

另一種可能的解決方案(不知道它會工作)是使用與配置transitive = false 。希望在這種情況下,gradle不會嘗試解決傳遞依賴關係。顯然你需要自己手動添加傳遞依賴。此外,通過這樣做,組/工件/版本元數據將丟失,因此如果消費者引用您的項目,則此依賴關係無法參與依賴關係解析。

configurations { 
    hack { transitive = false} 
} 
dependencies { 
    hack 'tibco:nativity:8.3.1' 
    compile configurations.hack.singleFile 
    compile 'foo:bar:1.0' 
} 
+0

我面臨的問題是正在閱讀的POM文件和gradle沒有找到罐子tibco:$ tibrv.native}:回購倉庫內的jar(它不應該是因爲它不存在)..基本上Gradle沒有正確解析pom – koala421

+0

我希望'transitive = false'意味着pom中的依賴被忽略。猜猜我錯了:( –