对于Java库项目,要发布的 Artifact 非常简单,因为输出是单个jar文件。但是,我也有一个项目,其中包含以下内容:

  • MyLib.jar
  • armeabi / libStuff.so
  • armeabi-v7a / libStuff.so
  • mips / libStuff.so
  • x86 / libStuff.so

  • 我无法将所有这些.so文件设置为 Artifact ,因为它们都具有相同的名称。推荐的方法是什么?将所有内容都放在一个zip中,让用户在构建之前使用gradle(或ant或其他工具)将其解压缩吗?我应该将Jar文件放在zip之外吗?是否有此类 Artifact 的约定?

    最佳答案

    使用Ivy管理许多“相同” Artifact 的最佳方法是使用extra attributes,唯一的区别是架构。

    因此,在您的模块中,您将声明:

    <publications xmlns:e="http://ant.apache.org/ivy/extra">
        <artifact name="MyLib" type="jar" ext="jar" />
        <artifact name="libStuff" type="native" ext="so" e:arch="armeabi" />
        <artifact name="libStuff" type="native" ext="so" e:arch="armeabi-v7a" />
        <artifact name="libStuff" type="native" ext="so" e:arch="mips" />
        <artifact name="libStuff" type="native" ext="so" e:arch="x86" />
    </publications>
    

    缺点是您在常春藤周围的整个链式店都必须考虑到该额外属性。例如,您应该能够配置您的存储库,使其接受这样的自定义模式:
    ${repository.dir}/[organisation]/[module]/[arch]/[revision]/[artifact].[ext]
    

    正如您提到的,另一种解决方案是使用zip文件夹。这可能是一个很好的时机,因为即将发布的Ivy 2.4通过packaging支持压缩文件夹。

    例如,您可以声明:
    <publications xmlns:e="http://ant.apache.org/ivy/extra">
        <artifact name="MyLib" type="jar" ext="jar" />
        <artifact name="libStuff" type="natives" ext="zip" packaging="zip" />
    </publications>
    

    然后,Ivy将libStuff-1.2.3.zip下载到其缓存中,并将其自动解压缩到缓存中的libStuff-1.2.3文件夹中,您可以在其中找到几个本机库。

    10-08 09:07