从Maven运行Ant任务

4
我正在使用Ant来构建一个自定义的jar库,然后在Maven中将其作为依赖项使用。
所以,我现在所做的基本上是: 1)运行Ant以构建自定义库(test-lib-1.0.0.jar) 2)运行:mvn compile,编译我的项目,其中包括自定义库以及其他内容。
有没有选项可以让我从Maven中完成所有这些操作(打包自定义jar和编译项目)? 我发现了maven run插件,以下是我的设置:
但是,在运行“mvn compile”时,它抱怨缺少artifact:test-lib-1.0.0.jar。 我已经在标签中使用了compile、generate-resources等,但似乎没有任何作用。
是否可以使用此插件解决这个问题?
1个回答

2
使用Maven Antrun插件时,Maven尝试解析依赖项以构建AntRun调用的ClassPaths,因此您面临鸡和蛋问题:您无法声明在AntRun执行期间创建并需要此依赖项运行的依赖项。这是不可能的。
我的建议是将您的test-lib转换为Maven项目,并将其包含在您的项目构建中,并对其进行常规依赖项声明。换句话说,我的意思是从Ant转向Maven来构建您的test-lib并设置多模块项目。为了更形象地说明,可以像这样:
my-project
|-- my-module
|   |-- src
|   |   `-- main
|   |       `-- java
|   `-- pom.xml
|-- test-lib
|   |-- src
|   |   `-- main
|   |       `-- java
|   `-- pom.xml
`-- pom.xml

其中my-project/pom.xml是一个聚合POM,具有<packaging>pom</packaging>,并在<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的第一本书开始阅读(下面有链接)。

但这是正确的做法(您不应该滥用系统作用域依赖项)。

参考资料


谢谢你的回答,Pascal! 好的,基本上我需要以不同的方式来做事情。但是你所说的“将测试库maven化”是什么意思?你是指我应该将test-lib安装到我的本地maven存储库中吗?我试图避免这样做,因为test-lib是一个相当小的库,实现了我项目中使用的API,并且我肯定会在其他项目中使用它。 - Igor
@Igor 不,我不是指在您的本地存储库中仅安装test-lib,我是指创建一个特定的maven模块并将test-lib源代码放入其中(即从ant转移到maven来构建它),以便在需要时可以将其打包作为构建的一部分(我认为这不是问题,相反地,它是一个小型库)。 - Pascal Thivent
@Pasacal 我该如何在我的项目构建中包含test-lib,并在此之后声明其为标准依赖项?如果您能指向一些文档、示例,我将不胜感激,因为我对maven还很陌生。谢谢! - Igor
@Igor:阅读免费在线书籍:http://www.sonatype.com/products/maven/documentation/book-defguide - Sean Patrick Floyd
@Igor,@seanizer提供的链接(谢谢)绝对是一个很好的开始。更确切地说,从第一本书开始(不要被“书”这个词吓到)。 - Pascal Thivent
@seanizer @Pascal 谢谢你们指引我正确的方向! - Igor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接