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

Java 如何在创建jar文件时包含库文件,而不单独复制库文件,java,jar,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 thirdp

我需要在我的项目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打包在项目jar中,您需要一个解决方案从那里加载它。Java中的标准类路径处理不会访问位于其他jar文件中的jar文件


请参阅以下答案:。特别是一个Jar解决方案:。

也可以使用zipgroupfileset实现这一点

<!-- 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>