项目在重构之后,想由ant切换到maven,在转换的过程中遇到一个问题。因为项目是基于OSGi的架构,而OSGi在运行时是依赖于插件环境的,bundle之间存在package依赖。而maven是基于dependency来进行依赖的,而且,这种依赖是构建依赖,OSGi运行环境是不支持的。

为了较好的处理bundle运行时的package依赖到bundle构建时的dependency依赖,仔细看了看maven的相关插件,没找到支持的,没办法,那就自己写一个。

思路:bundle只需要配置MANIFEST.MF文件,在执行“generate-sources”这个任务时,把pom.xml的dependency修改。将这个bundle导入的package全部以dependency依赖的形式在pom.xml中体现。

第一步:创建maven的插件项目,这是基础,不细说;

第二步:继承AbstractMojo,提供给maven调用的入口;定义插件挂接的任务单元为“generate-sources”,使得这种修改在合适的任务中处理;定义子任务,支持在调用方可以配置参数。形式如下:

/**
* @goal directory    子任务
* @phase process-resources    maven的任务单元
*/
public class AnalysisDependency extends AbstractMojo {   
    /** 子任务接受的参数,默认值为Hello to you!
     * @parameter expression="${directory.bundleDirectorys}" default-value="Hello to you!"
     */
    private String bundleDirectorys;

……
}

第三步:分析bundle的MANIFEST.MF文件,分析其他bundle的该文件,并且将jar的坐标计算出来,获得一个依赖集合,最后,将这个依赖添加到对应的pom.xml中。从而实现package依赖转dependency依赖。

最新文章

  1. [AlwaysOn Availability Groups]排查:AG超过RPO
  2. xhprof学习笔记
  3. 【UFLDL】Exercise: Convolutional Neural Network
  4. Android开发之ProgressDialog在独立Thread线程中更新进度
  5. 三维网格形变算法(Laplacian-Based Deformation)
  6. 泥泞的道路(codevs 1183)
  7. mysql左外连接,右外连接,全连接
  8. jquery 书写全选反选功能
  9. window7环境下VMWare自定义安装Linux虚拟机完全教程
  10. CISCO交换机-SNMP配置
  11. PHP6天基础知识部分
  12. Java高并发秒杀API之web层
  13. RocketMQ在windows环境下的安装
  14. Qt中的主窗口之菜单栏
  15. 如何从Windows中删除Node.js
  16. 开发中解决Access-Control-Allow-Origin跨域问题的Chrome神器插件,安装及使用
  17. Python闭包装饰器笔记
  18. kubernetes实战(十六):k8s高可用集群平滑升级 v1.11.x 到v1.12.x
  19. sql的预编译问题
  20. a+b+c的N次方展开

热门文章

  1. Headmaster's Headache
  2. Libsvm的MATLAB调用和交叉验证
  3. 【开发流程】土耳其CDD工具
  4. 【跟我一起学Python吧】python with statement 进阶理解
  5. CSS计算样式的获取
  6. Java每日一则-002
  7. 时间,闰秒,及NTP
  8. F5 刷新功能
  9. HDU 3416 Marriage Match IV (求最短路的条数,最大流)
  10. hdu 5363 Key Set