对于 Java 库项目,要发布的工件非常简单,因为输出是单个 jar 文件。但是,我还有一个包含以下内容的项目要发布:
- MyLib.jar
- armeabi/libStuff.so
- armeabi-v7a/libStuff.so
- mips/libStuff.so
- x86/libStuff.so
我无法将所有这些 .so 文件设置为工件,因为它们都具有相同的名称。推荐的路线是什么?将所有内容放入 zip 中,并让用户在构建之前使用 gradle(或 ant 或其他)将其解压缩?我应该将 Jar 文件放在 zip 旁边吗?此类工件有约定吗?
使用 Ivy 管理许多“相同”工件(唯一的区别是架构)的最佳方法是使用额外属性.
因此,在您的模块中您将声明:
<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 通过以下方式支持压缩文件夹包装.
例如你可以声明:
<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
,您可以在其中找到几个本机库的文件夹。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)