【发布时间】:2011-06-24 10:00:53
【问题描述】:
我有一个 ivy.xml 文件,我在其中明确指定了我的依赖项。 Ivy 中是否有任何内置功能可以让我发现或自动更新我过时的依赖项?
我不想使用 latest.release,因为我想要一个完全稳定且可重现的构建。但是每隔一段时间我就会想要更新一些依赖项,同时最好回答这个问题,哪些其他依赖项已经过时了?
【问题讨论】:
标签: maven-2 maven ivy dependency-management
我有一个 ivy.xml 文件,我在其中明确指定了我的依赖项。 Ivy 中是否有任何内置功能可以让我发现或自动更新我过时的依赖项?
我不想使用 latest.release,因为我想要一个完全稳定且可重现的构建。但是每隔一段时间我就会想要更新一些依赖项,同时最好回答这个问题,哪些其他依赖项已经过时了?
【问题讨论】:
标签: maven-2 maven ivy dependency-management
和你一样,我只对内部依赖项使用动态版本。升级时,在新的开发阶段开始时,我会使用其中一个存储库搜索工具来发现新版本的 3rd 方库:
我相信您知道,另一个问题是升级依赖项通常会导致您的传递依赖项的非自愿升级......
我的建议是生成一个 ivy 依赖报告并使用它来检查您的代码的模块使用情况。我发现这非常有用,特别是考虑到一些 3rd 方 Maven 模块表现不佳并且会将许多不必要的库导入到我的类路径中。
以下是我的标准依赖项目标的示例:
<target name='dependencies' description='Resolve project dependencies and set classpaths'>
<ivy:resolve/>
<ivy:report todir='${ivy.reports}' graph='false' xml='false'/>
<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="provided.path" conf="provided"/>
<ivy:cachepath pathid="runtime.path" conf="runtime"/>
<ivy:cachepath pathid="test.path" conf="test"/>
</target>
希望这会有所帮助....如果您找到一种自动管理此问题的方法,我会很感兴趣。
【讨论】:
一种解决方法是使用 ivy:makepom,然后使用生成的 pom 运行 mvn versions:display-dependency-updates。
【讨论】:
我不确定这是否是最佳解决方案,但您可以创建一个要求最新版本的配置(例如“checklatest”),然后针对该版本运行报告。
例如,在您的 ivy.xml 文件中: ...
<dependencies>
....
<dependency org="somegroup" name="somename"
rev="latest.release" conf="checklatest->default"/>
</dependencies>
然后运行一个将任务用于该配置的 ant 任务。
即使在那里,它也不一定会选择最新版本——例如,Apache 的 commons-httpclient 最终并入了 httpcomponents 项目,因此在组“commons-”中请求最新的“commons-httpclient” httpclient" 只会找到 3.1 版本。但是,如果您查看 Ivy 生成的报告上的发布日期,您应该很清楚发生了一些事情,而最新的发布时间是 2007 年。到那时,您将不得不进行调查。
【讨论】:
checkdepsupdate 是 Ivy 中的大致等价物。
它为您提供如下输出:
[ivy:checkdepsupdate] com.sun.mail#javax.mail 1.5.4 -> 1.6.2
[ivy:checkdepsupdate] commons-codec#commons-codec 1.10 -> 1.11
[ivy:checkdepsupdate] org.apache.commons#commons-compress 1.12 -> 1.18
[ivy:checkdepsupdate] commons-dbutils#commons-dbutils 1.5 -> 1.7
[ivy:checkdepsupdate] commons-io#commons-io 2.4 -> 2.6
[ivy:checkdepsupdate] org.apache.commons#commons-lang3 3.6 -> 3.8.1
[ivy:checkdepsupdate] org.apache.commons#commons-text 1.1 -> 1.6
[ivy:checkdepsupdate] org.apache.poi#poi 3.13 -> 4.0.0
【讨论】: