我有一个用 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
我可以对 list 文件进行一些更改(例如,向 Rsrc-Class-Path 添加一些内容)来使其正常工作吗? Rsrc-Class-Path 已经包含“./”,但这显然不允许属性加载器看到我的属性文件。
TIA,
格雷格
最佳答案
我还建议解决嵌套 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>
关于java - 尝试从另一个 jar 文件中的 jar 文件获取属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963410/