在我的代码中,我嵌入了Apache Felix,并按以下方式安装了一个包:
Bundle AB= adereContext.installBundle("file:ADEREBundle_1.0.0.201402211848.jar");
AB.start();
捆绑包“ADEREBundle_1.0.0.201402211848.jar”保存在项目目录中,因此我认为这应该可以。
现在,当我在普通的java应用程序中运行此代码时,它没有显示任何错误,并且已成功安装该软件包。
但是,当我对整个项目(包括上面的代码)进行jar操作,并尝试在另一个java应用程序中使用它时,它会显示:
org.osgi.framework.BundleException: Unable to cache bundle: file:ADEREBundle_1.0.0.201402211848.jar
at org.apache.felix.framework.Felix.installBundle(Felix.java:2870)
at org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:165)
at org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:138)
at aderetest.Main.main(Main.java:40)
Caused by: java.io.FileNotFoundException: ADEREBundle_1.0.0.201402211848.jar (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
at org.apache.felix.framework.util.SecureAction.getURLConnectionInputStream(SecureAction.java:524)
at org.apache.felix.framework.cache.JarRevision.initialize(JarRevision.java:165)
at org.apache.felix.framework.cache.JarRevision.<init>(JarRevision.java:77)
at org.apache.felix.framework.cache.BundleArchive.createRevisionFromLocation(BundleArchive.java:878)
at org.apache.felix.framework.cache.BundleArchive.reviseInternal(BundleArchive.java:550)
at org.apache.felix.framework.cache.BundleArchive.<init>(BundleArchive.java:153)
at org.apache.felix.framework.cache.BundleCache.create(BundleCache.java:277)
at org.apache.felix.framework.Felix.installBundle(Felix.java:2866)
对我的项目进行评级的情况有什么特别之处,哪些文件没有看到?捆绑包肯定在jar的根目录下,我可以看到它。
如何解决我的问题?感谢。
注意:将我的jar文件放在我的jar文件之外,并使用其完整路径安装它,但我希望它在我的jar中。
答案 0 :(得分:1)
AFAIK,我认为你不能直接安装它,因为它被包装在一个工件里面。你为什么不把它分开,因为你还是需要安装它。把它们当作两个罐放在同一个位置。我认为这会有所帮助。默认情况下,JVM
将在当前目录中查找jar
答案 1 :(得分:0)
您可以尝试在Manifest.mf
文件中声明您的依赖项:
Class-path: dependency1.jar dependency2.jar
在此处查看更多内容:http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html