0 0

能否将通用jar放入java安装目录的jre/lib/ext下,供osgi框架(Felix等)使用?10

很久以前在开发普通java应用时,我会将一些公用Jar放到java安装目录的jre/lib/ext下作为扩展包随jdk一起启动。从而减少了再多项目开发过程中对公用jar的重复配置,在此我们姑且不谈论其优劣。
目前在做osgi着一块的应用,我们用的IDE是eclipse,jdk是1.6.x,osgi开发工具是bndtools,osgi容器是最新bndtools自带的felix4.0.2。
我们直到bundle需要resolve成功之后才能start,处理相关业务。resolve一个bundle时,需要满足它所有import进来的package,我们找到包含package的jar包打包到bundle中之后,新打包进来的jar又import了其他的package,于是我们又去找包含package的jar……如此,不断递归下去,工作量之繁杂和巨大可想而知。
回到开头我所谈到的,能不能将一些通用的jar包放入java的安装目录下的jre/lib/ext下,供osgi框架(Felix等)使用。
我之所以这样考虑,是经过了一番测试的,我附件中有两个代码一个test.zip是一个普通java工程,在jre/lib/ext中加入log4j.2.15.jar之后就能够实现普通的日志打印功能。(其实这跟自己在build path中加入一个jar包是一样的效果)
Lot.zip本来是想用同样的原理来实现对log4j的调用,但得到的结果是Resolution Failed!,提示没有满足需要的依赖,如下图:


在之前我有做过一个测试,为了满足bundle对普通jar的引用,我将jar打包到bundle根目录,通过配置Bundle-ClassPath里,需要提供包含所需package的jar包有6个,分别是log4j-1.2.15.jar,mail1.4.1.jar,javax.jms.jar,jmxtools.jar,activation-1.1.jar,jmdns-1.0.jar。
为了便于测试我已经将5个jar打包成lib上传,详见附件lib.zip。
通过对比,如果我假设能够成立的话,我想,可以很好的提高在osgi开发中的效率,而不会陷入寻找层层依赖的泥潭。
此问题已经折腾我们有几天了,希望碰到有osgi经验的朋友,不吝赐教。谢谢
2012年5月17日 09:47
  • 大小: 74 KB
  • lib.zip (1005.2 KB)
  • 下载次数: 8

2个答案 按时间排序 按投票排序

0 0

对于依赖的JAR可以有3种处理方法:

1、就是你所说的,把依赖的JAR作为嵌入式资源和Bundle打在同一个JAR包中,同时设置Bundle-Classpath参数。
   这适合于通用性不强的依赖库。

或者:

2、把依赖JAR转变成一个Bundle;也作为一个独立的Bundle加载;

或者:

3、依赖JAR不必转变成Bundle;而是放置到和启动Felix的类路径上;同时设置Felix启动属性:org.osgi.framework.system.packages.extra=
这个参数是OSGi规范中约定的,详见org.osgi.framework.Constants类的FRAMEWORK_SYSTEMPACKAGES_EXTRA常量。
/**
* Framework launching property identifying extra packages which the system
* bundle must export from the current execution environment.
*
* <p>
* This property is useful for configuring extra system packages in addition
* to the system packages calculated by the framework.

第3种方式可以完全替代你要把JAR放置到jre/lib/ext的用法。
jre/lib/ext这个目录我觉得最好不要轻易改动,对外部JRE的耦合太紧密了。
移植性可能会有影响。

2014年7月15日 09:05
0 0

不可以。要把它们做成一个基础bundle,然后其它的bundle动态导入。

2013年5月15日 21:48

相关推荐

    JDK /jre/lib/ext/jfxrt.jar

    JDK 所需jar包

    .jdbc.jar放置到jdk8或jre8的lib\ext文件夹中

    1.jdbc.jar放置到jdk8或jre8的lib\ext文件夹中,如果不起作用请尝试jre的lib文件夹; 2.将jdbcodbc.dll放置到jre8的bin文件夹中; 3.重新启动JVM.

    bcprov-jdk15on-1.54.jar bcprov-ext-jdk15on-1.54.jar下载

    2.将下载的两个JAR文件复制到:JDK安装目录\jre\lib\ext下,例如我的就是D:\Program Files (x86)\java\JDK1.6\jre\lib\ext 3.打开java.security文件:在JDK安装目录\jre\lib\security下的java.security文件。

    jdk1.8/jre/lib/security/

    标题中的"jdk1.8/jre/lib/security/"指的是Java Development Kit (JDK) 1.8版本中的Java运行时环境(JRE)的安全目录。这个目录存放着Java安全策略的相关文件,它们对于控制Java应用程序的权限和访问限制至关重要。...

    java_home.jre.lib.fonts.fallback.tar.bz2.2

    java_home.jre.lib.fonts.fallback.tar.bz2.2

    bcprov的jar包ssl单向认证

    2.将bcprov-jdk16-146.jar放入JAVA_HOME/jre/lib/ext下 3.打开JAVA_HOME/jre/lib/security下的java.security文件,在下面加上 security.provider.x=org.bouncycastle.jce.provider.BouncyCastleProvider

    SAPJCO3连接配置(sapjco3-linux_x64-3.0.10)

    1.将sapjco3.jar 文件复制至 $JAVA_HOME/lib/sapjco3.jar 2.将 libsapjco3.so 文件复制至 $JAVA_HOME/jre/lib/amd64/server/libsapjco3.so 3.设置环境变量 CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools....

    同时支持linux和Windows下java与串口通信的rxtx包,亲测可用

    cp RXTXcomm.jar $JAVA_HOME/jre/lib/ext windows下安装路径为: Copy RXTXcomm.jar ---&gt; &lt;JAVA_HOME&gt;\jre\lib\ext Copy rxtxSerial.dll ---&gt; &lt;JAVA_HOME&gt;\jre\bin Copy rxtxParallel.dll ---&gt; &lt;JAVA_HOME&gt;\...

    jndi所依赖的jar包

    将`jndi.jar`复制到`%JAVA_HOME%\jre\lib\ext`目录下,意味着将其设置为全局扩展,这样所有使用该JRE的Java应用都可以默认访问JNDI功能。 在实际应用中,JNDI常用于以下场景: - 数据源管理:通过JNDI查找数据库...

    Java3D的jar包

    将bin目录下的.dll文件(一个)复制到JDK目录/jre/bin目录下,再将lib/ext/目录下的所有jar包复制到DK目录/jre/lib/ext目录下。注:每台电脑JDK目录可能不同,可参考环境变量%JAVA_HOME%的实际位置。

    Java 串口通讯类包

    Java 的串口通讯类包,将下载的文件解压缩后,在\javacomm20-win32\commapi目录下有必需的三个文件comm.jar,javax.comm. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%\jre\lib\ext;文件javax.comm....

    centos安装jdk1.8时出现没有/lib/ld-linux.so.2:这个文件的原因分析

    -bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...

    bcprov-ext-jdk15on-154.jar和bcprov-jdk15on-154.jar

    $JAVA_HOME/jre/lib/ext 放在指定的目录下之后,接下来就需要对一个文件进行编辑 这个文件的位置在 $JAVA_HOME/jre/lib/security/ 对这个路径下的java.security文件进行修改 找到security.provider.9,然后在...

    jdbc.jar 解决JAVA8 不支持sun.jdbc.odbc.JdbcOdbcDriver问题

    1) 把下载的 jar 文件放入 java/jre8/lib/ext 2) 从安装的java1.7: java/jre7/bin目录下拷贝 jdbcOdbc.dll 放到 java/jre8/bin 文件夹 注意: 32位和64位要区分开

    bcprov-jdk15on-154.jar_bcprov-ext-jdk15on-154.jar

    然后下载完毕之后就需要将这两个jar包放到 $JAVA_HOME/jre/lib/ext 放在指定的目录下之后,接下来就需要对一个文件进行编辑 这个文件的位置在 $JAVA_HOME/jre/lib/security/ 对这个路径下的java.security文件...

    Linux下Java使用RXTX串口读写..包含window和linux文件

    Copy RXTXcomm.jar ---&gt; &lt;JAVA_HOME&gt;\jre\lib\ext Copy rxtxSerial.dll ---&gt; &lt;JAVA_HOME&gt;\jre\bin Copy rxtxParallel.dll ---&gt; &lt;JAVA_HOME&gt;\jre\bin Linux Choose your binary build - x86_64 or i386 (based on ...

    bcprov-ext-jdk15on.jar和bcprov-jdk15on.jar

    解决javax.net.ssl.SSL...jar包放在$JAVA_HOME/jre/lib/ext目录下,然后在$JAVA_HOME/jre/lib/security/目录下的java.security文件里面加一行security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider

    解决 java.lang.RuntimeException: Could not generate DH keypair异常处理所需的bcprov的jar

    bcprov-ext-jdk15on-1.60、bcprov-jdk15on-1.60两个包放到jre下的$JAVA_HOME/jre/lib/ext的路径下,然后配置$JAVA_HOME/jre/lib/security/java.security,找到security.provider.9,然后在这句话下面加上:security....

    Linux Ubuntu14.4 JRE7 amd64 lib so包

    Linux Ubuntu14.4 JRE7 amd64 lib so包 在Linux 上安装JAVA环境老是因为缺包而出问题。 比如:java.lang.UnsatisfiedLinkError: no nio in java.library....直接把包覆盖到/java/jre/lib/amd64 下就可以正常运行了。

    Java串口通信(rxtxComm改装为javax.comm接口)

    由于Sun的Java串口通信(javax.comm)不在提供对Windows的支持,导致其版本过于落后,串口读写效率低。但是很多既有的应用调用的却是javax.comm的接口。...Copy rxtxComm.jar to jre/lib/ext/ 不用修改你的任何java代码

Global site tag (gtag.js) - Google Analytics