我有一个 ivy.xml 文件,我在其中明确指定了我的依赖项。Ivy 中是否有任何内置功能可以让我发现或自动更新我过时的依赖项?
我不想使用 latest.release 因为我想要一个完全稳定且可重现的构建。但是每隔一段时间我就会想要更新一些依赖项,同时最好回答这个问题,哪些其他依赖项已经过时了?
我有一个 ivy.xml 文件,我在其中明确指定了我的依赖项。Ivy 中是否有任何内置功能可以让我发现或自动更新我过时的依赖项?
我不想使用 latest.release 因为我想要一个完全稳定且可重现的构建。但是每隔一段时间我就会想要更新一些依赖项,同时最好回答这个问题,哪些其他依赖项已经过时了?
和你一样,我只对内部依赖项使用动态版本。升级时,在新的开发阶段开始时,我会使用其中一个存储库搜索工具来发现 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-httpclient”组中对最新的“commons-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