我正在尝试在docker中构建一个开源项目,并希望节省构建时间,因此我尝试使用mvn dependency:go-offline
,它确实下载了maven-surefire-plugin
此后运行mvn -o clean package
会导致
[错误]无法在项目oxalis-api上执行目标org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M4:test(默认测试):目标org的执行默认测试。 apache.maven.plugins:maven-surefire-plugin:3.0.0-M4:test失败:插件org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M4或其依赖项之一无法解析:无法在脱机模式下访问apache.snapshots(http://repository.apache.org/snapshots/),并且以前从未从其下载工件org.codehaus.plexus:plexus-utils:jar:1.1。 -> [帮助1]
(我启用了快照存储库,因为maven-dependency-plugin在多模块项目中存在严重问题)
POM包括
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M4</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
</plugins>
</pluginManagement>
并且如上所述,该插件本身在离线后确实存在于我的存储库中。
答案 0 :(得分:0)
我也面临着同样的问题,将版本从3.0.0-M4更改为2.12,并且对我有用。我仍在尝试弄清楚为什么它不能与3.0.0-M4一起使用。
答案 1 :(得分:0)
您的 Maven 本地存储库似乎使用旧结构,详细信息 here。因此目标 dependency:go-offline
在旧模式下准备存储库,然后构建 package
的实际目标无法找到依赖项,因为它使用默认模式。
因此,对于您的特定场景,您可以使用以下命令以批处理方式下载依赖项和插件:
mvn dependency:resolve-plugins dependency:go-offline -B
您可以将以下内容用于构建,以及离线、批处理和旧本地存储库选项:
mvn package -o -llr -B
提示:如果您的构建中需要额外的插件或依赖项,这些插件或依赖项未在主 pom 中明确定义,例如您在构建过程中添加的插件或依赖项(即,clover、allure、pact 等),您可以使用以下命令进行预下载命令:
mvn dependency:get -Dartifact=org.openclover:clover-maven-plugin:4.4.1 -B
提示 2:如果您在离线时遇到问题并且未获取依赖项,可能是因为您在下载依赖项和构建项目时使用了不同的 Maven 设置。可以考虑删除本地仓库里面的maven-metadata*.xml
和_*.repositories
,可以这样使用:
find ~/.m2/repository -name 'maven-metadata*.xml' | xargs -n1 rm
find ~/.m2/repository -name '_*.repositories' | xargs -n1 rm