【问题标题】:Invoke my eclipse plugin by method in a java application在 java 应用程序中通过方法调用我的 eclipse 插件
【发布时间】:2012-01-16 23:15:05
【问题描述】:

我正在开发一个项目,以便在运行时使用D.raw(anyObject); 之类的静态方法以图形方式可视化 Java 对象。 现在我正在尝试将其转换为 eclipse 插件,以便可以在 eclipse 中显示输出。但我不知道如何从插件中提供静态方法以在工作区项目中使用。我认为可以在工作区中提供一些 .jar 库,但我仍然不知道如何管理插件中的步骤...

我在这里找到了类似问题的解决方案:call a own eclipse plugin method from any java application 但是这样一来,我就无法将我的对象作为参数提交......

提前致谢

塞德里克

【问题讨论】:

  • 为什么需要从工作区应用程序调用插件中的方法?
  • 想法是有一个类似于System.out.println() 的可视化,但只是图形化的。我们正在生成 html 渲染,并希望在调用 D.raw() 时在 eclipse 中实时显示它们。

标签: java eclipse plugins methods invoke


【解决方案1】:

您面临的真正问题是插件和您的类将在不同的 JVM 中运行。

一种解决方案是:

  1. 从您要检查的代码中调用您的检查代码(我假设它需要使用运行时反射)(即调用您的 D.raw 函数)
  2. 将检测数据序列化到日志文件中
  3. 让您的插件监控文件并在文件更改时反序列化并刷新可视化效果

这类似于许多 Eclipse 插件适配器的工作方式。

当然,“真正”的做法是不必调用 D.raw,而是使用与 jvisiualvm 等工具相同的 API 通过套接字直接与 JVM 对话。

【讨论】:

  • 您对套接字方法有更多见解吗?会进一步改善答案:)
【解决方案2】:

您可以创建一个包装器插件来导出 jar 中的所有包。 (现有 jar 中的新插件项目)。

要创建一个新插件,请编辑 MANIFEST.MF -> 运行时 -> 导出包。 MANIFEST.MF 应如下所示:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Myplugin
Bundle-SymbolicName: com.mycompany.myplugin
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.mycompany.myplugin.Activator
Bundle-Vendor: MYCOMPANY
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Export-Package: com.mycompany.myplugin.mypackage1,
 com.mycompany.myplugin.mypackage2,
 com.mycompany.myplugin.mypackagexxx

然后要在另一个插件中使用它,您必须将包装器插件添加到您的依赖项中。

【讨论】:

  • 嗯,所以我会包装用户应用程序并在我的插件中访问它,对吧?但我认为我需要的正是我认为的另一个方向,还是我误解了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 2010-09-13
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2014-05-14
相关资源
最近更新 更多