【问题标题】:Working with ant namespace / directory structure使用 ant 命名空间/目录结构
【发布时间】:2010-11-01 07:50:32
【问题描述】:

我正在使用命令行在 linux 上使用 ant。我有一个使用 javac 的简单构建步骤。这可以正确编译,但它会在 build 下创建一个目录结构,就像我的命名空间一样。

即:./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 个目录来运行我的程序。

【问题讨论】:

    标签: ant build-process build-automation


    【解决方案1】:

    创建一个包含所有文件(类和其他资源)的 jar 文件怎么样? jar 也有一个“默认”类,当用户双击它或使用java -jar &lt;jar-file&gt; 调用它时,会执行它的主要方法。 您可以使用Ant jar task

    除此之外,保持目录结构(在 jar 之外)很重要,否则 java 类加载器在加载这些类时会不高兴。还是我把你的问题弄错了?

    【讨论】:

      【解决方案2】:

      正如 carej 指出的那样,要回答您的问题,您可以使用 flatten mappercopy 任务甚至有一个快捷方式:

      <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>
      

      【讨论】:

        【解决方案3】:

        您可以使用 flattenmapper 完成您想做的事情,但我不知道您有什么可能的正当理由。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-03
          • 2013-06-29
          相关资源
          最近更新 更多