Eclipse自动插件依赖的一种配置解决方式
Eclipse的插件具有以下特点:
(1)每一个插件有自己独立的classloader
(2)插件资源的交互通过MENIFEST.MF中"Export-Package, Require-Bundle, Import-Package"等属性控制
(3)插件不能相互依赖
最近开发的系统需要进行权限控制,控制粒度到视图的定义、命令的定义等等。当系统启动的时候,需要根据配置(数据库保存)加载当前用户可用的配置,这样问题就来了:
Eclipse的插件是需要依赖的,才能引用。例如B依赖A,则B可以引用A,但A不依赖B,A不能调用B的资源。这意味着,如果A作为权限检测并加载插件配置的类,是不能引用B的类的。一种解决方案,就是A加入对B的依赖。但是当系统变大,不可能是一个开发组开发时,A怎么会知道到底有些什么插件呢?显然它不可能先知先觉。因此存在问题。
幸好,Eclipse提供了对MENIFEST文件的扩展,扩展了Eclipse-BuddyPolicy指令。
网址:http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Fbundle_manifest.html 给出了此指令的介绍
The Eclipse-BuddyPolicy header is used to specify the buddy classloading policies for a bundle.The Eclipse-BuddyPolicy header must use the following syntax:
Eclipse-BuddyPolicy ::= ( policy-name ) ( ',' policy-name ) *
policy-name ::= ( 'dependent' | 'global' | 'registered' |
'app' | 'ext' | 'boot' | 'parent' )
- registered - indicates that the buddy mechanism will consult bundlesthat have been registered to it. Bundle willing to be registered to a particular bundle add in their manifest: "Eclipse-RegisterBuddy: <bundleSymbolicName>";
- dependent - indicates that the classes/resources will be looked uptransitively in all the dependent of the bundle;
- global - indicates that the classes/resources will be looked up in theglobal pool of exported package;
- app - indicates that the application classloader will be consulted;
- ext - indicates that the extensiont classloader will be consulted;
- boot - indicates that the boot classloader will be consulted.
于是根据上述描述,在A插件MENIFEST文件中插入
Eclipse-BuddyPolicy: global
指令,然后B引用A,A不需要引用B,但是在A中需要调用的B的资源,需要在B中Export出来。这样,就可以在A中使用B的资源了。
通过这种方式,实现了根据用户角色,过滤界面的功能,很好地实现了界面部分权限的控制。
Eclipse自动插件依赖的一种配置解决方式的更多相关文章
- Eclipse启动Tomcat时,45秒超时解决方式
Eclipse启动Tomcat时,45秒超时解决方式 在Eclipse中启动Tomcat服务器时,经常由于系统初始化项目多,导致出现45秒超时的Tomcat服务器启动错误. 一般通过找到XML配置文 ...
- Spring实现Ioc的多种方式--控制反转、依赖注入、xml配置的方式实现IoC、对象作用域
Spring实现Ioc的多种方式 一.IoC基础 1.1.概念: 1.IoC 控制反转(Inversion of Control) IoC是一种设计思想. 2.DI 依赖注入 依赖注入是实现IoC的一 ...
- 在Eclipse的kepler中执行OSGIproject出错的解决方式
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/canlets/article/details/29620301 今天学习OSGI的过程中依照书上所述 ...
- eclipse中js报错简单快捷的解决方式
eclipse中对正确的js文件报错十分常见,我的项目中只要是以.js结尾的必会报错,作为一名小小的程序员,看到“满江红”甚是烦躁!今天就给大家分享一个方便又快捷的解决方案. 瞄准被报错的js文件点鼠 ...
- Eclipse中Ctrl+Shift+f快捷键无效的解决方式
某天突然发现idea非常重要的快捷键ctrl+shift+f无效了,网上搜了很多都说是qq快捷键冲突,但是找了下qq快捷键却没有解决,现在给大家一个解决快捷键冲突的思路: 1.查看QQ快捷键--> ...
- Eclipse安装插件支持jQuery智能提示
Eclipse安装插件支持jQuery智能提示 最近工作中用到jQuery插件,需要安装eclipse插件才能支持jQuery智能提示,在网上搜索了一下,常用的有三个插件支持jQuery的智能提示:1 ...
- 【eclipse】Eclipse安装插件支持jQ…
[eclipse]Eclipse安装插件支持jQuery智能提示 最近工作中用到jQuery插件,需要安装eclipse插件才能支持jQuery智能提示,在网上搜索了一下,常用的有三个插件支持jQue ...
- Eclipse开发环境配置,打磨Eclipse,安装插件(适用3.4,3.5,3.6,3.7)
转载自:http://elf8848.iteye.com/blog/354035 打磨Eclipse -- 磨刀不误砍柴工 -------------------------------------- ...
- Eclipse下新建Maven项目、自动打依赖jar包
当我们无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件至本地仓库.一般地,对于每个人来说,书房只有一个,但外面的书店有很多,类似第,对于Maven来说,每个用户只有一个本地仓库,但可以配置访 ...
随机推荐
- Hadoop配置项整理(mapred-site.xml)【转】
本文转自:http://slaytanic.blog.51cto.com/2057708/1101360 name value Description hadoop.job.history.locat ...
- 苹果新政,禁止开发者在App中加入检查更新功能
今天妥妥的被拒了,苹果更新了新政策,不能在应用中出现检测更新的功能.AppStore会自动提醒用户更新. 去掉更新按钮,之后再尝试下看能通过不能
- 跳转到QQ聊天界面和QQ群界面
// uin=2977046873为QQ号 NSString *urlString = @"mqq://im/chat?chat_type=wpa&uin=2977046873&am ...
- C++多重继承虚表的内存分布
接前面虚表的内存分布,今天重点看多重继承的虚表内存分布,简单的说,继承几个类便有几个虚表,如下代码 class Drive : public Base1, public Base2, public B ...
- [C#] 用一种更优美的方式来替换掉又多又长的switch-case代码段
switch-case语句是我们编码过程中常用的一种分支语句.然而正所谓成也萧何败萧何,每当我们向一个已经拥有了成百上千行的switch-case代码段中添加新的case分支的时候,我们是否有过为代码 ...
- js 实现分割条
js 实现 切分条效果, 为了熟悉js 写法,纯javascript 脚本编写 简单介绍几个函数: setCapture()函数的作用就是将后续的mouse事件都发送给这个对象, releaseCa ...
- extjs之TypeError: d.read is not a function解决方案
在创建如下代码时报出此错:TypeError: d.read is not a function Ext.define('shebyxgl_sheb_model', { extend: 'Ext.da ...
- IIS 10 安装URLRewrite组件 方式
1.Open Regedit > HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp 2.Edit "MajorVersion" an ...
- Razor 语法
Razor 语法 原文:Razor Syntax Reference作者:Taylor Mullen.Rick Anderson翻译:刘怡(AlexLEWIS)校对:何镇汐 什么是 Razor? ...
- 前端自动化之babel本地化安装
npm添加package.json cd到项目根目录直接调用npm init 会创建package.json文件 本地安装bebel(并非全局安装,这种情况下cmd命令中babel命令不识别): 步骤 ...