检查私有存储库中是否存在工件或依赖项
Check if artifact or dependency exist in a private repository
这是我的生成 JAR 工件 的 POM 文件,它存储在私有存储库 中,带有 Nexus存储库
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.home.mac</groupId>
<artifactId>hyper-dev</artifactId>
<version>0.0.1</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.home.mac</groupId>
<artifactId>hyper-test-linux</artifactId>
<version>0.3.5</version>
</dependency>
</dependencies>
</project>
我想检查两件事:
- 如果我要安装的 artifact hyper-dev-0.0.1 存在于我的私有 maven 存储库中。
- 如果 artifactID 的依赖项:hyper-test-linux-0.3.5 存在于我的私有 Maven 存储库中。
可以吗?
您可以使用 Nexus' Rest Api 检查工件是否存在。
例如,url
http://<your private nexus server>:8081/service/rest/beta/search/assets?group=org.home.mac&name=hyper-dev&version=0.0.1&maven.extension=jar&maven.classifier
将显示版本 0.0.1
中的工件 hyper-dev
是否在您的私人 Nexus 中可用。
如果你想自动化这个过程,你可以使用像 wget
或 curl
这样的命令行工具来访问 Rest Api,如上面链接的文档所示。
备注:我想重复khmarbaise的评论,通常不可能上传已发布工件到 Nexus 如果它已经存在于存储库中。如果你想再次上传它,你必须增加版本并通过这样做创建一个新的工件。更新现有工件将是一个不需要的功能,因为 Maven 假设下载的工件永远不会更改并将它们缓存在每台机器上。
Snapshot artifacts 其实可以更新,但是你问的是 released artifacts。
对于 Nexus2(以 org.jboss.security:jboss-negotiation-toolkit:3.0.2.Final 为例)
curl -I -s -u admin:admin123 http://mynexusserver/service/local/repositories/mymavenrepo/content/org/jboss/security/jboss-negotiation-toolkit/3.0.2.Final/jboss-negotiation-toolkit-3.0.2.Final.war | grep HTTP
这将打印 "HTTP/1.1 200 OK" 如果找到,"HTTP/1.1 404 Not Found" 如果找不到
这是我的生成 JAR 工件 的 POM 文件,它存储在私有存储库 中,带有 Nexus存储库
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.home.mac</groupId>
<artifactId>hyper-dev</artifactId>
<version>0.0.1</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.home.mac</groupId>
<artifactId>hyper-test-linux</artifactId>
<version>0.3.5</version>
</dependency>
</dependencies>
</project>
我想检查两件事:
- 如果我要安装的 artifact hyper-dev-0.0.1 存在于我的私有 maven 存储库中。
- 如果 artifactID 的依赖项:hyper-test-linux-0.3.5 存在于我的私有 Maven 存储库中。
可以吗?
您可以使用 Nexus' Rest Api 检查工件是否存在。
例如,url
http://<your private nexus server>:8081/service/rest/beta/search/assets?group=org.home.mac&name=hyper-dev&version=0.0.1&maven.extension=jar&maven.classifier
将显示版本 0.0.1
中的工件 hyper-dev
是否在您的私人 Nexus 中可用。
如果你想自动化这个过程,你可以使用像 wget
或 curl
这样的命令行工具来访问 Rest Api,如上面链接的文档所示。
备注:我想重复khmarbaise的评论,通常不可能上传已发布工件到 Nexus 如果它已经存在于存储库中。如果你想再次上传它,你必须增加版本并通过这样做创建一个新的工件。更新现有工件将是一个不需要的功能,因为 Maven 假设下载的工件永远不会更改并将它们缓存在每台机器上。
Snapshot artifacts 其实可以更新,但是你问的是 released artifacts。
对于 Nexus2(以 org.jboss.security:jboss-negotiation-toolkit:3.0.2.Final 为例)
curl -I -s -u admin:admin123 http://mynexusserver/service/local/repositories/mymavenrepo/content/org/jboss/security/jboss-negotiation-toolkit/3.0.2.Final/jboss-negotiation-toolkit-3.0.2.Final.war | grep HTTP
这将打印 "HTTP/1.1 200 OK" 如果找到,"HTTP/1.1 404 Not Found" 如果找不到