从分类器构建的 Maven 依赖项中排除某些 .jars

时间:2020-12-21 14:06:44

标签: java maven jar war nd4j

我的项目包括 nd4j-native-platform 依赖项,其中包括适用于 windows、linux 和 mac 的 .jars。该应用程序是在 windows/mac 机器上开发的,然后部署到 Linux,所以我想通过排除这些在构建 .war 时占用 > 400 MB 的其他平台 jar 来节省部署空间。 Tl;dr,我想排除所有不以 linux-x86_64 结尾的 .jar。

依赖于pom:

<dependency>
    <groupId>org.nd4j</groupId>
    <artifactId>nd4j-native-platform</artifactId>
    <version>1.0.0-beta7</version>
    <classifier>linux-x86_64</classifier>
</dependency>

我看不出有任何方法可以通过依赖项标签中的分类器排除它们,看来您只能通过 groupId 和 artifactId 排除它们。我还尝试在 .war 插件中使用 PackagingExcludes 和 warSourceExcludes,但这没有任何作用:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.3</version>
    <configuration>
        <packagingExcludes>
            WEB-INF/lib/nd4j-native-1.0.0-beta7-windows-x86_64.jar,
            WEB-INF/lib/nd4j-native-1.0.0-beta7-android-x86.jar,
            WEB-INF/lib/nd4j-native-1.0.0-beta7-macosx-x86_64.jar,
            WEB-INF/lib/nd4j-native-1.0.0-beta7-android-x86_64.jar,
            WEB-INF/lib/nd4j-native-1.0.0-beta7-linux-ppc64le.jar,
            WEB-INF/lib/nd4j-native-1.0.0-beta7-android-arm64.jar,
            WEB-INF/lib/nd4j-native-1.0.0-beta7-android-arm.jar,
            WEB-INF/lib/openblas-0.3.9-1-1.5.3-windows-x86_64.jar,
            WEB-INF/lib/nd4j-native-1.0.0-beta7-linux-armhf.jar,
            WEB-INF/lib/openblas-0.3.9-1-1.5.3-windows-x86.jar,
            WEB-INF/lib/openblas-0.3.9-1-1.5.3-windows-x86.jar,
            WEB-INF/lib/openblas-0.3.9-1-1.5.3-linux-armhf.jar,
            WEB-INF/lib/openblas-0.3.9-1-1.5.3-linux-ppc64le.jar,
            WEB-INF/lib/openblas-0.3.9-1-1.5.3-linux-arm64.jar
        </packagingExcludes>
    </configuration>
</plugin>

使用 Maven 3.6.3。

1 个答案:

答案 0 :(得分:2)

对于大多数使用 JavaCPP 的事情来说,处理这个问题的正确方法是设置 javacpp.platform 属性。

使用 mvn -Djavacpp.platform=linux-x86_64 构建时,您只会获得该特定平台,而没有其他任何内容。这也适用于所有其他传递依赖,例如opencv。

您可以尝试运行 mvn -Djavacpp.platform=linux-x86_64 dependency:tree 以查看它是否有效。