欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ivy maven_将Maven与Ivy集成

程序员文章站 2022-05-08 19:22:36
...

ivy maven

问题是:您在Ivy存储库中(只有那里)有一些资源,您想在基于Maven的项目中使用这些资源。 可能的解决方案:
  • 由于Ivy可以轻松使用Maven样式的存储库(因此,您的Ivy客户端可以继续使用Ivy并进行一些微小的配置更改,因此将存储库迁移到Maven)(Maven客户端也可以使用-推送请求流程也需要)待更改)
  • 尝试使用JFrog Artifactory,因为据报道可以为Ivy和Maven提供相同的资源 (免责声明:我尚未尝试实际使用它,并且我不知道开源版本是否包含此功能)
  • 或继续阅读...

我的解决方案目标(可能会很复杂)是:

  • 它应该尽可能简单和不言自明
  • 它应该遵守DRY原则(不要重复自己)
  • 除了Maven本身,它不应该具有其他依赖项

该解决方案如下所示(有关完整源代码,请参阅code-repo ):

有两个Maven配置文件:常春藤依赖项在已下载依赖项时**,而常春藤解析则在尚未下载时**。 这基于检查最终要复制依赖项的目录:

...
<id>ivy-dependencies</id>
<activation>
  <activeByDefault>false</activeByDefault>
  <file>
    <exists>${basedir}/ivy-lib</exists>
  </file>
</activation>
...
<id>ivy-resolve</id>
<activation>
  <activeByDefault>false</activeByDefault>
  <file>
    <missing>${basedir}/ivy-lib</missing>
  </file>
</activation>
...

不幸的是,这里很少重复,因为Maven似乎没有在配置文件**部分扩展用户定义的属性,例如$ {ivy.target.lib.dir}。 概要文件还起到了另一个作用:在实际解决依赖关系之前避免考虑依赖关系。

首次运行构建时,它将创建目标目录,并在其中写入Ivy构建所需的文件(ivy.xml,ivysettings.xml和build.xml –在此示例中,我使用了Red5相应文件中某些部分repo ),运行构建并尝试自行清理。 它还会创建一个dependencies.txt文件,其中包含需要添加到依赖项列表中的文本块。 最后,它失败(失败),指示用户再次运行该命令。

在第二(第三,第四等)运行时,依赖项已经存在,因此解决过程将不会重复运行。 选择这种方法而不是在每次构建时都运行解析,因为-尽管解析过程很快,但在一些更复杂的情况下可能会花费数十秒,并且我不想减慢构建速度。

而且,Ivy,Apache BSF框架等是从Maven*存储库中获取的,因此无需预先安装它们即可成功完成构建。

关于选择$ {ivy.target.lib.dir}的几句话:如果在Maven树中选择它(如示例中选择的那样),您将收到来自Maven的警告,将来可能不支持。 另外,请确保将目录添加到VCS的忽略机制(.gitignore,.hgignore,.cvsignore,svn:ignore等),以避免将库意外提交给VCS。

如果需要向项目添加新的(Ivy)依赖项,则步骤如下:

  • 删除当前的$ {ivy.target.lib.dir}目录
  • 更新您的pom.xml中写出ivy.xml文件的部分以包括新的依赖项
  • 运行构建并观察新的依赖关系已解决
  • 更新常春藤依赖项配置文件的依赖项部分以包括新的依赖项(可能是从dependencies.txt复制)

这种方法的一个缺点是,基于Maven的系统的高级功能无法使用这些依赖项(例如,依赖项analisys /制图插件,自动下载源代码/ javadocs等)。 可能的解决方法(通常是个好主意)是对最小子集使用此方法-只是在Maven Central中找不到的jar。 所有其余部分(即使它们实际上实际上是从Ivy获取的代码的依赖关系)也应声明为常规依赖关系,以从Maven存储库获取。

最后,我想说的是,这一努力再次向我展示了Maven和Ivy / Ant可以多么灵活,并阐明了CDATA内部的许多极端情况(例如我们如何逃脱] –我们将其分成两部分)。 而且它也可以进行进一步的调整(例如:将一个干净的目标添加到ivy-resolve配置文件中,因此您可以使用mvn clean -P ivy-resolve删除目录,或者将所有下载的jar重新添加到一个jar中例如像这样 ,这样就避免了每次更改Ivy依赖项列表时都需要修改pom文件-这样,再次签名的JAR也无法重新添加,因此也不是通用解决方案。

参考: Transylvania Java用户组的 JCG合作伙伴提供的Maven与Ivy的集成

相关文章 :


翻译自: https://www.javacodegeeks.com/2011/10/integrating-maven-with-ivy.html

ivy maven