【发布时间】:2014-08-01 06:25:50
【问题描述】:
我有 2 个 Java 应用程序需要能够相互通信 - 如果第二个已安装。两个应用程序/框架都很广泛,核心代码不在我的控制之下,但我可以扩展我需要使用的部分,我只是无法重写已经存在的部分。
我的第一个应用程序是一组基于 Eclipse 的插件。我需要从这里连接到第二个应用程序以从中提取数据。
我的第二个应用程序是基于客户端-服务器的应用程序,如果客户端应用程序安装在同一台机器上,我需要能够创建到服务器的无头连接(代替客户端)。在我的开发环境中有适合执行此操作的 Java API,但它们可能部署在也可能不部署在用户的机器上。
我不能将第二个应用程序的 JAR 打包并与第一个应用程序一起交付,因为这绝对会侵犯版权等。所以我需要能够允许第一个应用程序的用户指定安装目录对于第二个应用程序(如果他们已安装)。
我希望能够做的是让第一个应用程序的用户指定第二个应用程序的安装目录,并从该位置加载我需要的任何类,而无需进行太多微配置。
编辑:到目前为止我所做的是创建了 2 个 OSGI 插件。第一个允许第一个应用程序的用户指定第二个应用程序的工作目录。如果设置了此路径,那么我将尝试使用反射来加载第二个插件,该插件引用了第二个应用程序所需的类。但是试图反映这个类 - 我似乎无法在类路径等中找到它。我尝试的是
Class<?> c = Class.forName("com.package.impl.Activator");
和
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
Class<?> c = classloader.loadClass("com.package.impl.Activator")
我还尝试通过使用查看 Classpath 中的其他类来尝试和帮助
ImmutableSet<ClassPath.ClassInfo> paths = ClassPath.from(Thread.currentThread().getContextClassLoader()).getAllClasses();
但这并没有返回任何预期的插件类,并且只包含框架类,例如
com.sun.crypto.provider.AESCipher
com.sun.crypto.provider.TlsRsaPremasterSecretGenerator
com.sun.crypto.provider.ai
com.sun.java.accessibility.AccessBridge
com.sun.java.accessibility._AccessibleState
com.sun.java.accessibility.util.AWTEventMonitor
com.sun.java.accessibility.util.java.awt.ButtonTranslator
com.sun.java.accessibility.util.java.awt.TextComponentTranslator
etc...
我不确定在设置类路径、使用反射找到我的插件类方面缺少什么。有什么想法吗?
PS 这两个应用程序都在 Windows 桌面上运行。
【问题讨论】:
标签: java eclipse eclipse-plugin osgi classpath