如何在创建jar文件时包含库文件而不单独复制库

时间:2014-10-28 04:54:05

标签: java jar

我需要在项目jar中包含一些第三方jar文件。我在build.xml中提到它并将其包含在MANIFEST.MF中。现在我将thirdparty1.jar的thirdparty2.jar文件放入项目jar中。但我仍然无法使用罐子。是否需要任何添加配置

这是我的build.xml

<manifest>          
    <attribute name="Class-Path" value="thirdparty1.jar thirdparty2.jar thirdparty3.jar"/>

如果我分别复制两个罐子,它效果很好。但我不明白复制这些单独的需要是什么。如何解决单独复制jar。

2 个答案:

答案 0 :(得分:1)

如果依赖jar打包在项目jar中,则需要一个解决方案从那里加载它。 Java中的标准类路径处理不会访问位于其他jar文件中的jar文件。

请参阅此答案:Classpath including JAR within a JAR。特别是One Jar解决方案:http://one-jar.sourceforge.net/

答案 1 :(得分:0)

也可以使用zipgroupfileset for.gignn是示例的ant任务。

<!-- Build JAR file  -->
<target name="jar" depends="init-build-dir,compile-main">
<!--creating a temp jar contains all jar -->
    <jar jarfile="${project.build.lib.dir}/external-libs.jar">
        <zipgroupfileset dir="${project.lib.redist.dir}">
            <include name="**/*.jar" />
        </zipgroupfileset>
    </jar>
    <sleep seconds="1" />
    <!-- creating main jar with temp jar-->
    <jar jarfile="${project.build.lib.dir}/${ant.project.name}.jar" manifest="MANIFEST.MF">
        <fileset dir="${project.build.main.classes.dir}" includes="**/*.*" />
        <zipfileset src="${project.build.lib.dir}/external-libs.jar">
            <exclude name="*" />
        </zipfileset>
    </jar>
   <!--removing temp jar -->
    <delete>
        <fileset dir="${project.build.lib.dir}">
            <include name="external-libs.jar" />
        </fileset>
    </delete>
</target>