Ant编译不会复制资源

Tom*_*art 36 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>
Run Code Online (Sandbox Code Playgroud)

它很棒.当我调用ant run所以它编译并运行我的应用程序,但我的应用程序有一个包含图标的包,它没有移动到文件夹"build"所以我的应用程序结束时有一个例外,它无法找到我的图标.当我自己移动它然后它工作.

我试着用

<copy todir="build/app/icons">
    <fileset dir="src/app/icons"/>
</copy>
Run Code Online (Sandbox Code Playgroud)

它有效,但我想在没有复制命令的情况下这样做.javac有参数吗?或者是其他东西?

谢谢你的答案.

Chr*_*ers 47

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

<copy todir="build">
    <fileset dir="src"
             includes="**/*.xml,**/*.properties,**/*.txt,**/*.ico" />
</copy>
Run Code Online (Sandbox Code Playgroud)

  • 更简单:exclude ="**/*.java"而不是include (21认同)
  • 不排除但排除:<fileset dir ="src"excludes ="**/*.java"/> (7认同)
  • 评论格式化正在消除一些明星.你想要<fileset dir ="src"excludes ="\*\*/\*.java"/> (3认同)

Mik*_*ler 23

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


Dav*_*ins 12

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

<jar destfile="dist/app.jar" basedir="build">
    <fileset dir="src" includes="app/icons/**" />
</jar>
Run Code Online (Sandbox Code Playgroud)

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

  • 其他答案告诉你为什么不能做到。这个告诉你如何去做。它有效。这应该赞成。 (2认同)