如何使用常春藤发布本地库?

时间:2014-01-13 07:46:35

标签: java gradle native ivy

对于Java库项目,要发布的工件很简单,因为输出是单个jar文件。但是,我还有一个项目,要发布以下内容:

  • MyLib.jar
  • armeabi / libStuff.so
  • armeabi-V7A / libStuff.so
  • MIPS / libStuff.so
  • 86 / libStuff.so

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

1 个答案:

答案 0 :(得分:3)

Ivy管理许多“同样”工件的最佳方法是使用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>

缺点是你在Ivy周围的整个链条都必须考虑到这个额外的属性。例如,您应该能够配置您的存储库,以便它接受像这样的自定义模式:

${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的缓存中,在该文件夹中可以找到您的多个本地库。