查找还有哪些项目使用该项目作为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"
} ]
} ]
} ]
我们使用 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"
} ]
} ]
} ]