尝试安装保存在其类路径上的包的Jar文件显示“无法找到指定的文件”

时间:2014-02-23 10:51:28

标签: java file jar osgi bundle

在我的代码中,我嵌入了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中。

2 个答案:

答案 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