试图从另一个jar文件中的jar文件中获取属性文件

时间:2011-08-05 22:48:28

标签: java properties executable-jar

我有一个用Eclipse构建的可执行jar文件(A.jar),它依赖于jar文件中包含的其他jar文件(B.jar),并通过jarinjarloader访问。虽然这可以访问这些jar文件中的java代码,但是当代码调用

InputStream inStream = <Class>.getClassLoader().getResourceAsStream(propFile);

无法找到B.jar中包含的属性文件。代码在Eclipse中运行时有效,因此我知道正确的属性文件存在。

我尝试提取A.jar,然后提取B.jar,然后压缩组合文件,但这不起作用。查看Manifest文件,Main-Class是org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

我是否可以对Manifest文件进行一些更改(例如,向Rsrc-Class-Path添加一些内容)以使其生效? Rsrc-Class-Path已经包含“./”,但显然不会让属性加载器看到我的属性文件。

TIA,

格雷格

2 个答案:

答案 0 :(得分:2)

我还建议解决嵌套的jar。我通常只是在build.xml中执行此操作来构建一个jar,并将所有库解压缩到其中:

<target name="fatjar" depends="compile">
    <jar destfile="${isamjar}" filesetmanifest="mergewithoutmain">
            <manifest>
                    <attribute name="Main-Class" value="com.xyz.Main"/>
                    <attribute name="Class-Path" value="."/>
            </manifest>
            <fileset dir="./bin"/>
            <fileset dir="." includes="src/**"/>
            <zipfileset excludes="META-INF/*.SF" src="${l}/derby.jar"/>
            <zipfileset excludes="META-INF/*.SF" src="${l}/jconn3.jar"/>
            <zipfileset excludes="META-INF/*.SF" src="${l}/log4j-1.2.9.jar"/>
            <zipfileset excludes="META-INF/*.SF" src="${l}/${jar4j}"/>
    </jar>

答案 1 :(得分:1)

原来Eclipse有一个我错过的设置。当导出可运行的JAR文件”时,您可以选择“将所需的库提取到生成的JAR ”。虽然这可能会给出一些许可证问题(取决于你合并的JAR),但就我而言,它就像一个魅力,给我一个单独的(更小,因为我在各种jar文件中有很多重复的东西)已经包括了实际工作的罐子。

相关问题