2016-03-09 55 views
1

我們使用Artifactory來存儲我們的Maven生成的java文物。我們有許多相互依賴的相互關聯的項目。是否有可能使用maven或Artifactory來選擇一個工件並查找所有那些作爲依賴的項目?查找其他項目是否將該項目用作maven依賴項?

在下面的例子中,我想找到哪些項目使用artifact1 v1.0.0。我希望能夠使用maven/Artifactory來發現artifact2依賴於這個版本的依賴關係,但沒有發現artifact3/4沒有。理想情況下,如果我只是在尋找artifact1的用法,不管版本如何,都會發現artifact2。

<project> 
     <groupId>mygroup</groupId> 
     <artifactId>artifact1</artifactId> 
     <version>1.0.0</version> 
    </project> 


    <project> 
     <groupId>mygroup</groupId> 
     <artifactId>artifact2</artifactId> 
     <version>1.0.0</version> 

     <dependencies> 
      <dependency> 
       <groupId>mygroup</groupId> 
       <artifactId>artifact1</artifactId> 
       <version>1.0.0</version> 
      </dependency> 
     </dependencies> 
    </project> 

    <project> 
     <groupId>mygroup</groupId> 
     <artifactId>artifact3</artifactId> 
     <version>1.0.0</version> 

     <dependencies> 
      <dependency> 
       <groupId>mygroup</groupId> 
       <artifactId>artifact1</artifactId> 
       <version>1.1.0</version> 
      </dependency> 
     </dependencies> 
    </project> 

    <project> 
     <groupId>mygroup</groupId> 
     <artifactId>artifact4</artifactId> 
     <version>1.0.0</version> 

     <dependencies> 
      <dependency> 
       <groupId>mygroup</groupId> 
       <artifactId>otherartifact</artifactId> 
       <version>1.0.0</version> 
      </dependency> 
     </dependencies> 
    </project> 

回答

5

這幾乎是你首次使用Artifactory的主要原因之一。 Artifactory以其AQL的形式提供了非常廣泛的搜索功能,它完全符合您的要求。

至於你的情況下運行這樣一個例子:

builds.find(
     {"module.dependency.item.name":{"$match":"*artifact1*"}} 
    ).include("module.artifact.name") 

將返回所有構建是有Artifact1的依賴(你也可以添加一個"$and"子句此限制的Arifact1特定版本)包括在最後將返回所有作爲Artifact1作爲依賴項的模塊的一部分的工件(所以這就是你將看到的Artifact2

這是我在運行此查詢時得到的一個輸出示例簡單的maven構建cal導致multi-module-build是有幾個模塊,其中一人(multi3)有一個叫做依賴multi1

"results" : [ { 
    "build.created" : "2016-03-10T09:08:51.283+02:00", 
    "build.created_by" : "admin", 
    "build.name" : "multi-module-build", 
    "build.number" : "10", 
    "build.url" : "http://localhost:9090/jenkins/job/multi-shmulti/10/", 
    "modules" : [ { 
    "artifacts" : [ { 
      "artifact.name" : "multi3-3.6-SNAPSHOT.war" 
     }, { 
      "artifact.name" : "multi3-3.6-SNAPSHOT.pom" 
     } ] 
    } ] 
} ] 
+0

感謝您的。它很接近,但不是我想要的。我遇到的一個問題是,我認爲builds.find AQL只是在相對較新版本的Artifactory中(我略微落後)。這是否也依賴於我有構建集成來告訴關於構建的artifactory?難道我不應該僅僅能夠從文物和體育場本身做到這一點,而不僅僅是他們的建造?自4.2版本開始支持 – Kieran

+0

版本的AQL。在任何情況下,Artifactory都依賴於構建發佈的元數據(即使用CI插件),您希望如何實現像這樣的東西,而沒有任何關於工件的數據......? – danf

+0

我會理論上認爲所有你需要的是pom。 pom告訴我什麼取決於什麼,而不是創建jar的構建。 – Kieran

相關問題