无需Maven,能否用Jenkins与Nexus部署Ant构建的制品?
嘿,这个需求完全合理——既然已经有Ant和Java了,确实没必要引入Maven增加复杂度。我给你梳理一套简洁的Jenkins配置方案,完全贴合你的两个目标:
配置Jenkins任务'A':构建并部署制品到Nexus
咱们一步步来,确保每个环节都极简:
- 第一步:拉取源码(如果需要)
如果你的Ant脚本和代码存放在版本控制系统(Git/SVN)里,先在任务'A'的“源码管理”模块配置拉取逻辑,把代码和Ant文件拉到Jenkins工作目录。 - 第二步:用Ant生成制品
添加一个“构建步骤”,选择“调用Ant”,指定你的主Ant构建文件(比如build.xml),并勾选要执行的目标(比如package——这个目标要包含编译、打包成jar/war等生成制品的逻辑)。
确保Jenkins全局工具配置里已经正确指定了Ant和JDK的路径,避免环境问题。 - 第三步:部署到Nexus
这里有两种无Maven的方案,选你顺手的:- 用Jenkins插件(更省心)
安装Nexus Artifact Uploader插件后,在任务'A'的“构建后步骤”里添加“Nexus Artifact Uploader”:- 配置Nexus服务器的地址、认证账号(要有上传权限)
- 指定要上传的制品路径(比如
**/target/your-artifact.jar) - 填写GAV坐标(GroupId、ArtifactId、Version)和目标仓库(比如
releases或snapshots)
- 用Ant脚本直接调用Nexus API
如果不想加插件,在你的Ant脚本里加一个deploy-to-nexus目标,用HTTP PUT请求上传:
然后在Jenkins的Ant构建步骤里直接调用这个<target name="deploy-to-nexus" depends="package"> <http url="http://your-nexus-domain/repository/your-repo/group-id/artifact-id/1.0.0/your-artifact-1.0.0.jar" method="PUT" src="${build.output.dir}/your-artifact.jar" username="nexus-upload-user" password="nexus-upload-pass"/> </target>deploy-to-nexus目标就行。
- 用Jenkins插件(更省心)
- 第四步:记录制品标识(可选但建议)
可以在任务'A'构建完成后,把制品的版本号或GAV信息写入一个文本文件(比如artifact-info.txt),方便后续任务'B'精准获取。
配置Jenkins任务'B':获取任务'A'生成的同一制品
核心是让任务'B'能定位到任务'A'刚生成的制品,这里有两种实用方式:
- 方式一:直接从任务'A'的构建中复制制品
安装Copy Artifact插件后,在任务'B'的“构建步骤”里添加“Copy artifacts from another project”:- 选择项目:任务'A'
- 指定要复制的制品路径(和任务'A'生成的路径一致,比如
**/your-artifact.jar) - 选择复制来源:可以选“Latest successful build”(最新成功构建),或者让用户手动选择构建版本
- 方式二:从Nexus拉取制品
和任务'A'的部署逻辑对应,用Ant脚本写一个下载目标:
如果版本号是动态的,你可以通过Jenkins构建参数传递(比如把任务'A'的版本号作为参数传入任务'B'),或者用任务'A'生成的<target name="download-from-nexus"> <get src="http://your-nexus-domain/repository/your-repo/group-id/artifact-id/1.0.0/your-artifact-1.0.0.jar" dest="${download.dir}/your-artifact.jar" username="nexus-download-user" password="nexus-download-pass"/> </target>artifact-info.txt文件里的信息来动态拼接下载URL。 - 触发逻辑
如果你想让任务'B'在任务'A'成功后自动运行,在任务'B'的“构建触发器”里勾选“Build after other projects are built”,然后填入任务'A'的名称即可。
几个小提醒
- 确保Jenkins服务器能正常访问Nexus,账号权限足够(上传/下载)
- 尽量把Ant脚本里的路径、版本号参数化,比如用
${artifact.version}这样的变量,方便Jenkins通过构建参数灵活调整 - 测试时先手动触发任务'A',确认制品能正常生成并上传到Nexus,再测试任务'B'的获取逻辑
内容的提问来源于stack exchange,提问作者Ranjeet
相关产品推荐
相关产品推荐

