指示Maven使用Ivy生成的类路径

时间:2011-06-21 18:30:35

标签: maven ivy pom.xml

我们正在为现有项目添加新代码,该项目使用使用 Ant Ivy 开发的自定义构建系统进行依赖关系管理。

我们的新团队习惯于 Maven 及其测试执行,cobertura报告等功能。

我们的问题是:添加与当前项目结构匹配的pom.xml是否可行,但是指示Maven从已经由Ivy填充的“lib”目录加载其类路径? 换句话说:我们希望在没有依赖管理的情况下使用Maven。

一个非常脏的方法是从libdir生成一个大jar并配置pom.xml以包含那个...但我们相信应该有更清洁的方法。

有任何想法或建议吗?

注意:我们对使用Ivy配置中的依赖项生成pom.xml不感兴趣,我们只是希望Maven依赖于Ivy生成的类路径。无需区分test / runtime / compile类路径。

3 个答案:

答案 0 :(得分:1)

这是我们解决这个问题的最终设置:

  • 对于每个Ivy遗留项目,使用 ivy:makepom 和手动检查来确定我们需要发送到新项目的依赖项(基于Maven)。这是每个项目的一次性流程。
  • 修改遗留构建系统的方式是,每次构建项目时,已识别的依赖项也会导出到mvn repo。因为de build machine拥有内部仓库,我们只使用 mvn install
  • 在新的maven项目中,声明pom.xml中的每个依赖项,并确保构建系统在旧版构建之后运行maven构建。

谢谢大家的帮助!

答案 1 :(得分:0)

一种可能性是使用system范围来定义maven中的依赖关系。这允许maven使用ivy下载的jar作为其依赖项。

e.g。

<dependencies>
    <dependency>
      <groupId>group.id</groupId>
      <artifactId>artifact</artifactId>
      <version>a.b.c</version>
      <scope>system</scope>
      <systemPath>${basedir}/lib/artifact-a.b.c.jar</systemPath>
    </dependency>
    ...
  </dependencies>

答案 2 :(得分:0)

也许makepom task会有所帮助,它会从常春藤文件中创建一个pom。

该页面的示例:

<ivy:makepom ivyfile="${basedir}/path/to/ivy.xml" pomfile="${basedir}/path/to/module.pom" conf="default,runtime">
   <mapping conf="default" scope="compile"/>
   <mapping conf="runtime" scope="runtime"/>
   <dependency group="com.acme" artifact="acme-logging" version="1.0" optional="true"/>
</ivy:makepom>