如何修复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
相关产品推荐
相关产品推荐

