2016-09-27 90 views
0

对于正在进行的项目,我们正在寻找动态下载和将jar文件加载到正在运行的应用程序的可能性。除了下载文件(这可能相当简单)之外,我不知道任何可以自动将jar添加到类路径中的解决方案,并且可以发现注释(如CDI bean)。向Java应用程序动态添加豆子和罐子

给定这样一个系统,如果@Inject注释不会抛出一个类的实现的运行时失败不存在(因为该模块jar没有被加载)将是相当方便的。

目前是否有这样的系统?春天还是OSGi适合这种需求? 任何想法多么接近项目Jigsaw会尝试在应用程序级别实现这一点?

+0

你检查了http://stackoverflow.com/questions/60764/how-should-i-load-jars-dynamically-at-runtime/60775#60775 –

+0

看起来像一个反思工作。 – uoyilmaz

+2

看看OSGI机制 http://stackoverflow.com/questions/15426158/loading-of-osgi-bundle-dynamically-from-a-file-system – Phox

回答

1
  1. 我建议你不要走这条道路
  2. 应该是可能的动态加载jar文件而不使用OGSI。关键字是类加载器,特别是在使用正确的层次结构时。下面的答案应该给你一个想法:How should I load Jars dynamically at runtime?但请记住,这可能会导致严重的安全问题
  3. 你沿着2的路径,即使我建议你不要这样做。但是现在你最终的结果是你所使用的框架的上下文不知道这个类。大多数IOC框架都会遇到这个问题。因为他们在启动时建立了环境。有用于开发目的的库(弹簧加载,弹簧开发工具,JRebel)。如果你的IOC框架支持它,
  4. 关于处理不可用的罐子。对此进行研究的最佳观点是Spring Boot及其自动配置机制。它检查某些类/罐(不确定是否诚实)可用,并为这些情况添加其他行为。但这仍然是应用程序启动解决方案,而不是运行时IOC解决方案。