You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Ansible中maven_artifact的ZIP下载任务失败问题

解决方案:Ansible maven_artifact 下载带Classifier的Maven工件失败

问题根源

你遇到的404错误是因为Maven assembly插件生成的工件包含classifier(script),而Ansible的maven_artifact模块默认未指定classifier,导致请求的URL缺少-script后缀,无法匹配Nexus中的实际工件。

Maven侧的关键配置:

  • appendAssemblyId设为true,且execution的id为script,因此最终工件名称会追加-script作为classifier。

方案1:修改Ansible任务(推荐,无需改动Maven构建)

maven_artifact模块支持classifier参数,只需在任务中添加该参数指定script,即可生成正确的URL:

- maven_artifact:
    group_id: "{{maven_grpid}}"
    artifact_id: artifact_id
    extension: zip
    version: "{{ zip_version }}"
    classifier: "script"  # 新增:指定classifier为script
    repository_url: "{{ nexus_repo }}"
    username: "{{ nexus_user }}"
    password: "{{ nexus_password }}"
    dest: '{{ install_path }}/script/artifact_id-{{ zip_version }}-script.tmp'
    verify_checksum: change
    mode: '0770'
    validate_certs: false
  become: yes

添加后,模块会生成正确的URL:
https://nexus_url/repository/maven-releases/com/company/artifact_id/2.0.0/artifact_id-2.0.0-script.zip


方案2:修改Maven构建配置(调整工件名称)

如果希望Nexus中的工件不带classifier,可调整maven-assembly-plugin的配置:

方式A:关闭追加Assembly ID

将appendAssemblyId设为false,这样工件名称将直接使用finalName的值,不再追加classifier:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.1</version>
    <executions>
        <execution>
            <id>script</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <finalName>artifact_id-${project.version}</finalName> <!-- 调整为符合artifact_id的命名 -->
                <appendAssemblyId>false</appendAssemblyId> <!-- 修改为false -->
                <descriptors>
                    <descriptor>src/main/assembly/script.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
    </executions>
</plugin>

方式B:自定义Assembly ID为空白

如果需要保留appendAssemblyId,可将assembly descriptor中的id设为空白,这样追加的后缀为空:

在script.xml中添加id元素:

<assembly>
    <id></id> <!-- 添加空白id -->
    <formats>
        <format>zip</format>
    </formats>
    <!-- 其他fileSet配置... -->
</assembly>

修改后,Maven将生成不带-script后缀的工件artifact_id-2.0.0.zip,与Ansible原任务的URL匹配。


内容的提问来源于stack exchange,提问作者Nicolas C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:07:13