使用外部库和 Java 属性 文件的 Ant build.xml 配置问题

Problems with Ant build.xml configuration to work with external Libraries and Java property files

我对 Ant 构建工具有疑问。 首先,你可以在下面看到我的项目结构:

我的 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

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

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

由于您目前正在构建一个“fat jar”(通过直接将您的库 .jars 的内容包含在您的应用程序 .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 compileant clean.

这样的命令进行清理

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