有没有人有一个“hello world”示例或教程来创建Eclipse插件片段?
我有一个工作主机插件,为了简单起见,就是这个......
public void start(BundleContext context) throws Exception {
System.out.println("Hello....");
super.start(context);
plugin = this;
}
public void stop(BundleContext context) throws Exception {
System.out.println("Goodbye...");
plugin = null;
super.stop(context);
}
足够简单并且有效。现在我想向该主机添加一个片段,这似乎不像创建一个插件主机那么简单。我只是没有看到如何创建一个片段项目并为其添加逻辑。假设我只是想做一些简单的事情并让片段在start()
打印“Hello2”,在stop()
打印“Goodbye2”。有人可以给我一个有效的例子吗?
答案 0 :(得分:17)
Eclipse - > 文件 - > 新... - > 片段项目 - >设置主机插件(在您的工作区或目标平台的插件中)。
打开插件清单编辑器(您可以点击build.properties
,manifest.mf
或fragment.xml
来执行此操作 - 如果没有这样的文件,手工创建)
在标签 Extentions 中,点击添加.. 并添加org.eclipse.ui.startup
并浏览实现org.eclipse.ui.IStartup
类的类。
创建此类并实现它。您需要实现方法earlyStartup()
,它是片段的入口点。
注意:下面的行只是示例。我没有测试它,所以可能有错误......
您只需要这个(这是项目结构/目录结构):
META-INF / MANIFEST.MF 内容:
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: FragmentProject Bundle-SymbolicName: FragmentProject;singleton:=true Bundle-Version: 1.0.0 Bundle-ClassPath: src/,. Fragment-Host: *HostPluginProjectSymbolicName*;bundle-version="1.0.0" Bundle-RequiredExecutionEnvironment: J2SE-1.5 Require-Bundle:
build.properties 内容:
source.. = src,\ output.. = bin/ bin.includes = META-INF/, ., fragment.xml
fragment.xml 内容:
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.2"?> <fragment> <extension point="org.eclipse.ui.startup"> <startup class="FragmentStartClass"> </startup> </extension> </fragment>
FragmentStartClass.java 内容:
import org.eclipse.ui.IStartup; public class FragmentStartClass implements IStartup { public void earlyStartup() { System.out.println("Hello World From Fragment!"); } }
答案 1 :(得分:3)
那么,首先你想要完成什么?你确定片段是解决方案吗?
片段只是对现有插件的补充。没有Bundle-Activator来“启动”片段。您只需获取片段中的其他资源即可。您可以使用扩展点通知主机某个特定功能是由当前片段扩展的。可以把它想象成在运行时将两者合并。
请参阅this note中的Eclipse Wiki。
答案 2 :(得分:0)
如果主机插件不知道加载片段的额外实现代码,我不确定你是否可以这样做。
例如:
MyInterface o = null;
try {
Class<?> c = getClass().getClassLoader().loadClass("my.fragment.Activator");
o = (MyInterface) c.newInstance();
} catch (ClassNotFoundException e) {
}
if (o != null) {
o.start();
}
其中MyInterface是主机插件中定义的接口,由您的片段实现。
另一种方法可能是让片段提供一个标识扩展类的扩展点,但这可能不仅仅是需要。
答案 3 :(得分:0)
我认为通过使用extension points和单独的插件可以更好地完成您要做的事情,因为您希望向基础插件添加功能。
片段仅用于向基础插件添加资源或额外类。
答案 4 :(得分:0)
为了记录,我刚刚创建了一个包含一些PMD Java规则类的Eclipse Fragment。
在类文件旁边,该Jar中需要只需要一个文件:META-INF/MANIFEST.MF
:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: com.acme.tools.pmd
Bundle-SymbolicName: com.acme.tools.pmd;singleton:=true
Bundle-Version: 1.0.0
Fragment-Host: net.sourceforge.pmd.eclipse.plugin;bundle-version="3.2.6"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
我用当前的Eclipse 3.7尝试过这个。部署是将Jar文件放入<eclipse root>/dropins/plugins
(如果该文件夹尚未存在,则创建该文件夹)。