【问题标题】:Difference between plugin and external jar file插件和外部jar文件的区别
【发布时间】:2013-10-24 19:46:32
【问题描述】:

在 java 的上下文中,“插件”和“外部 jar/第三方库/外部依赖项等”在概念上是否有区别?

这个问题的一个必然结果是:当你在 eclipse 中下载并“安装”一个插件时,除了在 .plugin 目录中复制一个 jar 之外,它还会做其他事情吗?

【问题讨论】:

    标签: plugins eclipse-plugin


    【解决方案1】:

    Eclipse 插件必须在MANIFEST.MF 中包含多个条目才能被识别为插件。这些给出了插件的名称和版本,以及所需的其他插件列表和许多其他值。

    插件还可能包含一个plugin.xml,它定义了插件使用的 Eclipse 扩展点,也可以声明新的扩展点。

    Eclipse插件不一定是jar文件,等效的目录结构也可以。

    当 Eclipse 安装插件时,它会从 MANIFEST.MF 和 plugin.xml 获取信息来更新诸如扩展点贡献、每个插件的类路径等的内部表。

    示例 plugin.xml 声明一个新的扩展点并使用现有的:

    <?xml version="1.0" encoding="UTF-8"?>
    <?eclipse version="3.4"?>
    <plugin>
       <extension-point id="editor" name="%extension-point.name" schema="schema/editor.exsd"/>
       <extension
             id="coreFragment"
             point="org.eclipse.e4.workbench.model">
          <fragment
                uri="fragment.e4xmi">
          </fragment>
       </extension>
    </plugin>
    

    示例 MANIFEST.MF

    Manifest-Version: 1.0
    Export-Package: greg.music.core.common,greg.music.core.e4util,greg.mus
     ic.core.editor,greg.music.core.preferences,greg.music.core.progress,g
     reg.music.core.services,greg.music.core.showin,greg.music.core.util,g
     reg.music.core.views,greg.music.core.xml
    Service-Component: OSGI-INF/playerStateService.xml,OSGI-INF/preference
     Settings.xml,OSGI-INF/extensionFactory.xml
    Bundle-ActivationPolicy: lazy
    Bundle-Name: %Bundle-Name
    Bundle-RequiredExecutionEnvironment: JavaSE-1.7
    Require-Bundle: org.eclipse.core.runtime,greg.music.forms;bundle-versi
     on="1.0.0",greg.music.parts;bundle-version="1.0.0",greg.music.annotat
     ions;bundle-version="1.0.0",javazoom.jlgui.basicplayer;bundle-version
     ="1.6.0",org.eclipse.jface;bundle-version="3.8.101",org.eclipse.e4.co
     re.contexts;bundle-version="1.1.0",org.eclipse.e4.core.commands;bundl
     e-version="0.10.1",org.eclipse.e4.core.di;bundle-version="1.1.0",org.
     eclipse.e4.core.services;bundle-version="1.0.0",org.eclipse.e4.ui.mod
     el.workbench;bundle-version="0.10.1",org.eclipse.e4.ui.workbench;bund
     le-version="0.11.0",org.eclipse.e4.ui.services;bundle-version="0.10.3
     ",com.ibm.icu;bundle-version="4.4.2",org.eclipse.emf.common;bundle-ve
     rsion="2.9.0",org.eclipse.emf.ecore;bundle-version="2.9.0",org.eclips
     e.e4.ui.css.swt.theme;bundle-version="0.9.100",org.eclipse.e4.ui.di;b
     undle-version="1.0.0",org.joda.time;bundle-version="2.3.0",com.google
     .guava;bundle-version="14.0.1"
    Bundle-Vendor: %Bundle-Vendor
    Bundle-Version: 1.0.0.201310241930
    Bundle-ManifestVersion: 2
    Bundle-Activator: greg.music.core.Activator
    Import-Package: javax.annotation;version="1.0.0",javax.inject;version=
     "1.0.0"
    Bundle-SymbolicName: greg.music.core;singleton:=true
    

    【讨论】:

    • 所以如果我想写一个eclipse插件,我需要提供manifest.mf吗?或者如果我提供一些特定的参数,是否有生成 manifest.mf 的工具?
    • 在 Eclipse 中有一个 New / Project / Plug-in Project 菜单项,它将生成包括 manifest.mf 在内的基本插件。清单和 plugin.xml 有一个编辑器,可以更轻松地管理内容。
    猜你喜欢
    • 2012-01-13
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2013-09-28
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多