1

我想要一个在运行时注册 JAR 模块的模块化应用程序。为此,我使用了 Netbeans Lookup API。

问题是,我不能直接在库文件夹中复制一些 JAR 文件,因为正在运行的实例无法识别它。在模块中,我配置了META-INF.services接口的包名和模块包名。

这是我的代码示例:

while(true){  
    Lookup lkp;
    Collection<TestInterface> tests = null;
    Template tmpl;
    final Lookup.Result rslt;

    lkp= Lookup.getDefault();
    //lkp=Lookups.forPath("modules-path");
    tmpl= new Template(TestInterface.class);
    rslt= lkp.lookup(testTemplate);
    tests = rslt.allItems();

    Lookup.getDefault().lookup(TestInterface.class);
        rslt.addLookupListener(new LookupListener() {
            @Override
            public void resultChanged(LookupEvent le) {
                reaction(rslt);
            }
        });

        reaction(rslt);
    }
}

private static void reaction(Lookup.Result r) {
    for (Iterator i = r.allInstances().iterator(); i.hasNext();) {
        TestInterface s = (TestInterface) i.next();
        System.out.println(s.somemethod());
    }
}

任何建议/提示如何解决它?

4

1 回答 1

1

您可以将 OSGi 用于您的目的,而不是 Netbeans Lookup。显然,您可以控制需要加载的 jar 文件,因此它应该可以正常工作。

您需要更改 jar 配置才能获得 OSGi 包。为此,您必须更改 MANIFEST.MF 文件,如下所述:

http://www.vogella.de/articles/OSGi/article.html#osgiarch_manifest http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html?page=2

然后,您可以使用您在清单中定义的 BundleActivator 激活 jar 文件,如下所述:

http://www.vogella.de/articles/OSGi/article.html#codebundle

然后,您可以将捆绑包发布为服务并在应用程序中使用它:

http://www.eclipsezone.com/eclipse/forums/t90796.html

于 2012-04-03T10:01:15.637 回答