将Maven与Ivy集成

问题是:您在Ivy存储库中(只有那里)有一些资源,您想在基于Maven的项目中使用这些资源。 可能的解决方案:
  • 由于Ivy可以轻松使用Maven风格的存储库(因此,您的Ivy客户端可以继续使用Ivy并进行一些微小的配置更改,因此将存储库迁移到Maven(例如Nexus),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集成在一起 。

相关文章 :

  • 任何软件开发公司应存在的服务,实践和工具,第1部分
  • 在领域驱动的设计,贫乏的领域模型,代码生成,依赖项注入等方面……
  • OSGi将Maven与Equinox结合使用
  • Java模块化方法–模块,模块,模块
  • 使用Spring AspectJ和Maven进行面向方面的编程
  • GWT EJB3 Maven JBoss 5.1集成教程

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用python下载辞典

用python下载词源词典Etymoline Online Etymology Dictionary是最好的 English 词源词典&#xff0c;现在来说没有之一。但是&#xff0c;一直在PC上查单词有时不是很方便&#xff0c;遂就想怎么才能在手机上使用。现在的手机上的词典&#xff0c;除了BlueDict、MDict之外&…

程序员都用什么来记录知识_1年前的小五都用 Python 来做什么?

↑ 点击上方 “凹凸数据” 关注 星标 ~ 每天更新&#xff0c;干货不断 (多图预警)注&#xff1a;这是小五一年前在知乎的回答&#xff0c;当时还只有凹凸数读一个公众号&#xff0c;所以很多图片都会带有数读或者知乎的水印。作为一个菜鸟数据分析师&#xff0c;只会sqlpytho…

CSDN编程挑战——《高斯公式》

高斯公式 题目详情: 高斯在上小学时发明了等差数列求和公式:12..1005050。现在问题在于给你一个正整数n&#xff0c;问你他可以表示为多少种连续正整数之和&#xff1f;&#xff08;自身也算&#xff09;。 输入格式&#xff1a; 多组数据&#xff0c;每组数据一行&#xff0c…

SQL-行转列(PIVOT)实例1

--未旋转之前的查询结果 select s.Name ShiftName,h.BusinessEntityID,d.Name as DpartmentName from HumanResources.EmployeeDepartmentHistory h inner join HumanResources.Department d on h.DepartmentIDd.DepartmentIDinner join HumanResources.Shift s on s.ShiftIDh…

将MongoDB与Morphia结合使用

在过去的几年中&#xff0c; NoSQL数据库&#xff08;例如CouchDB&#xff0c;Cassandra和MongoDB&#xff09;在不需要运行传统RDBMS的语义和开销的应用程序中得到了普及。 我不会进入选择NoSQL数据库的设计决策&#xff0c;因为其他人已经做得很好&#xff0c;但是我将结合我…

webservice接口_webservice服务器端发票识别接口

关键词&#xff1a;发票识别 私有云发票识别 发票识别API接口 webservice发票识别平台发票&#xff0c;一个再也熟悉不过的财务往来凭证&#xff0c;录入发票&#xff0c;一项让多少财会人员头疼的工作。过去录入一张发票需要一个财会人员5分钟的时间&#xff0c;那么这个人在工…

二叉树学习——简单入门题

入门题一&#xff1a; 输入一颗二叉树&#xff0c;你的任务是按从上到下、从左到右的顺序输出各个节点的值。每个节点都按照从根节点到它的移动序列给出 &#xff08;L表示左&#xff0c;R表示右&#xff09;。在输入中&#xff0c;每个节点的左括号和右括号之间没有空格&#…

java8-4 多态的练习以及题目

1、/* 多态练习&#xff1a;猫狗案例*/ 1 class Animal {2 public void eat(){3 System.out.println("吃饭");4 }5 }6 7 class Dog extends Animal {8 public void eat() {9 System.out.println("狗吃肉"); 10 } 11 12 public void lookDoor() { 13 Syste…

一个简单的socket通信小demo

写了一个socket的程序&#xff0c;可以和本地的服务器进行通信&#xff0c;要先和服务器建立链接&#xff0c;然后发送登录信息&#xff0c;验证成功&#xff0c;就可以和服务器通信了 1 页面截图 2 点击链接服务器&#xff0c;可以链接服务器&#xff0c;服务器的ip地址为&…

Java并发教程– CountDownLatch

Java中的某些并发实用程序自然会比其他并发实用程序受到更多关注&#xff0c;因为它们可以解决通用问题而不是更具体的问题。 我们大多数人经常遇到执行程序服务和并发集合之类的事情。 其他实用程序不太常见&#xff0c;因此有时它们可​​能会使我们逃脱&#xff0c;但是请记…

汉仪尚巍手书可以商用吗_【商用车维修】夏天修空调可以撑起全年修车收入的一半,你会了吗?...

更多精彩&#xff0c;请点击上方蓝字关注我们&#xff01;车载空调是炎热的季节必不可少的利器&#xff0c;但用得多&#xff0c;毛病也多了起来&#xff0c;今天和大家分享一些空调系统的相关知识&#xff0c;助力修车师傅们来应对空调系统的相关故障问题。如何判断制冷系统的…

CSDN编程挑战——《-3+1》

-31 题目详情: 有一个数列&#xff0c;所有的数都是非负整数&#xff0c;你可以进行如下方式进行一次操作&#xff08;注意一次完整的操作必须先后完成如下两个步骤&#xff09;&#xff1a; &#xff08;1&#xff09; 任选一个不小于3的数&#xff0c;把它减少3。 &#xff…

游戏感悟

1.所谓游戏平衡&#xff0c;就是指玩家没有最优解。 2.所谓公司的文化&#xff0c;就是指员工被公司洗脑的那些观点(认知)。 3.人是能动的&#xff0c;摆脱平庸。转载于:https://www.cnblogs.com/yangzhou33/p/5074509.html

Git 简单使用

1.Git是什么 简介&#xff1a;Git是 Linux 之父 Linus Trovalds&#xff0c;为管理 Linux 内核代码而建立的&#xff0c;被认为是分布式版本控制工具中的顶级水准。智能、友好、强健、高效。 作用&#xff1a;新建一个分支&#xff0c;把服务器上最新版的代码fetch下来&#x…

Vaadin附加组件和Maven

介绍 我喜欢Vaadin的 &#xff08;众多&#xff09;一件事是它对Vaadin框架的“附加组件”社区-他们称之为Vaadin目录 。 “附加组件”是框架中社区贡献的附加组件&#xff0c;可以是任何东西&#xff0c;例如从新的客户端小部件到数据表的延迟加载容器。 我肯定会为Activiti看…

八皇后时间复杂度_【算法打卡】N皇后

难度&#xff1a;困难题目&#xff1a;n 皇后问题研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n&#xff0c;返回 n 皇后不同的解决方案的数量。提示&#xff1a;皇后&#xff0c;是国际…

Android-Binder 简析

前言 对于Android来说&#xff0c;Binder的重要性怎么说都不为过。不管是我们的四大组件Activity、Service、BroadcastReceiver、ContentProvider&#xff0c;还是经常在应用中使用到的各种ServiceManager&#xff0c;其背后都是Binder在支撑。然而Binder机制又不是三言两语能够…

CSDN编程挑战——《进制转换》

进制转换 题目详情: 我们通常用的十进制数包含0-9十个数字。假设有一种进制系统包含3种数字&#xff0c;从低到高分别为"oF8”&#xff0c;那么从1到9分别表示为F, 8, Fo, FF, F8, 8o, 8F, 88, Foo, FoF。给定一种进制的数和两种进制的数字表&#xff0c;请把它从第一种进…

tplink 703刷固件

1.软件下载: ImageBuilder链接 如果是全新刷机的话,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin 如果是系统升级的话,使用:http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/op…

编程反模式

您是否曾经进行过代码审查&#xff0c;记录了非常高的WTF / m&#xff1f; 您是否想知道所有这些错误代码的原因是什么&#xff1f; 在大多数情况下&#xff0c;导致原因1的主要原因是使用设计和编码反模式。 如果您喜欢定义&#xff0c;请参见以下内容&#xff1a;AntiPatter…