-
能否将通用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
2个答案 按时间排序 按投票排序
-
对于依赖的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
相关推荐
JDK 所需jar包
1.jdbc.jar放置到jdk8或jre8的lib\ext文件夹中,如果不起作用请尝试jre的lib文件夹; 2.将jdbcodbc.dll放置到jre8的bin文件夹中; 3.重新启动JVM.
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/"指的是Java Development Kit (JDK) 1.8版本中的Java运行时环境(JRE)的安全目录。这个目录存放着Java安全策略的相关文件,它们对于控制Java应用程序的权限和访问限制至关重要。...
java_home.jre.lib.fonts.fallback.tar.bz2.2
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
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....
cp RXTXcomm.jar $JAVA_HOME/jre/lib/ext windows下安装路径为: Copy RXTXcomm.jar ---> <JAVA_HOME>\jre\lib\ext Copy rxtxSerial.dll ---> <JAVA_HOME>\jre\bin Copy rxtxParallel.dll ---> <JAVA_HOME>\...
将`jndi.jar`复制到`%JAVA_HOME%\jre\lib\ext`目录下,意味着将其设置为全局扩展,这样所有使用该JRE的Java应用都可以默认访问JNDI功能。 在实际应用中,JNDI常用于以下场景: - 数据源管理:通过JNDI查找数据库...
将bin目录下的.dll文件(一个)复制到JDK目录/jre/bin目录下,再将lib/ext/目录下的所有jar包复制到DK目录/jre/lib/ext目录下。注:每台电脑JDK目录可能不同,可参考环境变量%JAVA_HOME%的实际位置。
Java 的串口通讯类包,将下载的文件解压缩后,在\javacomm20-win32\commapi目录下有必需的三个文件comm.jar,javax.comm. properties和win32comm.dll。将文件comm.jar拷贝到%JAVA_HOME%\jre\lib\ext;文件javax.comm....
-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 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...
$JAVA_HOME/jre/lib/ext 放在指定的目录下之后,接下来就需要对一个文件进行编辑 这个文件的位置在 $JAVA_HOME/jre/lib/security/ 对这个路径下的java.security文件进行修改 找到security.provider.9,然后在...
1) 把下载的 jar 文件放入 java/jre8/lib/ext 2) 从安装的java1.7: java/jre7/bin目录下拷贝 jdbcOdbc.dll 放到 java/jre8/bin 文件夹 注意: 32位和64位要区分开
然后下载完毕之后就需要将这两个jar包放到 $JAVA_HOME/jre/lib/ext 放在指定的目录下之后,接下来就需要对一个文件进行编辑 这个文件的位置在 $JAVA_HOME/jre/lib/security/ 对这个路径下的java.security文件...
Copy RXTXcomm.jar ---> <JAVA_HOME>\jre\lib\ext Copy rxtxSerial.dll ---> <JAVA_HOME>\jre\bin Copy rxtxParallel.dll ---> <JAVA_HOME>\jre\bin Linux Choose your binary build - x86_64 or i386 (based on ...
解决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
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 上安装JAVA环境老是因为缺包而出问题。 比如:java.lang.UnsatisfiedLinkError: no nio in java.library....直接把包覆盖到/java/jre/lib/amd64 下就可以正常运行了。
由于Sun的Java串口通信(javax.comm)不在提供对Windows的支持,导致其版本过于落后,串口读写效率低。但是很多既有的应用调用的却是javax.comm的接口。...Copy rxtxComm.jar to jre/lib/ext/ 不用修改你的任何java代码