2009-06-08 40 views
2

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

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

我怎样才能得到这个输出到一个目录(其中它更容易调用它的Java)。

我试图

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

但重复我的输出目录同样的事情。我如何使用ant将所有内容都放到一个目录中?

或者我如何使用蚂蚁一步到另一个文件复制到该路径(Apache的公共配置文件)的根源在哪里?

编辑:这主要是一个便利因素,我厌倦了通过相同的3个目录导航运行我的程序。

回答

2

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

在那旁边,你保持你的目录结构(罐外),否则Java类加载器将不开心的时候它必须加载这些类是很重要的。或者我把你的问题弄错了?

0

可以完成你想要使用flattenmapper做什么,但我茫然地了解你有什么可能的有效理由这样做。

1

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

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

然而,我也想不明白,你希望与该完成的任务。 java运行库期望类文件位于映射包结构的目录结构中。将类文件复制到顶层目录将不起作用,除非这些类位于默认包中(.java文件中没有package语句)。

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

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