怎么添加使用第三方jar包及无法编译的问题解决方法

怎么添加使用第三方jar包及无法编译的问题解决方法,第1张

1、将jar包放入项目里的libs文件夹中。

2、在project选中jar包点击右键"Add as library"。

3、这两步是网上比较容易找到的,但此时项目仍然是无法正常编译的,这时需要在项目的build.gradle文件里的dependencies节加入 dependencies

{

compile files('libs/android-support-v4.jar')

compile files('libs/xxxx.jar')

}

4、此时项目正常编译并运行了,但当你的代码中真正创建了引用jar里的类实例时,有可能系统会抛出异常NoClassDefFoundError,这个时候可以按以下步骤 *** 作:

 进入命令提示符窗口。

问题描述

很多开发人员在eclipse插件开发中,经常会遇到第三方jar包无法访问的问题,或者是明明在开发环境中一切正常,导出插件到了运行环境时却出现"NoClassDefFoundError"异常等诸多问题。

本文结合笔者插件开发遇到的问题,谈谈插件开发过程中应该如何正确配置第三方jar包。

解决过程

在一般插件项目中添加第三方jar包:

1. 创建你的插件项目,并新建一个文件夹放置你需要的第三方jar包,如:<project>/lib。

2. 从文件系统中导入或拷贝jar包至<project>/lib文件夹中,如:<project>/lib/activation.jar。

3. 打开MANIFEST.MF文件,在插件编辑器的"Runtime"Tab页中,把第三方jar包添加到"Classpath"面板中。

haha@sh 2011年04月21日 13:46

4. 如果该插件需要被其他插件依赖,则需要在插件编辑器的"Runtime"Tab页中,在"Exported Packages"面板中添加所有允许访问的包。

通过图形界面编辑器配置后的MANIFEST.MF文件如下:

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: Primeton Studio EosTest Core Plug-in

Bundle-SymbolicName: com.primeton.studio.eostest.core

Bundle-Version: 6.0.0

Bundle-Vendor: %Primeton

Bundle-Localization: plugin

Bundle-ClassPath: lib/activation.jar,

lib/jaxb-api.jar,

lib/jaxb-impl.jar,

lib/jsr173_1.0_api.jar

Export-Package: com.primeton.studio.eostest.core,

com.primeton.studio.eostest.core.model.cut,

...

javax.activation,

javax.xml.bind,

javax.xml.bind.annotation,

javax.xml.bind.annotation.adapters,

javax.xml.bind.attachment,

javax.xml.bind.helpers,

javax.xml.bind.util,

javax.xml.stream,

javax.xml.stream.events,

javax.xml.stream.util

Require-Bundle: com.primeton.studio.runtime,

org.eclipse.core.resources

haha@sh 2011年04月21日 13:47

构建插件项目:

5. 打开build.properties文件,在插件编辑器的"Build"Tab页的"Binary Build"面板中,选中需要构建的内容。

生成的build.properties文件如下:

output.. = bin/

bin.includes = META-INF/,\

plugin.xml,\

lib/jaxb-api.jar,\

lib/jaxb-impl.jar,\

lib/jsr173_1.0_api.jar,\

lib/activation.jar,\

plugin.properties,\

plugin_zh_CN.properties

src.includes = META-INF/,\

src/,\

plugin.properties,\

plugin.xml,\

plugin_zh_CN.properties,\

build.properties

haha@sh 2011年04月21日 13:48

在插件项目B中引用一个插件项目A的类:

6. 首先,需要保证该类所在的包在插件A的MANIFEST.MF文件Export-Package:中,如上步骤4。

7. 其次,打开插件项目B的MANIFEST.MF文件,在插件编辑器的"Dependencies"Tab页中,把插件项目A添加到"Required Plug-ins"面板中。如果仅仅是在插件项目B的"Java Build Path"添加了插件项目A,则运行时肯定会出现运行时"NoClassDefFoundError"问题。

haha@sh 2011年04月21日 13:49

导出插件项目:

8. 选中插件项目,在导出向导里选中"Deployable plug-ins and fragments"选项导出。

9. 导出的插件分为三种形式,文件夹、zip包、jar包。导出的内容包括在上面插件项目构建步骤中,build.properties文件bin.includes中选中的内容。

10. 其中jar包的形式需要在"Options"选项里选中"Package plug-ins as individual JAR archives"选项。

haha@sh 2011年04月21日 13:52

配置Feature项目:

我们在做类似这样的产品时,会创建一个feature项目用来描述所有的插件项目配置信息。如果我们将一个包含第三方类库jar包的插件导出成一个 jar包的形式,运行产品时不会出现任何问题,可一旦需要在该产品上进行二次插件开发时,则会出现无法访问插件jar包里的第三方jar包的问题。

在dev.eclipse.org上也搜索到同样的问题描述,估计是eclipse本身不支持访问jar包内的jar文件造成的:

"Adding lib/my.jar meant the plugin will always be a directory instead of a jar (eclipse doesn't load jars from withing jars). By default, my plugin itself shows up as the "." library, which isn't included in a directory plugin that includes other jars."

因此需要将类似包含第三方jar包的插件 导出成文件夹的形式,具体步骤如下。打开feature.xml文件,在功能编辑器的"Plug-ins"Tab页,选中想要配置的插件,并 在"Plug-in Details"面板中,选中"Unpack the plug-ins archive after the installation",这样在插件安装后会将插件解压成文件夹形式。

对于已经打成jar包的插件,也可以通过手动修改的方式实现。选中一个插件jar文件,解压成同名文件夹,将类包压缩成jar文件,如:swt.jar,并删除原先的类包。

修改META-INF下的MANIFEST.MF文件,如原先内容:

Bundle-ClassPath: lib/ktable_2.1.3.jar,

.

则改成:

Bundle-ClassPath: lib/ktable_2.1.3.jar,

swt.jar

即可。

将第三方jar包单独包装成一个插件项目:

另外对于项目中使用到大量的第三方jar包时,可以采用eclipse官方推荐的方式,把第三方jar单独包装成一个插件项目。

按Ctrl+N,在新建对话框里选择"Plug-in from existing JAR archives",按下一步选择你需要的jar文件。

再下一步指定这个plugin的名称,注意这一步里一般要把最下面的"Unzip the JAR archives into the project"选项清除,否则eclipse会把jar文件全部展开为.class文件树,最后按Finish就可以了。

项目引入第三方jar包,本地直接用maven命令编译,编译到了本地,但是部署服务器时并没有这个jar包。

解决方法-将jar包引入项目:

在 项目根目录新建 lib 文件夹

将第三方jar包,导入lib文件,选中jar包执行 Add as Library

pom文件设置如下,将你的maven地址,指向你项目设置的jar包地址

此时你打包,还是没有对应的第三方jar包

pom文件,添加如下设置

spring-boot-maven-plugin是官方提供的默认打包工具,但是在打包本地jar的时候就不太方便,需要借助maven-compiler-plugin。

source和target中的1.8指的是jdk的版本,这个一定要设置好。

下边的resource标签中的信息是自己在打包的时候要被打包的资源文件,这里我们主要用到的是最下边的这个lib配置,将会被打包进jar中的BOOT-INF/lib/目录下。

上边resources目录下的是为了防止自己的资源文件在打包的时候丢失。

这样打包之后所有需要的信息都会被包含在jar中。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11576395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存