Java 如何使用Ivy发布本机库?

Java 如何使用Ivy发布本机库?,java,gradle,native,ivy,Java,Gradle,Native,Ivy,对于Java库项目,要发布的工件非常简单,因为输出是一个jar文件。但是,我还有一个项目要发布以下内容: MyLib.jar armeabi/libStuff.so armeabi-v7a/libStuff.so mips/libStuff.so x86/libStuff.so 我无法将所有这些.so文件都设置为工件,因为它们都具有相同的名称。推荐的方法是什么?将所有内容放在一个zip中,让用户在构建之前使用gradle(或ant或其他任何东西)解压?我应该把Jar文件从zip文件中放在一边

对于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>
<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>

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

例如,您可以声明:

<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>
<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
文件夹中,您可以在其中找到您的几个本地图书馆。

非常感谢!实际上,我们试图用所有项目的工件(java、C++、C、C++…)填充一个Nexus服务器,在一些服务器中,我们确实需要保持目录层次结构。因此,常春藤的“包装”功能似乎非常有趣!