如何无需Web UI向Apache ACE服务器上传Artifacts?企业级Java系统场景
当然有现成的方案!正好能解决你手动上传效率低的痛点,Apache ACE本身提供了好几种绕开Web UI来管理artifacts的方式,分Eclipse本地上传和Jenkins自动化发布两种场景给你细说:
一、Eclipse中直接上传Bundle到ACE
1. 利用ACE的REST API快速上传
ACE默认开启了REST接口,你可以直接通过HTTP请求上传bundle,不用碰Web UI。具体操作可以这样做:
- 在Eclipse里给你的项目配置一个外部工具配置(Run > External Tools > External Tools Configurations),选择“Program”类型,用curl或者Java程序发送POST请求:
比如用curl的命令示例:
要是ACE服务器开启了认证,记得加上curl -X POST -F "artifact=@${project_loc}/target/your-bundle.jar" http://your-ace-server:8080/ace/rest/artifacts-u username:password参数。 - 也可以写个简单的Java工具类,用HttpClient调用ACE的REST接口,写完后右键运行就能直接上传当前项目的bundle,比手动生成jar再上传方便多了。
2. 安装ACE官方Eclipse插件
ACE有官方的Eclipse工具插件,安装后可以直接在Eclipse里关联你的ACE服务器:
- 安装完成后,右键你的OSGi项目,就能看到类似“Deploy to Apache ACE”的选项,一键完成打包+上传,完全省去手动生成jar和Web UI操作的步骤,非常适合日常开发调试。
二、Jenkins自动发布所有Bundles到ACE
1. 用REST API+Shell脚本批量上传
在Jenkins的构建流水线里添加一个执行Shell(或Windows批处理)的步骤,遍历所有构建好的bundle jar,调用ACE的REST接口批量上传:
示例Shell脚本:
# 遍历target目录下的所有bundle jar for jar in ./target/*.jar; do echo "Uploading $jar to ACE..." curl -X POST -u ace-user:ace-password -F "artifact=@$jar" http://your-ace-server:8080/ace/rest/artifacts done
如果是Maven项目,也可以在pom.xml里配置ACE的Maven插件,直接执行mvn ace:deploy命令就能自动上传当前项目的bundle,Jenkins构建时调用这个命令就行。
2. 用Jenkins插件简化HTTP请求
要是觉得写脚本麻烦,可以用Jenkins的HTTP Request Plugin,在流水线里可视化配置上传请求:
比如在Jenkinsfile里这样写:
pipeline { agent any stages { stage('Build All Bundles') { steps { sh 'mvn clean package -DskipTests' } } stage('Batch Upload to ACE') { steps { script { def jars = findFiles(glob: 'target/*.jar') jars.each { jar -> httpRequest( url: 'http://your-ace-server:8080/ace/rest/artifacts', httpMode: 'POST', authentication: 'ace-server-credentials', // 提前在Jenkins配置好凭证 multipartName: 'artifact', multipartFile: jar.path ) echo "Successfully uploaded ${jar.name}" } } } } } }
几个注意点
- 确保ACE服务器的REST接口处于开启状态(默认是开启的,默认端口8080);
- 你的bundle的MANIFEST.MF里要正确配置
Bundle-Version属性,ACE会根据版本号识别新版本,避免重复上传; - 如果ACE有访问控制,记得在请求里带上正确的认证信息,Jenkins里可以用凭证管理功能统一存储用户名密码,避免硬编码。
内容的提问来源于stack exchange,提问作者郝华雷
相关产品推荐
相关产品推荐

