找到其他项目使用此项目作为maven依赖项?

时间:2016-03-09 09:49:16

标签: java maven artifactory

我们使用Artifactory来存储我们的maven生成的java工件。我们有许多相互依赖的相互关联的项目。是否可以使用maven或Artifactory来选择单个工件并查找具有该依赖项的所有项目?

在下面的示例中,我想找到哪些项目使用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>

1 个答案:

答案 0 :(得分:5)

这几乎是您首先使用Artifactory的主要原因之一。 Artifactory以AQL的形式提供了非常广泛的搜索功能,它完全符合您的要求。

以您的案例为例运行:

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

将返回所有以Artifact1作为依赖项的构建(您还可以添加"$and"子句以将其限制为特定版本的Arifact1),最后的include将包含返回属于Artifact1作为依赖项的模块一部分的所有工件(这样您将在案例中看到Artifact2

以下是在一个名为multi-module-build的简单maven构建上运行此查询时获得的示例输出,该构建具有多个模块,其中一个模块(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"
        } ]
    } ]
 } ]