0

我对 Ant Build Tool 有疑问。首先,您可以在下面看到我的项目结构:

项目结构

我的 build.xml 文件的内容是:

<?xml version="1.0" encoding="UTF-8"?>
<project name="addonGenerator" default="main" basedir=".">
<property name="projectName" value="addonGenerator"/>
<property name="src.dir" location="src"/>
<property name="build.dir" location="bin"/>
<property name="dist.dir" location="dist"/>

<target name="compile" description="compile the source ">
        <mkdir dir="${build.dir}"/>
        <javac srcdir="${src.dir}" destdir="${build.dir}">
            <classpath>
                <pathelement path="lib/velocity-1.7.jar"/>
                <pathelement path="lib/log4j-1.2.16.jar"/>
            </classpath>
        </javac>
</target>

<target name="dist" description="package, output to JAR">
    <mkdir dir="${dist.dir}"/>
    <jar jarfile="${dist.dir}/${projectName}.jar" basedir="${build.dir}">
        <zipgroupfileset dir="lib" includes="velocity-1.7.jar" />
        <zipgroupfileset dir="lib" includes="log4j-1.2.16.jar" />
        <manifest>
            <attribute name="${projectName}" value="main"/>
            <attribute name="Main-Class" value="main.java.AddonGenerator"/>
        </manifest>
    </jar>
</target>

<target name="clean" description="clean up">
    <delete dir="${build.dir}"/>
    <delete dir="${dist.dir}"/>
</target>

    <target name="main"  depends="clean, compile, dist"/>
</project>

我不知道如何设置 Ant build.xml 以使用外部库和 java 属性文件 generator.properties 构建和运行我的项目

4

1 回答 1

1

要在 .jar 文件中包含您的 generator.properties 文件,请resources在构建 .jar 时添加您的目录:

<jar jarfile="${dist.dir}/${projectName}.jar" basedir="${build.dir}">
    <fileset dir="src/main/java/resources"/>

由于您当前正在构建一个“胖 jar”(通过直接将库 .jar 的内容包含在应用程序 .jar 中),您可以通过简单地调用 .jar 文件来运行。这样的目标显然需要构建 .jar 文件,因此依赖“dist”目标是有意义的:

<target name="run" depends="dist">
    <java jar="${dist.dir}/${projectName}.jar"/>
</target>

另一方面,我不认为你想src作为你的源目录传递,除非你的类实际上用'package main.java;'声明自己 (他们不应该这样做)。您应该将包的实际根目录传递给 javac 任务:

<property name="src.dir" location="src/main/java"/>

您还应该使“dist”目标依赖于“compile”,因为它依赖于已编译的类可用。

我还建议您的默认目标“main”避免调用“clean”目标。您不应该在每次构建之前进行清理;这破坏了 Ant 最有用的好处之一,即仅更新需要更新的内容的能力。您应该只在需要时使用类似ant clean compile或简单的命令进行清理ant clean

请注意,一旦“dist”依赖于“compile”,并且一旦“main”不再调用“clean”,您可以简单地删除“main”目标并将项目的默认目标更改为“dist”。仔细想想,这是有道理的:默认操作是构建和打包应用程序。

于 2017-07-20T11:37:57.283 回答