当前位置: 首页 > 知识库问答 >
问题:

蚂蚁常春藤后检索触发器

茹轩昂
2023-03-14

我正在尝试解决Ant/Ivy系统中的一些技术债务,我目前的任务之一是解决我们目前的一些检索后行为。默认情况下,我们的构建系统检索Ivy依赖项,然后将压缩工件(tar、tar.bz2、gzip、zip)提取到依赖文件夹,以便我们的项目具有一致的依赖位置:

(project.root)/dependency/.archive       <- the compressed dependency location 
(project.root)/dependency/extracted-foo` <- the uncompressed dependency

提取发生在post-receve-artiif触发器中,因此我们可以受益于一些元数据(路径、名称、类型等),所有这些都以'dep'为前缀。

我们目前有一个属性,可以设置为关闭 ivy.xml 文件中指定的所有依赖项的此默认行为。因此,我们只剩下全有或全无的局面。如果我们想要介于两者之间的东西,我们目前必须使用我们的构建.xml文件并编写一些自定义代码。这很痛苦,因为元数据不容易获得。

我想保留全有或全无标志的使用,但允许项目有选择地提取项目——我们有几个项目的build.xml文件将大大简化,如果我们可以将提取过程分解为工件本身的属性。

因此,我的想法是使用工件标记上的extraattribute来“注入”此信息并覆盖 搜索此属性。

Ivy.xml

<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
  <dependencies>
    <dependency org="my.org" name="foo" rev="${foo.version}" conf="${conf.archive}->*" transitive="false">
      <artifact name="megapin" type="war" e:expand="expand"/>
    </dependency>
  </dependencies>
</ivy-module>

Build.xml

这就是我想我在显示expand额外属性时遇到的问题。

问题1:这确实在检索时将“提取”属性添加到工件名称中。我可以使用包含子句来检查dep.to是否有办法检索额外的属性(例如,${dep.extra.expand}

<property name="ivy.retrieve.pattern" value="${dependency.dir}/[conf]/[artifact]-[rev])(-[expand]).[ext]"/>
</property>    

<target name="ivy-post-retrieve-trigger">
  <local name="doexpand"/>
  <condition property="doexpand">
    <contains string="${dep.to}" substring="expand" casesensitive="false"/>
  </condition>

  <!-- this step works if the flag is set properly, so I'm leaving out these non-relevant steps-->
  <...extract if:isset="doexpand"... />   

ivysettings.xml

这个文件基本上有触发器和其他解析器设置。

<triggers>
  <ant-call target="ivy-post-retrieve-trigger" prefix="dep" event="post-retrieve-artifact"/>
</triggers>

问题2:对“noexpand”名称有什么建议吗?我对<代码>的担忧

我认为我即将完成这项工作 - 但我得到的唯一信息是:尚未设置属性“doexpand”,因此它跳过了提取步骤。Q3 关于如何在 Ant/Ivy 的触发器上使用额外属性的任何提示/建议/示例?

共有1个答案

须景胜
2023-03-14

最后,我向Ivy添加了一些额外的调试语句(从源代码编译而来)。在ant-ivy/src/java/org/apache/ivy/ant/AntCallTrigger中。java我添加了以下行:

Message.verbose("\tp.name=" + p.getName() + " | p.value=" + p.getValue() );

如果我将Ivy.xml文件中的依赖项修改为:

<dependency org="my.org" name="foo" rev="${foo.version}" conf="${conf.archive}->*" transitive="false">
  <artifact name="megapin" type="war" e:expand="true"/>
</dependency>

这表明

[ivy:retrieve]  p.name=dep.expand | p.value=true

在这一点上,我可以这样做

<isset property="dep.expand"/>

或者

<istrue value=${dep.expand}/>

这回答了我的Q1。此外,我不需要将其添加到常春藤检索模式中(因此在检索后更改文件名),可以根据需要使用“真”或“假”值(Q2),这个一般指南回答了第三季度。

 类似资料:
  • 我目前正在与apache ivy的conf设置作斗争。也许我会先解释我想实现的目标: 我需要两种配置:编译、运行时 这是我试过的: 但它甚至无法被解析:无法解析ivy文件'...\ivy.xml': 有人能告诉我如何正确地声明conf设置,这样我就可以使用compile或runtime来解析,并获得所有jar,包括可传递的依赖项(在这个示例中,只有ivy的jar)。 使现代化 好的,谢谢你的链接。

  • 问题内容: 我正在尝试使用ant在命令行上生成apk。我可以使用ant clean,但是对于ant调试和ant release命令,我得到以下错误。 建立失败 C:\ Android \ sdk \ tools \ ant \ build.xml:649:执行此行时发生以下错误:C:\ Android \ sdk \ tools \ ant \ build.xml:694:执行失败:java.io

  • 我本来以为是kpi面 没想到问的还挺多 项目 自我介绍 学习路线 为什么做后端 进程和线程的区别 你如何设计线程池 链表和数组的区别(查找和删改时间度不一样) lru算法 (哈希表+双向链表) 为什么虚析构函数(防止内存泄漏) top-k算法 说了快排和小根堆 时间复杂度o(nlogn) 给你两个栈实现并发队列 爱好特长 有没有用过github 总体答的一般...

  • 我正在尝试使用IVY,并且我已经在springsource工具套件中设置了我的IVY-de。 在尝试构建我的工作空间时,我得到了以下错误。 说明资源路径位置类型类路径发布/导出依赖项C:/Users/user1/.ivy2/cache/jstl/jstl.jars/jstl-1.2.jar无效。项目包含另一个具有相同存档名称的依赖项。Web P/Web类路径依赖关系验证器消息 在这方面,我们非常感

  • 我是艾薇的新手,所以这可能已经被报道过了,但是我知道的还不够多。我的搜索结果是空的,没有找到类似的经历。 因此,当我第一次下拉整个项目并且更新库引用时,我有时会收到未解决的依赖项警告。它似乎在随机库上。 例如,我刚刚在某个项目中添加了Commons-codec-1.9,而工作集中的其他项目使用1.6和1.7。当运行盛大的构建脚本时,突然对于1.6和1.7“配置[is]未找到”: 现在,我不完全确定

  • 问题内容: 在定义顺序构建步骤时,我使用元素的属性。我最近看到了一个ant文件,其中的构建顺序是由目标内部的元素定义的。为了显示 : 与 两种方法之间是否有真正的区别?是其中之一更可取吗? 问题答案: 与这两种方法的主要区别在于目标是 始终 执行,而在目标只有在包含目标是执行。 一个澄清的例子: 在这里,将始终执行,而只有在定义时才会执行。 在此,仅当is即定义时才执行。