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

Java 试图从另一个jar文件中的jar文件获取属性文件,java,properties,executable-jar,Java,Properties,Executable Jar,我有一个用Eclipse构建的可执行jar文件(A.jar),它依赖于jar文件中包含的其他jar文件(B.jar),并通过jarinjarloader进行访问。虽然这可以访问这些jar文件中的java代码,但当该代码调用 InputStream inStream = <Class>.getClassLoader().getResourceAsStream(propFile); InputStream inStream=.getClassLoader().getResourceAs

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

InputStream inStream = <Class>.getClassLoader().getResourceAsStream(propFile);
InputStream inStream=.getClassLoader().getResourceAsStream(propFile);
它找不到B.jar中包含的属性文件。代码在Eclipse中运行时可以工作,因此我知道正确的属性文件在那里

我试着先提取A.jar,然后提取B.jar,然后压缩组合文件,但这不起作用。查看清单文件,主要类是org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

我是否可以对清单文件进行一些更改(例如,向Rsrc类路径添加一些内容)以使其正常工作?Rsrc类路径已经包含“/”,但这显然不允许属性加载程序查看我的属性文件

蒂亚


Greg

我还建议您使用嵌套的罐子。我通常在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>


结果是Eclipse缺少了一个设置。当导出“可运行JAR文件”时,您可以选择“将所需库提取到生成的JAR中”。虽然这可能会带来一些许可问题(取决于您正在合并的jar),但在我的情况下,它就像一个魔咒,给了我一个实际工作的jar(更小,因为我包含的各种jar文件中有很多重复项)。

啊,让IDE管理构建的危险。你需要使用jarinjarloader吗?如果你能告诉我另一种方法来构建一个包含15个不同jar文件的可执行jar,我很高兴听到这个消息。如果没有的话,是的,我需要用罐装机。你必须送一罐吗?如果是这样的话,C.拉姆西耶的答案是好的。也可以在这里看到我的评论。如果您发现答案是正确的,通常会单击该答案旁边的复选标记。几个月前你问了4个问题,但没有选择一个答案。还有一个开源项目“…提供了自定义类加载器,它知道如何从存档中的JAR而不是文件系统中的JAR加载类和资源。”