java - Ivy - 将解析结果输出到 ivy 文件

标签 java build dependencies ivy dependency-management

解析了我的 ivy.xml 文件后,我想创建一个新的 resolved-ivy.xml 文件,其中包含所有传递依赖项 在解析中找到。 这有可能吗?

这与交付不同,交付(我相信)只从您的 ivy.xml 中写出直接依赖关系,而不是传递依赖关系。 deliver Ant 任务确实有一个 delivertarget 属性,在文档中看起来它应该这样做。实际上,它仅适用于同一组织中的模块(因此通常不适用于所有依赖项)并为每个模块生成一个文件。

它也不同于解析时生成的 ivy-report XML 文件,但差别不大。如果我正在尝试的是不可能的,那么我会直接破解这个文件,我想。

此处的上下文试图实现可重复的可复制构建,包括在存储库发生更改(新库、版本)的情况下。互联网上有一些帖子试图做到这一点,但我发现没有一个能正确地做到这一点。

  • 添加到 Ivy 存储库可以改变解析结果,特别是如果存储库中任何地方的任何依赖项(不仅仅是您的项目)具有范围依赖项。示例:A 依赖于 B;[2.0,4.0] 并且 B;3.1 稍后添加到存储库。
  • 想法是像往常一样解析,将解析写成扁平化的 Ivy 文件,将其保存在项目的 VCS 中用于该标记(或其他),然后使用 transitive="false" 解析该文件>。假设存储库中的现有项目没有改变,这允许可重复构建。
  • 如果有人对此有更好的想法,我会洗耳恭听。目前我希望必须破解 ResolveEngine 的一些组合以使 ResolveReport 可用,然后添加自定义 DeliverEngine 以使用

最佳答案

artifactreport> 可能会有所帮助。

使用 deliver 任务创建一个 ivy.xml,动态版本约束替换为静态版本约束(即 [2.0,3.0[ 变为 2.2.1):

<ivy:deliver conf="*(public)" deliverpattern="${dist.dir}/ivy.xml"/>

然后对该文件使用 resolve 任务来准备 artifactreport。

<ivy:resolve file="${dist.dir}/ivy.xml"
             conf="*(public)"
             refresh="true"
             type="ivy" />

最后,artifactreport 将执行瞬时依赖解析。

<ivy:artifactreport tofile="${dist.dir}/artifactreport.xml" />

artifactreport.xml 看起来像

<modules>
<module organisation="com.googlecode.flyway" name="flyway" rev="1.7" status="release"/>
<module organisation="org.postgresql" name="postgresql-jdbc" rev="9.0" status="release"/>
<module organisation="org.hibernate" name="hibernate" rev="3.3.2" status="release"/>
<module organisation="org.apache.commons" name="commons-daemon" rev="1.0.2" status="release"/>
...

使用 XSLT 生成 ivy.xml 表单。

关于java - Ivy - 将解析结果输出到 ivy 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10444660/

相关文章:

xcode - 如果我的 git 工作副本脏了,我该如何停止 Xcode 存档构建?

dependencies - SCons - 如何为跨脚本的目标提供显式依赖关系

ruby - gem "jekyll"的Bundler兼容版本

design-patterns - 在依赖项中查找高级和低级模块以应用依赖倒置原则

java - 如何从 java 文件对话框获取值并将其传递给变量?

Java 小程序 "HORIZONTAL"无法解析或不是字段

eclipse - 将 Maven Web 应用程序运行到 Tomcat

Java异常错误导致代码突然停止

java - 如何将 RGB 颜色存储到 HashMap 中?

c++ - 使用boost.python在cygwin中手动构建python扩展