2

简短:给定(groupId、artifactId、version、repository URL)我可以以编程方式让 Maven 解析工件 URL 吗?

Long:给定(groupId、artifactId、version、repository URL),可以下载一个 Maven 工件。通常工件的 URL 如下所示:

scheme://{repository}/{groupId}/{artifactId}/{version}/{artifactId}-{version}.jar

对于 (org.apache.maven, maven-core, 3.0.0, http://repo.maven.org/maven2 ),工件 URL 解析为:

http://repo.maven.org/maven2/org/apache/maven/maven-core/3.0.0/maven-core-3.0.0.jar

使用上面推断的模式,我可以使用字符串连接来生成任何给定的工件 URL(groupId、artifactId、版本、存储库 URL)。但是,我不想依赖这种推断的模式,因为它可能会在未来的 Maven 版本中发生变化。

我可以以编程方式让 Maven 为我解析工件 URL(groupId、artifactId、版本、存储库 URL)吗?

4

3 回答 3

2

许多 Maven 存储库都有一个 API,您可以使用它来搜索工件。例如,中央 Maven 存储库有一个,其文档在此处

对于您的示例,中央存储库的 API 提供以下 URL 以直接链接到搜索:

http://search.maven.org/#search|ga|1|g:"org.apache.maven" AND a:"maven-core" AND v:"3.0"

以下 URL 用于返回 XML 数据(或 JSON,通过更改最后一个参数):

http://search.maven.org/solrsearch/select?q=g:"org.apache.maven" AND a:"maven-core" AND v:"3.0"&wt=xml

在这种情况下,您仍然需要手动为 JAR 创建一个 URL(或为它抓取搜索结果),但其他存储库(如Nexus)直接在 API 结果中提供了这个。

于 2013-08-22T19:28:45.107 回答
1

Something like ivy would be more easily embedded in the manner you are suggesting. Ivy can use the same layout as maven, or a custom layout.

于 2013-08-22T19:21:39.097 回答
0

为 maven 提供一个 uri 方案会很好。一个 maven uri 就是 mvn:group:artifact[:packaging]:version 。或者,您可以将其移植到骨灰盒方案中。

于 2021-02-19T02:35:25.997 回答