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

问题描述 投票:1回答:1

我正在将蚂蚁转换为maven。在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中是否有任何东西使一个任务依赖于另一个任务?

ant maven-2 maven-antrun-plugin
1个回答
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生活变得更加容易。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.