Jenkins构建含Selenium/TestNG的Maven项目时Sikuli依赖报错
问题现象
Failed to collect dependencies at com.sikulix:sikulixapi:jar:1.1.0 -> jxgrabkey:jxgrabkey:jar:1.0: Failed to read artifact descriptor for jxgrabkey:jxgrabkey:jar:1.0: Could not transfer artifact jxgrabkey:jxgrabkey:pom:1.0 from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [uni-due.de (http://mvn.is.inf.uni-due.de:8081/nexus/content/repositories/atunes-dependencies/, default, releases)]
问题根源
SikuliX 1.1.0依赖的jxgrabkey:jxgrabkey:1.0仅托管在HTTP协议的uni-due.de仓库,而现代Maven默认会通过maven-default-http-blocker镜像拦截所有HTTP仓库的访问,导致依赖拉取失败。
解决方案
方案1:升级SikuliX版本(推荐)
新版本SikuliX已将jxgrabkey依赖迁移至HTTPS协议的Maven Central仓库,无需访问不安全的HTTP源。修改项目pom.xml中的依赖配置:
<dependency> <groupId>com.sikulix</groupId> <artifactId>sikulixapi</artifactId> <version>1.1.4</version> <!-- 或更高稳定版本 --> </dependency>
修改后重新触发Jenkins构建即可。
方案2:配置Maven允许访问该HTTP仓库(不推荐,存在安全风险)
若必须使用SikuliX 1.1.0,可通过以下步骤解除HTTP仓库拦截:
- 在项目pom.xml中添加仓库声明:
<repositories> <repository> <id>uni-due.de</id> <url>http://mvn.is.inf.uni-due.de:8081/nexus/content/repositories/atunes-dependencies/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
- 修改Jenkins服务器的Maven settings.xml:
找到Jenkins使用的Maven配置文件(通常为~/.m2/settings.xml或Jenkins全局配置指定路径),修改maven-default-http-blocker的拦截规则:
<mirrors> <mirror> <id>maven-default-http-blocker</id> <mirrorOf>external:http:*</mirrorOf> <url>http://0.0.0.0/</url> <blocked>false</blocked> <!-- 取消HTTP仓库拦截 --> </mirror> </mirrors>
或添加专属profile允许该仓库:
<profiles> <profile> <id>allow-uni-due-repo</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>uni-due.de</id> <url>http://mvn.is.inf.uni-due.de:8081/nexus/content/repositories/atunes-dependencies/</url> <releases> <enabled>true</enabled> </releases> </repository> </repositories> </profile> </profiles>
方案3:手动安装jxgrabkey依赖到Maven仓库
手动下载jxgrabkey-1.0.jar,在Jenkins服务器上执行以下命令将依赖安装到本地Maven仓库:
mvn install:install-file -Dfile=jxgrabkey-1.0.jar -DgroupId=jxgrabkey -DartifactId=jxgrabkey -Dversion=1.0 -Dpackaging=jar
若Jenkins使用全局Maven仓库,需确保执行命令的用户拥有仓库写入权限。
内容的提问来源于stack exchange,提问作者VPS

