【问题标题】:Trying to get a properties file from a jar file in another jar file试图从另一个 jar 文件中的 jar 文件中获取属性文件
【发布时间】:2011-08-05 22:48:28
【问题描述】:

我有一个用 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,

格雷格

【问题讨论】:

  • 啊,让 IDE 管理构建的危险。需要使用jarinjarloader吗?
  • 如果您能告诉我另一种构建可执行 jar 的方法,该 jar 包含大约 15 个不同的其他 jar 文件,我很高兴听到。如果没有,是的,我需要使用 jarinjarloader。
  • 必须送一罐吗?如果是这样,C. Ramseyer 的答案是一个很好的答案。也可以在那里查看我的评论。
  • 如果您找到了正确的答案,通常单击该答案旁边的复选标记。几个月前,您问了 4 个问题,但没有选择一个答案。

标签: java properties executable-jar


【解决方案1】:

我还建议解决嵌套罐子问题。我通常只是在我的 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>

【讨论】:

  • 还有One-JAR,这是一个开源项目,“......提供了自定义类加载器,它知道如何从存档中的 jars 加载类和资源,而不是从文件系统中的 jars 加载。 "
【解决方案2】:

原来 Eclipse 有一个我错过的设置。当导出“可运行的 JAR 文件”时,您可以选择“Extract required library into generated JAR”。虽然这可能会产生一些许可证问题(取决于您要合并的 JAR),但在我的情况下,它就像一个魅力,给了我一个(更小,因为在我想要的各种 jar 文件中有很多重复包括)实际工作的罐子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 2017-12-21
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多