我已经对Ivy进行了一些实验,但遇到了问题。例如,当我指定ActiveMQ作为依赖项,并告诉Ivy使用Maven存储库中的POM来规定依赖关系时,Ivy会检索一堆软件包(Jetty、Derby和Geronimo等),我知道这些并不是仅使用ActiveMQ所需的。
如果我在ivysettings.xml中设置usepoms="false",它只会获取activemq.jar,但这似乎违背了Ivy的目的,并将其降级为一个简单的jar获取器,需要手动构建依赖关系规范。
这里有一个更大的问题,在Windows中被称为“DLL Hell”。在某些情况下,两个直接的第一级依赖项将指向同一个传递依赖项的不同版本(例如log4j.jar)。只能在类路径中放置一个log4j.jar,因此依赖关系解析涉及手动确定哪个版本与我们系统中所有客户端兼容。
我想这一切归结于每个软件包的依赖规范(POM)的质量。在ActiveMQ的情况下,没有范围声明,因此对ActiveMQ的任何引用都将下载其所有依赖项,除非我们手动排除我们知道不需要的依赖项。
在log4j的情况下,自动依赖关系解析需要log4j的所有客户端(依赖于log4j的其他软件包)验证所有先前版本的log4j,并在POM中提供一系列(或列表)与log4j兼容的版本。这可能太多要求了。
这是目前的情况吗,还是我漏掉了什么?