我正在使用命令行在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个目录来运行我的程序。
答案 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完成您想要做的事情,但我不知道您可能有什么正当理由这样做。