2009-06-08 45 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>