我正在尝试为刚刚从Netbeans移动的已建立的Java项目编写我的第一个build.xml文件。
一个。我想要达到的目标非常简单:
使用下面的“dest”目标,将所有源文件(1个包中的4个)复制到我想要创建的src / test。源文件被复制到“src / test”目录,但是“src / test”目录中也创建了“test”目录,为什么我不确定。
使用下面的“jar”目标,创建一个包含包名称目录下所有类文件的jar - 完全没有工作!
使用“compile”目标确保所有代码都已成功编译但我遇到了很多错误。代码在Eclipse中成功完成了CLEAN和BUILD,所以我不确定我在ANT脚本中做错了什么,我注意到的一件事是当它只有“4”时它试图编译“8”文件。不确定其他4个来自哪里虽然它表示重复。关于丢失符号的错误显示似乎是指有关构建路径中包含的必需项目的import语句,因此我不确定如何解决ANT在编译时引发的问题。
B中。这是我第一次尝试创建我的第一个build.xml文件,但我遇到了下面显示的问题:
<project name="ThalesDataGenerator" basedir="." default="clean-build">
<property name="src.dir" value="src"/>
<property name="dest.dir" value="${src.dir}/test"/>
<property name="dist.dir" value="dist"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/${ant.project.name}"/>
<property name="main-class" value="thalesdatagenerator.ThalesDataGenerator"/>
<target name="clean">
<delete dir="${build.dir}"/>
<delete dir="${dest.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>
<target name="dest">
<mkdir dir="${dest.dir}"/>
<copy todir="${dest.dir}">
<fileset dir="${src.dir}" includes="**"/>
</copy>
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/ThalesDataGenerator.jar" basedir="${build.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
<target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
</target>
<target name="clean-build" depends="clean,dest,jar,run"/>
</project>
以下是我遇到的错误:
[javac] 18个错误
建立失败
C:\ ATMSwitch \ ThalesDataGenerator \ build.xml:22:编译失败;有关详细信息,请参阅编译器错误输出。
总时间:874毫秒
非常感谢任何帮助/方向。问候。
答案 0 :(得分:1)
让我们一次拿一个:
一些提示:
${basedir}
。例如,<property name="src.dir" value="${basedir}/src"/>
而不仅仅是value="src"/>
all
的目标来清理,构建和执行。clean
来清理构建,使用all
来运行构建中的所有目标。这些都不应该是默认目标。 现在回到你的问题。您的<javac>
目标如下所示:
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>
你是说你的消息来源没有第三方罐子吗?您需要创建一个包含源所依赖的所有第三方jar的编译类路径。在Eclipse中,有一个内置的类路径,你正在使用它。在Ant中,您必须指定它。
让我们假设您编译源所需的所有jar都存储在${basedir}/lib
中。您的编译目标需要如下所示:
<target name="compile">
<mkdir dir="${classes.dir}"/>
<path id="compile.classpath">
<fileset dir="${basedir}/lib">
<include name="**/*.jar"/>
</fileset>
</path>
<javac srcdir="${src.dir}"
classpathref="compile.classpath"
destdir="${classes.dir}"/>
</target>
有很多方法可以做到这一点,但这是最简单的语法。我使用<path>
来定义包含我需要的所有jar的 compile.claasspath 。由于它们都位于lib
目录中,因此非常简单。
接下来,我在编译Java代码时使用 classpathref 参数指定此类路径。
这将获得编译的类(现在没有发生)。由于 compile 目标失败,因此Ant构建在调用<jar>
任务之前结束。使编译工作应该允许您的构建的其余部分工作。
答案 1 :(得分:0)