使用ant命名空间/目录结构

时间:2009-06-08 22:27:19

标签: ant build-process build-automation

我正在使用命令行在linux上使用ant。我用javac做了一个简单的构建步骤。这可以正确编译,但它会像我的命名空间一样在构建下创建目录结构。

即:./ build /com/crosse/samplespace/SampleProgram.class

如何将此输出放入一个目录(更容易在其上调用java)。

我试过

 <target name="output" depends="compile">
            <copy todir="${output}">
                    <fileset dir="${build}" includes="**/*.class"/>
            </copy>
 </target>

但是在输出目录中重复相同的操作。如何使用ant将所有内容整合到一个目录中?

或者我如何使用ant步骤将另一个文件复制到该路径的根目录(apache commons配置文件)?

编辑:这主要是一个方便因素,我厌倦了浏览相同的3个目录来运行我的程序。

3 个答案:

答案 0 :(得分:2)

如何创建包含所有文件(类和其他资源)的jar文件? jar还有一个'default'类,当用户双击它或使用java -jar <jar-file>调用它时,它的主要方法被执行。 您可以使用Ant jar task

除此之外,保持目录结构(在jar之外)非常重要,否则java类加载器在加载这些类时将不会满意。或者我的问题是错的?

答案 1 :(得分:1)

要回答你的问题,你可以使用flatten mapper,正如carej指出的那样。 copy任务甚至有一个快捷方式:

<copy todir="${output}" flatten="yes">
    <fileset dir="${build}" includes="**/*.class"/>
</copy>

然而,我也不明白你希望用这个完成什么。 java运行时期望类文件位于镜像包结构的目录结构中。将类文件复制到顶级目录将不起作用,除非这些类在默认包中(package文件中没有.java语句)。

如果您想避免手动更改目录,可以随时将目标添加到使用相应类路径和其他参数调用java任务的ant构建文件中。例如:

<target name="run" depends="compile">
    <java classname="com.crosse.samplespace.SampleProgram"
          classpath=".:build"/>
</target>

答案 2 :(得分:0)

您可以使用flattenmapper完成您想要做的事情,但我不知道您可能有什么正当理由这样做。