我正在尝试在我的包中加入第三方jar。我正在学习本教程http://www.aqute.biz/Blog/2007-02-19,但在我的Activator中,我尝试从外部jar中引用一个类时得到ClasNotFoundException。
我的bundle jar目录结构:
-\MyBundle
-\plugin.xml
-\META-INF
-\MANIFEST.MF
-\org
-\mybundle
-\Activator.class
-\3rdParty.jar
MANIFEST.MF看起来像这样:
...
Bundle-ClassPath: .,
3rdParty.jar
...
它是Eclipse 3.5.1 RCP应用程序的一部分。
错误讯息:
java.lang.ClassNotFoundException: 3rd.party.proxy.ConfiguratorProxy
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at my.program.eclipse.core.ProcessEditorUploaderActivator.start(ProcessEditorUploaderActivator.java:111)
但是当我调用this.getClass()。getResource(“/ 3rdParty.jar”)时,它可以工作。
编辑:问题已解决。我不得不从我的RCP应用程序中删除org.eclipse.core.runtime,org.eclipse.equinox.app和org.eclipse.osgi目录。有关bundle classpath的信息已缓存。
答案 0 :(得分:0)
你是从Eclipse运行的吗?如果是这样,您的第三方包也应该列在.classpath文件中。你应该有一行:
<classpathentry exported="true" kind="lib" path="lib/thirdparty.jar"/>
(这应该在使用MANIFEST编辑器时自动发生)
如果您要导出插件并以其他方式运行它,则需要一个build.properties文件,该文件应如下所示:
source.. = src/
output.. = classes/
bin.includes = META-INF/,\
.,\
lib/thirdparty.jar
答案 1 :(得分:0)
要检查的一些事项:
你的3rdParty.jar真的在捆绑罐里吗?用Winzip打开并检查。
你的Manifest.MF是否正确?尝试将Bundle-ClassPath的所有条目放在一行上,没有新行: Bundle-ClassPath:。,3rdParty.jar
您在哪里尝试访问这些课程?内部jar的类将在MyBundle.jar的类中可见,但是除非您在清单中导出包,否则它们将不会从框架中的其他包中看到它们!