java - 检测到 Eclipse 插件但未加载
问题描述
我正在编写一个使用compilationParticipant
JDT 扩展点的插件。该插件现在无法正常工作,我试图找出原因。
我有一个CompilationParticipant
:
public class CompParticipant extends CompilationParticipant {
private static CompParticipant instance = null;
private CompParticipant() {
super();
Activator.log("CompilationParticipant initialized");
}
public CompParticipant getSingleton() {
if (instance == null)
instance = new CompParticipant();
return instance;
}
@Override
public void buildStarting(BuildContext[] files, boolean isBatch) {
Activator.log("Build Starting");
}
}
还有一个(不是懒惰的)Activator
:
public class Activator extends Plugin implements BundleActivator {
private static Activator instance;
public static String PLUGINID = "myplugin";
public Activator() {
super();
log("Activator");
}
public static void log(String msg) {
if (instance == null)
instance = new Activator();
instance.getLog().log(new Status(Status.WARNING, PLUGINID, 1, msg, null));
}
@Override
public void start(BundleContext context) throws Exception { log("Start"); }
@Override
public void stop(BundleContext context) throws Exception {}
}
在我的清单中,我指定:
Bundle-Activator: myplugin.Activator
在我的 plugin.xml 中我指定:
<extension point="org.eclipse.jdt.core.compilationParticipant">
<compilationParticipant class="myplugin.CompParticipant" id="myplugin" createsProblems="true">
</compilationParticipant>
</extension>
我将插件导出到存档并将内容放入dropins
文件夹中。当我启动 Eclipse 时,我在Installation Details > Configuration部分看到*** Plug-in Registry
:
myplugin (1.0.0) "My Plugin" [Installed]
但是,不会将日志消息打印到错误日志(或控制台中)。我的日志记录不正确还是为什么我的插件没有运行?
解决方案
重新阅读问题,以下内容对我来说似乎不一致:
- 不应手动实例化激活器,但框架应为您执行此操作。
- 对于框架的实例化,激活器需要一个公共的无参数构造函数。
- 为了支持单例访问,激活器通常
this
从构造函数或start()
方法中保存。
- 为了支持单例访问,激活器通常
- 为了让类加载触发捆绑激活,捆绑应该声明
Bundle-ActivationPolicy: lazy
当所有这些都得到纠正后,构建器应该能够实例化您的 CompilationParticipant(从扩展声明中读取)。然后这个实例应该激活你的包并启动激活器。
推荐阅读
- github - 如何使 Jupyter Notebook 中的彩色文本在 Github 中工作?
- kubernetes - 不使用标签的命名空间子集的 Gatekeeper/OPA 约束
- c# - 没有通知错误,但代码未按指示执行
- javascript - 如何在js中更改图片上传的exif数据
- python - 从集合中随机选择一个/多个函数并应用组合
- r - 提取r中整个数据帧范围内的值
- reactjs - 使用 react-bootstrap 设计一个漂亮的用户帐户仪表板
- javascript - 12 小时 Javascript 时钟显示 24 时间,上午/下午错误
- javascript - 我编写了一个 nodejs 应用程序来操作 Google 表格。如何将其转换为附加组件?
- asp.net-core - blazor webassembly System.Net.Http.HttpRequestException:响应状态码不表示成功:400(错误请求)