将Ant转换为Maven:目标属性“依赖”Ant的问题

时间:2010-07-29 15:41:55

标签: ant maven-2 maven-antrun-plugin

我正在将ant转换为maven2。 在build.xml中,我有:

<target name="clean">
  <delete file="${dir.dist}/${api.jarfile}" />
  <delete dir="${dir.build}/**" />
</target>
<target name="prepare1" depends="clean">
  <mkdir dir="${dir.build}" />
  <mkdir dir="${dir.generated.code.junit}/build" />
  <mkdir dir="${dir.dist}" />
</target>
<target name="prepare2" depends="clean">
  <mkdir dir="${dir.deploy}" />
  <mkdir dir="${dir.dist}" />
</target>

我正在使用maven-antrun-plugin,它与第一个目标一起工作正常。但是,对于第二个目标,antrun不支持“依赖”。我可以这样做:将第一个目标置于清洁阶段,将第二个目标置于后清洁阶段。所以第二个目标将在第一个目标之后运行。但是对于第3个目标,这个技巧将不起作用,因为第3个目标应该仅在第1个目标之后运行(我不想在第3个目标时运行第2个目标)。

无论如何,这个技巧不起作用,因为我的build.xml是一个包含许多目标的大文件,它们之间的关系很复杂。

无论如何可以解决这个问题吗? 在maven中是否有任何东西使一个任务依赖于另一个任务?

1 个答案:

答案 0 :(得分:1)

a)为什么不把它们放在一起?当您使用maven运行ant时,无论如何都无法调用单个目标,您正在将ant运行绑定到maven阶段。因此,您可以在清洁阶段执行以下操作:

  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.4</version>
    <executions>
      <execution>
        <phase>clean</phase>
        <configuration>
          <tasks>
             <delete file="${dir.dist}/${api.jarfile}" />
             <delete dir="${dir.build}/**" />
             <mkdir dir="${dir.build}" />
             <mkdir dir="${dir.generated.code.junit}/build" />
             <mkdir dir="${dir.dist}" />
             <mkdir dir="${dir.deploy}" />
             <mkdir dir="${dir.dist}" />
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

如果您在其他阶段需要更多工作,请添加更多执行:

      </execution> <!-- end tag from above -->
      <execution>
        <phase>generate-sources</phase>
        <configuration>
          <tasks>
               <!-- some more ant tasks -->
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>

b)如果你使用maven,你应该像maven一样思考。你在ant任务中做的很多事情都是默认的maven行为。

在干净阶段,执行clean:clean目标,删除目标目录(以及jar随之而来)。如果你把你正在使用的所有目标放在目标下面(这在maven中被认为是好习惯),maven将自动删除它们(并创建它们)。

Maven就是关于惯例:

  • 生成的任何内容都在目标
  • 主要工件的类和资源进入目标/类
  • 用于测试的类和资源进入目标/测试类
  • 生成的资源进入target / generated-resources / yourfoldername
  • 生成的源位于target / generated-sources / yourfoldername

所有主要插件都希望您遵循这些约定(它们具有默认值)并使用它们将使maven生活变得更加轻松。

E.g。 mvn clean将确保您删除生成的所有内容。 有一些例外,插件必须在不同的地方存储数据,因此无法通过clean:clean来获取。这些插件通常提供备用的干净mojos(eclipse:cleanidea:clean是示例),但尽量不要创建更多例外。

另外,根据maven惯例,在相位清理中不应创建任何内容。生成内容有很多阶段,例如generate-resourcesgenerate-sourcesgenerate-test-resourcesgenerate-test-sources。另外:创建文件夹通常是不必要的,我知道所有maven插件在编写文件时根据需要创建文件夹。