zoukankan      html  css  js  c++  java
  • 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的资源了。

      通过这种方式,实现了根据用户角色,过滤界面的功能,很好地实现了界面部分权限的控制。

  • 相关阅读:
    linux常用命令的英文单词缩写
    Linux常用指令总结
    java exception "file not found or file not exist"
    Linux清空屏幕和清空当前输入的快捷键
    巨蟒python全栈开发-第10天 函数进阶
    为什么不能在函数中给全局变量赋值?
    巨蟒python全栈开发-第9天 初识函数
    巨蟒python全栈开发-第8天 文件操作
    windows10怎样关闭,开机启动项中不需要的应用?
    巨蟒python全栈开发-第7天 基本数据类型补充&深浅拷贝
  • 原文地址:https://www.cnblogs.com/pangblog/p/3262793.html
Copyright © 2011-2022 走看看