Ant编译不会复制资源

时间:2009-04-29 20:35:35

标签: java ant

我创建了自己的build.xml,其中包含:

<target name="compile">
    <mkdir dir="build"/> 
    <javac destdir="build"> 
        <src path="src"/> 
    </javac>
</target>

<target name="build" depends="compile">
    <mkdir dir="dist"/>
    <jar destfile="dist/app.jar" basedir="build" />
</target>

<target name="run" depends="compile">
    <java classname="webserver.Loader" classpath="build" fork="true" />      
</target>

效果很好。当我调用ant run所以它编译并运行我的应用程序,但我的应用程序有一个带有图标的包,它没有移动到文件夹“build”所以我的应用程序结束时有一个例外,它无法找到我的图标。当我自己移动它们时它会起作用。

我尝试使用

<copy todir="build/app/icons">
    <fileset dir="src/app/icons"/>
</copy>

它有效,但我想在没有复制命令的情况下这样做。 javac有参数吗?或其他什么?

感谢您的回答。

4 个答案:

答案 0 :(得分:46)

没有这样的参数。您可以使用以下命令在目录之间复制所有类型的文件:

<copy todir="build">
    <fileset dir="src"
             includes="**/*.xml,**/*.properties,**/*.txt,**/*.ico" />
</copy>

答案 1 :(得分:23)

抱歉,您需要手动复制非java文件。资源在技术上不是“来源”。命令行javac不会将资源文件从源目录复制到输出目录,ant的javac任务也不会。

答案 2 :(得分:12)

您可以使用fileset任务的jar元素执行此操作,而不是手动复制文件。例如:

<jar destfile="dist/app.jar" basedir="build">
    <fileset dir="src" includes="app/icons/**" />
</jar>

这会将src/app/icons/中的所有内容复制到.jar文件中的app/icons路径。

答案 3 :(得分:4)

不,没有。复制任务是将资源复制到构建文件夹的正确方法。