Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从按分类器构建的Maven依赖项中排除某些.jar_Java_Maven_Jar_War_Nd4j - Fatal编程技术网

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

Java 从按分类器构建的Maven依赖项中排除某些.jar,java,maven,jar,war,nd4j,Java,Maven,Jar,War,Nd4j,我的项目包括nd4j本机平台依赖项,其中包括适用于windows、linux和mac的.jars。该应用程序是在windows/mac计算机上开发的,然后部署到Linux上,因此我想通过排除在.war构建时占用>400 MB的其他平台jar来节省部署空间。Tl;dr,我想排除所有不以linux-x86_64结尾的.jar pom中的依赖项: <dependency> <groupId>org.nd4j</groupId> <artifac

我的项目包括nd4j本机平台依赖项,其中包括适用于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>

org.nd4j
nd4j本机平台
1.0.0-beta7
linux-x86_64
在依赖项标记中,我看不到任何通过分类器排除它们的方法,似乎您只能通过groupId和artifactId排除它们。我还尝试在.war插件中使用PackageExcludes和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.2.3
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

使用Maven 3.6.3.

对于大多数使用JavaCPP的事物,正确的处理方法是设置
JavaCPP.platform
属性

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


您可以尝试运行
mvn-Djavacpp.platform=linux-x86_64 dependency:tree
,查看它是否正常工作。

对于大多数使用JavaCPP的事物,正确的处理方法是设置
JavaCPP.platform
属性

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


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

通过“包含”,您是指可传递的依赖项,还是指jar实际包含其他jar?@JFabianMeier它们通过“包含”进行传递,您是指可传递的依赖项,或者你的意思是这个罐子实际上包含了其他罐子?@JFabianMeier它们是可传递的。不幸的是,这不起作用。当我在linux-x86_64分类器中添加nd4j本机依赖项时,nd4j试图提供“帮助”,但由于我是在windows上构建的,因此仍然只提取windows版本。nd4j本机平台包含所有不同的platforms.jars,因此我必须使用该依赖项,但我不知道如何告诉它排除所有可传递依赖项(即nd4j本机.jars;是的,令人困惑,我知道)除了linux版本之外,您的评论提醒我,实际上有一种正确的方法可以做到这一点,即使用提供平台工件的库将其内置到DL4J和其他javacpp中。我已经相应地更新了我的答案。太好了,可以了,谢谢!如何将该参数添加到pom中?我以为-D参数映射到,但当我在那里添加linux-x86_64时,依赖关系树会返回到所有windows版本。
-D
选项的工作方式是它适用于所有级别和所有依赖关系,而properties标记只适用于当前pom文件及其子文件(声明为其父级的pom文件)。因此,很遗憾,您无法在pom.xml文件中轻松设置。但是,为了获得更多支持pom属性的选项,我们需要创建一个Maven扩展,本质上是Maven的自定义版本:我们可以更轻松地使用Gradle JavaCPP实现这一点:不幸的是,这不起作用与linux-x86_64分类器相关,nd4j试图提供“帮助”,但由于我是在windows上构建的,因此仍然只提取windows版本。nd4j本机平台包含所有不同的平台。JAR,因此我必须使用该依赖关系,但我不知道如何告诉它排除所有可传递的依赖关系(哪些是nd4j本地的。jars;是的,令人困惑,我知道)除了linux版本。你的评论提醒我,实际上有一种正确的方法可以做到这一点,它是使用提供平台工件的库内置到DL4J和其他javacpp中的。我已经相应地更新了我的答案。太好了,这很有效,谢谢!我如何将该参数添加到pom?我认为-D参数映射到了,但是当我添加linux时-x86_64在那里,依赖关系树返回到所有windows版本。
-D
选项的工作方式是,它适用于所有级别和所有依赖关系,而properties标记仅适用于当前pom文件及其子文件(声明为其父级的pom文件)。因此,很遗憾,您无法在pom.xml文件中轻松设置。但是,为了获得更多支持pom属性的选项,我们需要创建一个Maven扩展,本质上是Maven的自定义版本:我们可以更轻松地使用Gradle JavaCPP实现这一点: