我正在尝试解决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文件将大大简化,如果我们可以将提取过程分解为工件本身的属性。
因此,我的想法是使用工件
标记上的extra
attribute来“注入”此信息并覆盖
搜索此属性。
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 的触发器
上使用额外
属性的任何提示/建议/示例?
最后,我向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)。 使现代化 好的,谢谢你的链接。
我正在尝试使用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在命令行上生成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 总体答的一般...
2024.3.11 一面 聊项目并进行延伸 coding: 旋转数组最大值 2024.3.22 二面 聊项目,聊offer情况 coding: 手写kmeans 2024.4.3 HR面 聊实习经历,offer情况 2024.4.10 意向 2024.4.15 offer