查找还有哪些项目使用该项目作为maven依赖?

Find what other projects use this project as a maven dependency?

我们使用 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>

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

以您的情况为例 运行 类似于:

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

将 return 所有具有 Artifact1 作为依赖项的构建(您还可以添加 "$and" 子句以将其限制为 Arifact1 的特定版本),最后的 include 将 return 所有作为依赖项的模块的一部分的工件 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"
        } ]
    } ]
 } ]