Java 试图安装保存在其类路径上的包的Jar文件显示;找不到指定的文件";

Java 试图安装保存在其类路径上的包的Jar文件显示;找不到指定的文件";,java,file,jar,osgi,bundle,Java,File,Jar,Osgi,Bundle,在我的代码中,我嵌入了ApacheFelix,并安装了一个包,如下所示: Bundle AB= adereContext.installBundle("file:ADEREBundle_1.0.0.201402211848.jar"); AB.start(); 捆绑包“ADEREBundle_1.0.0.20140211848.jar”保存在项目目录中,因此我认为这应该可以工作 现在,当我在一个普通的java应用程序中运行这段代码时,它没有显示任何错误,并且包已经成功安装 但是,当我将整个项目

在我的代码中,我嵌入了ApacheFelix,并安装了一个包,如下所示:

Bundle AB= adereContext.installBundle("file:ADEREBundle_1.0.0.201402211848.jar");
AB.start();
捆绑包“ADEREBundle_1.0.0.20140211848.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)
org.osgi.framework.BundleException:无法缓存捆绑包:文件:ADEREBundle_1.0.0.20140211848.jar
位于org.apache.felix.framework.felix.installBundle(felix.java:2870)
位于org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:165)
位于org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:138)
位于aderetest.Main.Main(Main.java:40)
原因:java.io.FileNotFoundException:ADEREBundle_1.0.0.20140211848.jar(系统找不到指定的文件)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:120)
位于java.io.FileInputStream。(FileInputStream.java:79)
位于sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
位于sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
位于org.apache.felix.framework.util.SecureAction.getURLConnectionInputStream(SecureAction.java:524)
位于org.apache.felix.framework.cache.JarRevision.initialize(JarRevision.java:165)
位于org.apache.felix.framework.cache.JarRevision.(JarRevision.java:77)
位于org.apache.felix.framework.cache.BundleArchive.createRevisionFromLocation(BundleArchive.java:878)
位于org.apache.felix.framework.cache.BundleArchive.reviseInternal(BundleArchive.java:550)
位于org.apache.felix.framework.cache.BundleArchive。(BundleArchive.java:153)
位于org.apache.felix.framework.cache.BundleCache.create(BundleCache.java:277)
位于org.apache.felix.framework.felix.installBundle(felix.java:2866)
jaring我的项目有什么特别之处,它使我的包文件不可见?捆绑包肯定在jar的根目录中,我可以看到它

我怎样才能解决我的问题?谢谢


注意:将捆绑包放在我的jar文件之外,并使用其完整路径安装它是可行的,但我希望它放在我的jar内。

您可以尝试在
Manifest.mf
文件中声明依赖项:

Class-path: dependency1.jar dependency2.jar

请看这里的更多信息:

好吧,我不认为您可以直接安装它,因为它被包装在一个工件中。既然你需要安装它,为什么不把它分开呢?把它们作为两个罐子放在同一个地方。我想这会有帮助的。默认情况下,
JVM
将在当前目录中查找jar

尝试将ADEREBundle_1.0.0.20140211848.jar放在ClassPath中的项目外部这是可行的,但我希望它放在内部。好吧,我不认为您不能安装它,因为它被包装在一个工件中。既然你需要安装它,为什么不把它分开呢?我的jar将提供给那些与我的jar路径不同的开发人员。因此,将包放在jar文件之外意味着它的路径将依赖于机器路径,这很难看。我想这会有帮助的