Maven插件学习(五)—— 将项目构建生成的 OSGi Bundles(或 Features)发布到一个 P2 仓库
发布OSGi Bundles到一个 P2 仓库
读取项目中properties文件中的属性
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>properties-maven-plugin</artifactId><version>1.0-alpha-2</version><executions><execution><phase>initialize</phase><goals><goal>read-project-properties</goal></goals><configuration><files><file>${basedir}/../config/xxxxxx.properties</file></files></configuration></execution></executions>
</plugin>
下载依赖包到target/source/plugins目录
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>2.9</version><executions><execution><id>copy-can-bundle-for-publishing</id><phase>process-resources</phase><goals><goal>copy</goal></goals><configuration><artifactItems><artifactItem><groupId>myapp.group</groupId><artifactId>myapp.artifact</artifactId><version>myapp.version</version></artifactItem></artifactItems><stripVersion>true</stripVersion><outputDirectory>${project.basedir}/target/source/plugins</outputDirectory></configuration></execution></executions>
</plugin>
重命名依赖包,拷贝依赖到指定目录
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><executions><execution><id>setup</id><phase>process-resources</phase><goals><goal>run</goal></goals><configuration><tasks><move file="target/source/plugins/com.codeminders.hidapi.jar" tofile="target/source/plugins/com.codeminders.hidapi_${com.codeminders.hidapi.version}.jar"/></tasks></configuration></execution><execution><id>install-commons</id><phase>install</phase><goals><goal>run</goal></goals><configuration><tasks><delete dir="../../target-definition/common/"/><mkdir dir="../../target-definition/common/repository"/><copy todir="../../target-definition/common/repository"><fileset dir="${project.build.directory}/repository"/></copy><copy todir="../../target-definition/common/source"><fileset dir="${project.build.directory}/source"/></copy></tasks></configuration></execution></executions>
</plugin>
将项目构建生成的 OSGi Bundles(或 Features)发布到一个 P2 仓库(Eclipse 的插件分发格式),便于后续通过 P2 更新机制部署或安装。 tycho-p2-extras-plugin插件默认读取maven构建文件夹${project.build.directory}/source/plugins下的依赖包
<plugin><groupId>org.eclipse.tycho.extras</groupId><artifactId>tycho-p2-extras-plugin</artifactId><version>0.26.0</version><executions><execution><phase>prepare-package</phase><goals><goal>publish-features-and-bundles</goal></goals></execution></executions><configuration><compress>false</compress></configuration>
</plugin>
执行这个插件后生成的P2仓库如截图所示。
P2仓库介绍
P2(Provisioning Platform)是 Eclipse 基金会 开发的软件部署和更新系统,用于管理 OSGi Bundles(插件)、Features(功能集)和产品(Products)的分发和依赖。P2 仓库是存储这些组件的特殊仓库格式,类似于 Maven 仓库,但专为 Eclipse/OSGi 生态设计。
1. P2 仓库的核心作用
-
依赖管理:解决 OSGi Bundles 之间的依赖关系(如版本冲突、可选依赖)。
-
软件分发:发布 Eclipse 插件、RCP 应用、IDE 功能扩展等。
-
增量更新:支持用户通过 P2 机制自动更新已安装的软件。
-
原子化部署:确保所有依赖项被正确安装或回滚。
2. P2 仓库的目录结构
一个标准的 P2 仓库包含以下文件:
repository/
├── artifacts.jar # 二进制文件索引(压缩格式)
├── content.jar # 元数据索引(压缩格式)
├── plugins/ # 存放所有 OSGi Bundles(.jar 文件)
│ └── *.jar
└── features/ # 存放 Feature 定义(.jar 文件)└── *.jar
如果禁用压缩(compress=false
),则会生成 artifacts.xml
和 content.xml
代替 .jar
文件。
3. P2 仓库的关键文件
(1) artifacts.jar
/ artifacts.xml
-
作用:记录所有二进制文件(Bundles、Features)的存储位置和校验信息。
-
内容示例:
<artifacts><artifact classifier='osgi.bundle' id='org.example.plugin' version='1.0.0'><properties size='2'><property name='download.size' value='12345'/><property name='download.md5' value='xxxxx'/></properties><mappings><rule output='plugins/org.example.plugin_1.0.0.jar'/></mappings></artifact>
</artifacts>
(2) content.jar
/ content.xml
-
作用:描述 Bundles/Features 的元数据(依赖、版本、版权等)。
-
内容示例:
<units><unit id='org.example.plugin' version='1.0.0'><requires><required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='[3.10.0,4.0.0)'/></requires><artifacts><artifact classifier='osgi.bundle' id='org.example.plugin' version='1.0.0'/></artifacts></unit>
</units>
4. P2 仓库的生成方式
(1) 使用 Tycho 插件生成
通过 tycho-p2-extras-plugin
(如你的配置):
<plugin><groupId>org.eclipse.tycho.extras</groupId><artifactId>tycho-p2-extras-plugin</artifactId><version>0.26.0</version><executions><execution><phase>prepare-package</phase><goals><goal>publish-features-and-bundles</goal></goals></execution></executions><configuration><compress>false</compress> <!-- 是否压缩元数据 --></configuration>
</plugin>
(2) 使用 Eclipse PDE 工具
-
在 Eclipse IDE 中右键项目 → Export → Deployable Features → 选择 P2 仓库目录。
(3) 命令行生成
通过 eclipse-ant
工具:
<target name="build-p2-repo"><p2.publish.featuresAndBundlesrepository="file:/path/to/repository"compress="true"source="/path/to/build-result"/>
</target>
5. P2 仓库的使用场景
(1) 分发 Eclipse 插件
-
开发者将插件打包为 P2 仓库,用户通过 Eclipse → Help → Install New Software 输入仓库 URL 安装。
(2) RCP 应用更新
-
应用内集成 P2 客户端,定期检查仓库中的更新版本。
(3) 持续集成(CI)
-
在 CI 流程中自动生成 P2 仓库,供测试或生产环境部署。
相关文章:
Maven插件学习(五)—— 将项目构建生成的 OSGi Bundles(或 Features)发布到一个 P2 仓库
发布OSGi Bundles到一个 P2 仓库 读取项目中properties文件中的属性 <plugin><groupId>org.codehaus.mojo</groupId><artifactId>properties-maven-plugin</artifactId><version>1.0-alpha-2</version><executions><exec…...
欧拉计划 Project Euler61(循环的多边形数)题解
欧拉计划 Project Euler 61 题解 题干思路code 题干 思路 先生成所有四位数的多边形数集合分类保存,然后dfs找即可 code // 2512 1281 8128 2882 8256 5625 // 28684 #include <bits/stdc.h>using namespace std;using ll long long;typedef vector<i…...
C语言与Unix的传奇起源
C语言与Unix的传奇起源 背景:Multics项目的困境 这段历史要从20世纪60年代中叶的美国说起。当时,三大技术巨头——麻省理工学院(MIT)、AT&T贝尔实验室和通用电气(GE)——联手为GE-645大型机开发一个名…...
C#扩展方法与Lambda表达式基本用法
C# 扩展方法与 Lambda 表达式详解 一、扩展方法详解 1. 基本概念 扩展方法允许为现有类型"添加"方法,而无需修改原始类型或创建派生类型。 定义条件: 必须在静态类中定义方法本身必须是静态的第一个参数使用this修饰符指…...
C#规避内存泄漏的编码方法
C#规避内存泄漏的编码方法 内存泄漏是C#开发中常见的问题,尽管.NET有垃圾回收机制(GC),但不当的编码实践仍可能导致内存无法被及时回收。以下是系统性的规避内存泄漏的方法: 一、理解内存泄漏的常见原因 未释放的事件订阅静态…...
ARM 指令集(ubuntu环境学习) 第一章:ARM 指令集概述
1.1 ARM 架构简介 ARM(Advanced RISC Machine)是一种精简指令集计算机(RISC)架构,最初由英国的 ARM Holdings 公司设计。与复杂指令集计算机(CISC)不同,RISC 架构通过使用简单且高效的指令集,使得处理器能够以更高的速度和更低的功耗执行任务。ARM 架构被广泛应用于各…...
OpenCV实战教程:从零开始的计算机视觉之旅
第一部分:基础入门 OpenCV简介 什么是OpenCV及其应用领域开发环境搭建(Windows/MacOS/Linux)安装配置和第一个程序"Hello OpenCV" 图像基础 图像的数字表示方式色彩空间(RGB、HSV、灰度图)图像读取、显示与…...
零基础做自动驾驶集成测试(仿真)
图 1:使用 GPUDrive 进行极快的多代理模拟。上图:GPUDrive 中 Waymo Open Motion Dataset 场景的鸟瞰图,方框表示受控智能体,圆圈表示其目标。底部:相应的代理视图,以一个代理为中心。可以根据用户的目标轻…...
阿里云dns服务器不可用怎么办?dns可以随便改吗?
阿里云DNS服务器不可用怎么办?dns可以随便改吗? 当DNS服务器不可用时,可能导致无法访问网站或网络服务。以下是常见的解决方法: 1. 检查网络连接 确保设备已连接到互联网(如Wi-Fi或有线网络)。 尝试访问其他网站或服务&#x…...
神经网络用于地震数据时空均匀插值的方法与开源资料
神经网络用于地震数据时空均匀插值的方法与开源资料 地震数据的不均匀采样是一个常见问题,神经网络提供了一种有效的解决方案。以下是关于如何使用神经网络进行地震数据时空均匀插值的概述和可用资源。 主要方法 1. 基于深度学习的插值方法 卷积神经网络(CNN)&a…...
线性微分方程与非线性微分方程
方程一 d x d t x \frac{dx}{dt} x dtdxx 这是一个一阶线性常微分方程,可以直接分离变量求解。 将变量分离: d x x d t \frac{dx}{x} dt xdxdt 两边积分: ∫ 1 x d x ∫ 1 d t ⇒ ln ∣ x ∣ t C \int \frac{1}{x} \, dx \…...
Windows查看和修改IP,IP互相ping通
Windows系统 查看IP地址 winr 输入cmd 打开终端使用 ipconfig 或 ipconfig -all 命令查看当前网络 IPV4地址 Windows系统 修改IP地址 自动获取IP(DHCP): 打开 控制面板,点击 网络和Internet。点击 网络和共享中心。选择 更改适配…...
ESP32开发之freeRTOS的信号量
什么是信号量信号量能干啥信号量的函数实例举例总结什么是信号量 简而言之,就是发出通知,接收通知的任务获得通知后去干啥啥。通知有多有少。自定义通知数量的,叫计数型信号量;只有有无(即“0”,“1”)通知的,叫二进制信号量。 信号量能干啥 资源管理:控制多个任务对…...
CRMEB-PRO系统定时任务扩展开发指南
适用场景 当系统内置定时任务类型无法满足业务需求时,开发者可通过本教程快速掌握自定义定时任务的扩展方法。本指南以"定时检测服务"为例,演示完整开发流程。 我想添加一个定时任务 ,而这里没有我需要的,我怎么来添加 比如我想添加一个定时检…...
单片机不同通信方式的适用场景
一、串口通信 UART 通信双方约定好波特率,每次发送一个字节(8位数据) 这种通信方式一共有2根线,且互相独立不受影响。 串口通信的缺点 二、RS232和RS485 优点是能够远距离传输信号 RS232达到30m RS485达到1000m 同时RS485还具有一对多的功能 三、S…...
【神经网络与深度学习】探索全连接网络如何学习数据的复杂模式,提取高层次特征
引言 全连接网络(Fully Connected Network,FCN)是深度学习中的重要架构,广泛用于模式识别、分类和回归任务。其强大的特征提取能力使其能够自动学习输入数据中的复杂模式,并逐步形成高层次特征。这种能力主要依赖于参…...
股指期货贴水对对冲的影响大吗?
如果你持有股票,又担心股市下跌,可能会想到用股指期货来“对冲风险”——比如买入股票的同时,卖出股指期货合约。但如果股指期货处于贴水状态(期货价格低于现货价格),对冲效果会受影响吗? 一、…...
浙江大学 | DeepSeek系列公开课 | 当艺术遇见AI:科艺融合的前沿探索
今天要给大家分享一份由浙江大学出品的DeepSeek系列公开课第三季第一期,公开课的主题是当艺术遇见AI,科艺融合的新探索。本报告系统展示了浙江大学在艺术与人工智能融合领域的研究成果,涵盖古画修复流程、色彩复原技术、诗画融合模型、图像召…...
(Go Gin)Gin学习笔记(三)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
1. 数据解析和绑定 bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将请求体中的参数值绑定到对应的结构体上,以方便后续业务逻辑的处理 1.1 JSON数据解析和绑定 客户端传参,后端接收并解析到结构体 package mainim…...
【JavaEE】网络原理之初识(1.0)
目录 编辑 局域网与广域网 IP地址和端口号 实现简单的服务器客户端交互 简单理解socket TCP和UDP的差别(初识) socket面对udp DatagramSocket API DatagramSocket 构造方法 DatagramSocket 方法: DatagramPacket API Data…...
Go与Cpp的本质区别
这个问题是我们经常听到的问题 常见的观点有 Go 与 C 的差异主要体现在设计哲学、内存管理、并发模型、语法特性及应用场景等方面,以下从多个维度进行详细对比: 一、内存管理机制 C:需手动管理内存(如 new/delete、智能…...
Vulkan 学习(16)---- 使用 VertexBuffer
Vertex Buffer 创建一个 VertexBuffer 存储 Vertex data,代替之前在 Shader 中使用固定顶点值的做法 Vertex Shader 修改 GLSL 的 VertexShader 如下: 注意这里指定了 input Vertex data 的 location 和 格式 #version 450 layout(location 0) in vec2 inPosit…...
论文阅读 2024 arxiv Comprehensive Assessment of Jailbreak Attacks Against LLMs
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Comprehensive Assessment of Jailbreak Attacks Against LLMs https://arxiv.org/pdf/2402.05668 https://www.doubao.com/chat/4015423571416834 速览 这篇论文是关于大…...
SIFT特征点检测
刚看完了SIFT特征点检测的原理,阅读的是两篇csdn博客,一个全面和一个最全面,不得不说,你俩写的都很全面,这么用心奉献知识的博主是全人类的财富。 现在用我这张笨拙的嘴先说一下我理解的流程 首先先将图像扩大一倍&a…...
开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验-pipeline方式(二)
一、前言 阿里云最新推出的 Qwen3-8B 大语言模型,作为国内首个集成“快思考”与“慢思考”能力的混合推理模型,凭借其 80 亿参数规模及 128K 超长上下文支持,正在重塑 AI 应用边界。该模型既可通过轻量化“快思考”实现低算力秒级响应,也能在复杂任务中激活深度推理模式,以…...
Python os.path.join()路径拼接异常
问题 在使用os.path.join()对两个路径进行拼接,如:/University/School/和/Department/Class/进行拼接,最终的结果为/Department/Class/,而/University/School/却不知所踪。 import osos.path.join(“/University/School/”, “/…...
Flink之DataStream
Apache Flink 的 DataStream API 是用于 处理无限(流)或有限(批)数据流的核心编程模型,适用于事件驱动、实时分析、ETL 等场景。相比 Flink Table API,DataStream API 提供了更强的灵活性和底层控制能力。 …...
WHAT - Tailwind CSS + Antd = MetisUI组件库
文章目录 Tailwind 和 Antd 组件库MetisUI 组件库 Tailwind 和 Antd 组件库 在 WHAT - Tailwind 样式方案(不写任何自定义样式) 中我们介绍了 Tailwind,至于 Antd 组件库,我们应该都耳熟能详,官网地址:htt…...
【LLM】MOE混合专家大模型综述(重要模块原理)
note 当前的 MoE 架构就是一个用显存换训练时长/推理延迟的架构MoE 目前的架构基本集中在于将原先 GPT 每层的 FFN 复制多份作为 n 个 expert,并增加一个 router,用来计算每个 token 对应到哪个 FFN(一般采用每个 token 固定指派 n 个 exper…...
量子机器学习中的GPU加速实践:基于CUDA Quantum的混合编程模型探索
引言:量子机器学习的新范式 在量子计算与经典机器学习交叉融合的前沿领域,量子机器学习(Quantum Machine Learning, QML)正经历着革命性突破。然而,随着量子比特规模的增长和算法复杂度的提升,传统计算架构…...
CentOS Linux 环境二进制方式安装 MySQL 5.7.32
文章目录 安装依赖包新建用户解压初始化配置文件启动服务登录MySQL修改密码停止数据库 安装依赖包 yum -y install libaio perl perl-devel libncurses* autoconf numactl新建用户 useradd mysql解压 tar xf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.32-l…...
数学:拉马努金如何想出计算圆周率的公式?
拉马努金(Srinivasa Ramanujan)提出的圆周率(π)计算公式,源于他对数学模式的超凡直觉、对无穷级数和模形式的深刻洞察,以及独特的非传统数学思维方式。尽管他的思考过程带有强烈的个人色彩,甚至…...
Java 未来技术栈:从云原生到 AI 融合的企业级技术演进路线
一、云原生架构:重构 Java 应用的运行范式 1.1 微服务架构的深度进化 Java 在微服务领域的实践正从 Spring Cloud 向服务网格(Service Mesh)演进。以 Istio 为代表的服务网格技术,通过 Sidecar 模式实现服务间通信的透明化管理&…...
mid360驱动安装以及联合相机标定
1 mid360 安装 1.1 安装 一定要使用 SDK2和 ROS2驱动(livox_ros_driver2) 先安装SDK2,再安装livox_ros_driver2 GitHub - Livox-SDK/Livox-SDK2: Drivers for receiving LiDAR data and controlling lidar, support Lidar HAP and Mid-360. GitHub - Livox-SDK/l…...
LeetCode —— 572. 另一棵树的子树
572. 另一棵树的子树 题目:给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所…...
模型部署技巧(一)
模型部署技巧(一) 以下内容是参考CUDA与TensorRT模型部署内容第六章,主要针对图像的前/后处理中的trick。 参考: 1.部署分类器-int8-calibration 2. cudnn安装地址 3. 如何查找Tensor版本,与cuda 和 cudnn匹配 4. ti…...
PostgreSQL中的SSL
PGSQL数据库的默认隔离级别是读提交,并且同时支持可重复读和序列化模式。但是在9.1之前的版本中,序列化模式等价于快照隔离,并非是真正的序列化模式。 这样的话就会存在一个问题,那就是写偏序(Write Skew)…...
使用 Spring Data Redis 实现 Redis 数据存储详解
使用 Spring Data Redis 实现 Redis 数据存储详解 Spring Data Redis 是 Spring 生态中操作 Redis 的核心模块,它封装了 Redis 客户端的底层细节(如 Jedis 或 Lettuce),提供了统一的 API 来操作 Redis 的数据结构。以下是详细实现…...
短视频矩阵系统贴牌开发实战:批量剪辑文件夹功能设计与实现
摘要:在短视频矩阵系统的开发中,批量处理功能是提升运营效率的关键。本文将深入探讨如何实现基于文件夹的短视频批量剪辑功能,涵盖技术选型、核心功能实现及代码示例。 一、需求背景与场景价值 在短视频矩阵运营场景中,运营者常面…...
2025年消防设施操作员考试题库及答案
一、判断题 25.防火门顺序器使用半个月后,需检查所有的螺钉,对固定螺钉进行加固拧紧,后续每月进行一次。() 答案:错误 解析:本题考查的是防火门顺序器的保养。防火门顺序器使用一周后&#x…...
ASP.NET MVC后端控制器用模型 接收前端ajax数据为空
1、前端js代码 如下: const formData {DeptName: D001,Phone: 12345678900 };$.ajax({url: "/Phone/SavePhone1",type: "POST",contentType: "application/json",data: JSON.stringify(formData), //必须要JSON.stringifysuccess:…...
ES基本使用方式
ES基本使用 文章目录 ES基本使用1.es的访问使用URL访问 2.mapping的理解Dynamic Mappingkeyword 与 text的区别基础定义与核心差异主字段,子字段 创建mapping 3.创建索引4.查看索引列表5.删除索引6.添加数据7.查询数据 重置es密码,初始用户elastic el…...
【中间件】bthread效率为什么高?
bthread效率为什么更高? 1 基本概念 bthread是brpc中的用户态线程,也是协程的一种实现。其采用M:N模型,即多个用户线程映射到少量的系统线程上。 2 高效做法 用户态调度:避免内核态和用户态之间的切换开销,上下文切…...
Transformer架构指南:从原理到实战资源全更新
🌟 什么是Transformer? 2017年Google提出的Transformer架构,彻底颠覆了传统RNN/LSTM的序列建模方式,通过自注意力机制实现全局上下文建模,成为GPT、BERT等大模型的底层基石。其核心优势在于并行化计算和长距离依赖捕捉…...
数据库规范
数据库版本相关 版本:mysql8.0 引擎:InnoDB 字符集:utf8mb4_general_ci 表名称 字段名称te 不允许使用大写字母,尽量使用英文或英文缩写,中间用下划线连接 数据表前缀为zzt_ 同一功能模块的表(特别是附表)尽量保持…...
Java 核心--泛型枚举
作者:IvanCodes 发布时间:2025年4月30日🤓 专栏:Java教程 各位 CSDN伙伴们,大家好!👋 写了那么多代码,有没有遇到过这样的“惊喜”:满心欢喜地从 ArrayList 里取出数据…...
使用skywalking进行go的接口监控和报警
安装 helm upgrade --install skywalking ./skywalking-v1 --namespace skywalking --create-namespace 查看安装结果 kubectl get pod -n skywalking NAME READY STATUS RESTARTS AGE elasticsearch-6c4ccbf99f-ng6sk 1/1 …...
基于Docker的Elasticsearch ARM64架构镜像构建实践
一、前言 Elasticsearch(以下简称为ES) 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。Elasticsearch 在 Apache Lucene 的基础上开发而成,由 Elasticsearch N.V.(即现在的 Elastic)于 2010 年首次…...
【Token系列】14|Prompt不是文本,是token结构工程
文章目录 14|Prompt不是文本,是token结构工程一、很多人写的是“自然语言”,模型读的是“token序列”二、Prompt写法会直接影响token结构密度三、token分布影响Attention矩阵的聚焦方式四、token数 ≠ 有效信息量五、Prompt结构设计建议&…...
在宝塔面板中安装OpenJDK-17的三种方法
title: 在宝塔面板中安装OpenJDK-17的三种方法 date: 2025-4-30 categories: 技术教程 tags: [Minecraft, 服务器搭建, 宝塔面板, Java] 如果你的宝塔面板软件商店中缺少 OpenJDK-17(例如搭建 Minecraft 1.17 服务器时),本文提供三种解决方…...