mvn依赖:go-offline不会下载maven-surefire-plugin的要求

时间:2019-11-21 10:36:39

标签: maven maven-surefire-plugin maven-dependency-plugin

我正在尝试在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>

并且如上所述,该插件本身在离线后确实存在于我的存储库中。

2 个答案:

答案 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