1

我正在使用 ant 构建脚本创建一个 jar 包。问题是 .class 文件未包含在生成的 .jar 文件中。我也试过 {build.dest} 制作罐子,但没有效果。

我需要的所有文件都在 .jar 文件中。

这是我的构建脚本

<?xml version="1.0"?>

<project name="TaskNodeBundle" default="all" basedir=".">
    <!-- Sets variables which can later be used. -->
    <!-- The value of a property is accessed via ${} -->
    <property name="bundlename" value="task-node-bundle" />
    <property name="src.dir" location="../src" />
    <property name="lib.dir" location="../lib" />
    <property name="build.dir" location="/buildoutput" />
    <property name="build.dest" location="../build/dest" />


    <!--
        Create a classpath container which can be later used in the ant task
    -->
    <path id="classpath">
        <fileset dir="${lib.dir}/">
            <include name="*.jar" />
        </fileset>
    </path>

    <target name="clean">
        <delete dir="${build.dir}" />
        <delete dir="${build.dest}" />
    </target>

    <!-- Deletes the existing build directory -->
    <target name="mkdir" depends="clean">
        <mkdir dir="${build.dest}"/>
    </target>


    <!-- Compiles the java code -->
    <target name="compile" depends="mkdir">
        <javac srcdir="${src.dir}" destdir="${build.dest}" classpathref="classpath" />
    </target>

    <target name="package-bundle" depends="compile" description="Generates the bundle" >
        <jar destfile="${build.dest}/${bundlename}.jar" manifest="${src.dir}/META-INF/MANIFEST.MF">
            <fileset dir="${src.dir}">
                <include name="**/**.class" />
                <include name="**/**.properties"/>
                <include name="/META-INF/**.*" />
                <include name="/META-INF/spring/**.*" />
            </fileset>
        </jar>
    </target>

    <target name="all" depends="package-bundle">
    </target>

</project>
4

1 回答 1

3

首先,“尝试 {build.dest} 制作 jar”是什么意思?

无论如何,您需要查看构建的这一部分:

<jar destfile="${build.dest}/${bundlename}.jar" manifest="${src.dir}/META-INF/MANIFEST.MF">
    <fileset dir="${src.dir}">
        <include name="**/**.class" />
        <include name="**/**.properties"/>
        <include name="/META-INF/**.*" />
        <include name="/META-INF/spring/**.*" />
    </fileset>
</jar>
  1. 您编译的类文件位于 中${build.dest},因此您应该使用 ${build.dest} 作为嵌套任务<fileset>的根目录。<jar>但是现在您将指向<fileset>您的源代码文件夹。
  2. 您应该避免将生成的 jar 文件放在类文件所在的同一目录中。例如,您可以将 jar 放在另一个目录 ${dist.dir} 中。

所以试试这个:

你有一个财产:

<property name="dist.dir" value="../build/dist" />

进而,

<jar destfile="${dist.dir}/${bundlename}.jar" manifest="${src.dir}/META-INF/MANIFEST.MF">
    <fileset dir="${build.dest}">
        <include name="**/*.class" />
    </fileset>
    <fileset dir="${src.dir}">
        <include name="**/*.properties"/>
        <include name="/META-INF/**/*.*" />
        <include name="/META-INF/spring/**/*.*" />
    </fileset>
</jar>
于 2012-09-10T08:04:04.460 回答