Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ant ApacheIvy:解析嵌入在安装程序中的依赖项_Ant_Build_Build Automation_Dependencies_Ivy - Fatal编程技术网

Ant ApacheIvy:解析嵌入在安装程序中的依赖项

Ant ApacheIvy:解析嵌入在安装程序中的依赖项,ant,build,build-automation,dependencies,ivy,Ant,Build,Build Automation,Dependencies,Ivy,我有一个构建问题,我必须通过ApacheIvy解决非标准工件 问题: 我依赖于两个工件(a.jar和a-lib.jar) 这两个依赖项仅作为单个安装程序(a_installer.jar)的一部分 安装程序可以下载,嵌入的工件本身不能 可以操纵安装程序来解压缩所需的依赖项 要求: 我必须在构建过程中解析/下载工件(我不能将安装程序或提取的工件与代码一起保存) 我不能使用存储库来存储提取的工件 分类/扩展常春藤/任何东西都很好 有没有人解决过类似的问题,或者分享一些有用的信息 或者我处理问题

我有一个构建问题,我必须通过ApacheIvy解决非标准工件

问题:

  • 我依赖于两个工件(a.jar和a-lib.jar)
  • 这两个依赖项仅作为单个安装程序(a_installer.jar)的一部分
  • 安装程序可以下载,嵌入的工件本身不能
  • 可以操纵安装程序来解压缩所需的依赖项
要求:

  • 我必须在构建过程中解析/下载工件(我不能将安装程序或提取的工件与代码一起保存)
  • 我不能使用存储库来存储提取的工件
  • 分类/扩展常春藤/任何东西都很好
有没有人解决过类似的问题,或者分享一些有用的信息

或者我处理问题的方式不对?从我目前在网上发现的情况来看,人们似乎只是使用Ivy下载文件并在事后手动(使用Ant/任何工具)对其进行后期处理,而不是实际解决Ivy中更复杂的依赖关系

谢谢


PS:我不在乎安装程序是否也被放入常春藤下载缓存中,但我只想下载一次安装程序(而不是两个依赖项)。

我认为这非常简单:“常春藤:检索”一个安装程序,然后将a.j和a-lib解压到你的lib目录中(或任何你想要的地方)。这应该很容易做到与蚂蚁


我想知道是否有一些您没有提到的复杂情况阻止了您这样做。

调用“ivy:retrieve”的问题是,您还需要在ivy.xml中添加一个“artifact”标记(包括URL),以便检索Maven respository中未找到的依赖项

我不喜欢这个有两个原因

  • xml应该只声明依赖项,而不是它们的位置
  • 需要build.xml中的附加自定义逻辑来处理第三方包
  • 理想情况下,应该是您的存储库设置决定如何下载各种JAR,这就是为什么我喜欢packager解析器。即使我想要的库不在Maven中,我也可以配置ivy来处理它

    下面是一个将项目转换为常春藤依赖项的示例(托管在sourceforge中,我在Maven中找不到它)

    ivy.xml:

    
    
    声明两个解析器。默认值是Maven2,另一个是配置为在本地查找指令的打包机。(另见常春藤综合项目)

    ivysettings.xml

    
    
    魔法包含在“packager”文件中。在解析时,这将用于生成一个ANT脚本,用于下载和提取所需的JAR。 (无需将此逻辑放入build.xml中)

    repository/ch.oscg/jreleaseinfo/1.3.0/packager.xml

    
    

    为了减少文件数量,我省略了模块的ivy.xml。这似乎是可选的,除非您要声明其许可证和其他属性,这些属性应该存在于公共存储库中。

    IvyRoundup是一种公共打包机回购。但包装商正是我们要走的路。
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <ivy-module version="2.0">
        <info organisation="com.myspotontheweb" module="ivy_packager"/>
        <dependencies>
            <dependency org="ch.oscg" name="jreleaseinfo" rev="1.3.0"/>
        </dependencies>
    </ivy-module>
    
    <ivysettings>
        <settings defaultResolver="maven2"/>
        <resolvers>
            <ibiblio name="maven2" m2compatible="true"/>
    
            <packager name="repackage" buildRoot="${user.home}/.ivy2/packager/build" resourceCache="${user.home}/.ivy2/packager/cache">
                <ivy pattern="file:///${basedir}/repository/[organisation]/[module]/[revision]/ivy.xml"/>
                <artifact pattern="file:///${basedir}/repository/[organisation]/[module]/[revision]/packager.xml"/>
            </packager>
        </resolvers>
        <modules>
            <module organisation="ch.oscg" name="jreleaseinfo" resolver="repackage"/>
        </modules>
    </ivysettings>
    
    <packager-module version="1.0">
    
        <property name="name" value="${ivy.packager.module}"/>
        <property name="version" value="${ivy.packager.revision}"/>
        <property name="zipname" value="${name}-${version}"/>
    
        <resource dest="archive" url="http://sourceforge.net/projects/jreleaseinfo/files/jreleaseinfo/jreleaseinfo%201.3.0/jreleaseinfo-1.3.0.zip/download" sha1="9386d92758e627d04c2480b820731fd538b13a3f" type="zip"/>
    
        <build>
    
            <move file="archive/${zipname}/${zipname}.jar" tofile="artifacts/jars/${name}.jar"/>
    
        </build>
    </packager-module>