我有一个Ant / Ivy构建过程,我正在努力改进。我需要解决依赖关系,然后将它们提取到特定的文件夹。
依赖关系解析为$(build_root)/dependency/downloads/[configuration]/[artifactId]/[version]/
位置,这很好用。我最终在该位置使用.pom
和.tar.bz2
文件。
我想要做的是更多地控制依赖关系.tar.bz2
到目录的提取。我们基本上试图通过控制lib
输出的提取方式和位置来防止依赖性inc
和.tar.bz2
的冲突。
我们目前通过解决所有依赖关系,然后有一个目标来盲目地扩展档案来实现这一目标。
我们的决心步骤如下:
<target name="resolve">
<ivy:retrieve pattern="${dependency.dir}/[conf]/[artifact]/[artifact]-[revision].[ext]" conf="*" />
<condition property="archive.dir.present">
<resourceexists>
<file file="${dependency.dir}"/>
</resourceexists>
</condition>
<antcall if:set="archive.dir.present" target="expand-archives"/>
</target>
请注意单独调用&#34; expand-archives&#34;目标,看起来像:
<target name="expand-archives" description="Expand your Dependency Archives!">
<for param="file">
<path>
<fileset dir="${dependency.dir}" includes="**/*.tar.bz2"/>
</path>
<sequential>
<bunzip2 src="@{file}" dest="${dependency.dir}" />
</sequential>
</for>
<!-- Follow the bunzip2 by the tar command to extract the tarball -->
<for param="file">
<path>
<fileset dir="${dependency.dir}" includes="**/*.tar"/>
</path>
<sequential>
<echo message="Processing: @{file}"/>
<exec executable="tar" failonerror="true">
<arg value="-C"/>
<arg value="${dependency.dir}"/>
<arg value="-xvf"/>
<arg value="@{file}"/>
</exec>
</sequential>
</for>
</target>
我希望拥有的是dest="${dependency.dir}
附加了依赖关系的artifactID。
有没有办法从检索中获取[artifact]
信息并将其传递到expand-archives
目标?
谢谢
答案 0 :(得分:0)
如果您对档案中的文件有依赖关系,也许您应该调查常春藤中的packager resolver。
此解析程序旨在下载+解压缩档案,然后使用ANT片段决定您要依赖的文件。乍一看很复杂,但一旦理解得非常强大。
以下示例显示如何依赖jar,包含在可下载的“.tar.gz”存档中: