2010-05-10 60 views
5

我有一个Java项目,期望外部模块注册它。这些模块:在Java项目中引用外部模块的最佳实践

  • 实现主体工程
  • (有任何依赖关系一起)打包成单罐子特定接口
  • 含有一些人类可读元信息(如模块名称) 。

我的主项目需要能够在运行时加载(例如使用自己的类加载器)任何这些外部模块。我的问题是:在主项目中注册这些模块的最佳方式是什么(我宁愿保留这个vanilla Java,而不是为这个孤立的问题使用任何第三方框架/库)?

我目前的解决方案是在主项目中保留一个.properties文件,其中key = name,value = class | delimiter |人类可读名称(或者协调两个.properties文件以避免分隔符分析)。在运行时,主项目将加载到.properties文件中,并使用它找到的任何条目来驱动类加载器。

这让我觉得很尴尬。有没有更好的方法呢?

回答

0

让所有模块通过标准的xml文件表达它们的元数据。称它为“my-module-data.xml”。

在您的主容器启动时它寻找一个classpath *:我模块-data.xml中”(它可以有一个FrontController类),并委托给各个模块FrontController类为所欲为:)

也是谷歌针对Spring-OSGi和他们的DOCO在这儿可以帮忙。

0

扩展在@ZZ编码器...

在JDK 6中提到并在内部使用的服务提供程序模式现在在JDK 6中用ServiceLoader稍微正式化了。该概念由Netbeans Lookup API进一步扩大。

底层基础架构是相同的。也就是说,两个API都以相同的方式使用相同的工件。 NetBeans版本只是一个更灵活和更强大的API(例如,允许替代查找服务以及默认的服务)。

当然,如果没有提到EJB,Spring和OSGi的统治性的,更“重量级”的标准,那将是失败的。