从 Maven 运行 Ant 任务

Posted

技术标签:

【中文标题】从 Maven 运行 Ant 任务【英文标题】:Run Ant task from Maven 【发布时间】:2011-03-31 01:26:48 【问题描述】:

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

测试库测试库1.0.0system $basedir/src/main/webapp/WEB-INF/lib/test-lib-1.0.0.jar依赖>

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

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

我是否可以选择从 马文? 我找到了 maven run 插件,这是我的设置:

maven-antrun-plugin1.4 ?????这里放什么??????/phase> 任务> 配置> 运行目标> 目标> 执行> 执行> 插件>

但是,在运行时:mvn compile 它抱怨缺少工件:test-lib-1.0.0.jar。 我在<phase/> 标记中使用了编译、生成资源、...,但似乎没有任何效果。

是否有可能使用这个插件以某种方式解决这个问题?

【问题讨论】:

【参考方案1】:

当使用 Maven Antrun 插件时,Maven 会尝试解决依赖关系来为 AntRun 调用构建 ClassPaths,因此您将面临一个先有鸡还是先有蛋的问题:您不能声明将在 AntRun 执行期间创建的依赖项需要此依赖项才能运行。这行不通。

我的建议是将您的 test-lib 进行 mavenize,将其包含在您的项目构建中并声明对它的常规依赖。换句话说,我的意思是从 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范围依赖项)。

参考文献

Maven: The Definitive Guide

【讨论】:

感谢您的回答帕斯卡!好的,所以基本上我需要以不同的方式做事。但是'mavenize your test-lib'是什么意思?你的意思是我应该在我的本地 maven 存储库上安装 test-lib 吗?我试图避免这种情况,因为 test-lib 是一个非常小的库,它实现了我项目中使用的 API,我当然希望在其他项目中使用它。 @Igor 不,我的意思不仅仅是在本地存储库中安装 test-lib,我的意思是创建一个特定的 maven 模块并将 test-lib 源放入其中(即从 ant 移动到maven 来构建它),以便您可以在需要时将其打包作为构建的一部分(恕我直言,它是一个小库,相反)。 @Pasacal 如何在我的项目构建中包含 test-lib,然后声明对其的标准依赖?如果您能指出一些文档和示例,我将不胜感激,因为我对 maven 还是很陌生。谢谢! @Igor:阅读免费在线书籍:sonatype.com/products/maven/documentation/book-defguide @Igor @seanizer 提供的链接(谢谢)绝对是一个入门的好地方。更准确地说是从第一本书开始(不要被“书”这个词吓到)。

以上是关于从 Maven 运行 Ant 任务的主要内容,如果未能解决你的问题,请参考以下文章

Maven插件maven-antrun-plugin的使用

Maven (m2e) 没有执行 ant 任务

需要澄清ANT和MAVEN

Maven的主要特点

Maven 或 Ivy 用于管理 Ant 的依赖关系?

用于非Java CI / CD的Maven over Ant [关闭]