我有两个osgi捆绑。
Consumer.java
myService = new MyImpl((InputStream) Client.class.getClassLoader().getResourceAsStream(DEF_FILE));
DEF_FILE 位于src / main / resources
中包含服务和实现类。
MyImpl.java
public MyImpl(InputStream inputStream)
{
try
{
readFunction(inputStream);
LOG.info(" ReadFunction in " + inputStream);
}
catch (Exception e)
{
LOG.error("Could not define Readfunction in " + inputStream, e);
}
}
主要目的是读取另一个bundle中一个bundle中声明的资源文件。我可以使用maven-resource-plugin
或assembly plugin
,但我也需要在pom中添加依赖包,由于循环依赖性问题,我不喜欢这种包。有没有其他方法可以有效地从一个包到另一个包中读取文件?
注意:我可能有很多用于服务的消费者包。
答案 0 :(得分:3)
对于OSGi应用程序,共享静态资源听起来非常低。根据我的经验,您只想在捆绑包之间共享服务。然后,这些服务可以表示存储在这些静态资源中的域对象。使用扩展程序模式,您可以将捆绑中的资源转换为服务。您可能需要查看extender pattern以查看其工作原理。
在Web环境中,这些资源可以是Web资源,在这种情况下,您可以从特殊的servlet(例如OSGi enRoute web server servlet)提供服务。这使得添加共享功能变得更加容易。
OSGi非常善于创建这些抽象,可以在您的产品发展时节省大量时间。显然,您还可以使用完全有效的用例来使用流。
答案 1 :(得分:2)
Bundle
界面有getResource
和getResources
方法。有关详细信息,请参阅链接的JavaDoc。