从Maven运行Ant任务

时间:2010-08-17 15:14:52

标签: maven-2 ant

我正在使用Ant构建一个自定义jar库,然后我在Maven中使用它作为依赖。

<dependency>
    <groupId>test-lib</groupId>
    <artifactId>test-lib</artifactId>
    <version>1.0.0system</scope>
    <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/test-lib-1.0.0.jar</systemPath>
</dependency>

所以,基本上我现在所做的是:

1)运行ant来构建自定义库(test-lib-1.0.0.jar)
2)运行:mvn编译,使用自定义库等编译我的项目。

我可以选择完成所有这些操作(打包自定义jar和编译项目) Maven的? 我找到了maven run plugin,这是我的设置:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.4
    <executions>
        <execution>
            <phase>?????what to put here?????/phase>
            <configuration>
                <tasks>
                    <ant antfile="${basedir}/build.xml">
                        <target name="prepare-test-lib" />
                    </ant>
                </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>

但是,在运行时:mvn compile它会抱怨缺少工件:test-lib-1.0.0.jar。 我在<phase/>标签中使用了compile,generate-resouces,...但似乎没有任何效果。

是否可以使用此插件以某种方式解决此问题?

1 个答案:

答案 0 :(得分:2)

当使用Maven Antrun插件时,Maven尝试解析依赖关系以构建用于AntRun调用的ClassPaths,因此您面临鸡和蛋问题:您无法声明将在AntRun期间创建的依赖项需要此依赖项才能运行的执行。这不起作用。

我的建议是对你的test-lib进行编组,将其包含在项目构建中,并声明对它的常规依赖。换句话说,我的意思是从Ant迁移到Maven以构建test-lib并设置a multi-modules project。 为了更“直观地”说明事情,可以这样:

my-project
|-- my-module
|   |-- src
|   |   `-- main
|   |       `-- java
|   `-- pom.xml
|-- test-lib
|   |-- src
|   |   `-- main
|   |       `-- java
|   `-- pom.xml
`-- pom.xml

其中my-project/pom.xml是具有<packaging>pom</packaging>的聚合pom,并列出<modules>元素下的模块:

<modules>
  <module>my-module</module>
  <module>test-lib</module>
</modules>

my-module/pom.xml声明对test-lib工件的依赖:

<dependency>
  <groupId>your.group.id</groupId>
  <artifactId>test-lib</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

我只是在这里给出一个非常高级的概述,你需要阅读文档一些细节,我无法涵盖所有​​内容。从Sonatype的第一本书开始(链接如下)。

但这是正确的方法(你应该不(ab)使用system范围的依赖关系。)

参考