gpt4 book ai didi

java - 如何防止 maven- assembly-plugin 以疯狂的方式从 dependencySet 复制 natives-* 分类器

转载 作者:太空宇宙 更新时间:2023-11-04 15:21:06 24 4
gpt4 key购买 nike

我有一个具有以下结构的项目:

.
├── bundleA
│   ├── pom.xml
│   └── src
├── bundleB
│   ├── pom.xml
│   └── src
├── distribution
│   ├── pom.xml
│   └── src
│   └── assemble
│   └── example.xml
└── pom.xml

bundleAbundleB poms 很简单,不会影响此问题。

分发pom.xml:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>testproject</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.example</groupId>
<artifactId>distribution</artifactId>
<version>1.0-SNAPSHOT</version>
<name>distribution</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.lwjgl.lwjgl</groupId>
<artifactId>lwjgl</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>distro-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/assemble/example.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

example.xml 程序集描述符:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>example</id>
<formats>
<format>dir</format>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<includes>
<include>org.lwjgl.lwjgl:lwjgl</include>
</includes>
<outputDirectory>/libs</outputDirectory>
<unpack>false</unpack>
</dependencySet>
</dependencySets>
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>com.example:bundleA</include>
<include>com.example:bundleB</include>
</includes>
<binaries>
<outputDirectory>/bundles</outputDirectory>
<unpack>false</unpack>
</binaries>
</moduleSet>
</moduleSets>
</assembly>

这里的问题:当我将 lwjgl (或几乎任何其他带有打包在分类子项目中的 native 库的项目)包含到 distribution 项目的依赖项中并在程序集描述符中引用它时 - 我得到分发构建后的疯狂:

distribution/target/distribution-1.0-SNAPSHOT-example
├── bundles
│   ├── bundleA-1.0-SNAPSHOT-natives-linux.jar
│   ├── bundleA-1.0-SNAPSHOT-natives-osx.jar
│   ├── bundleA-1.0-SNAPSHOT-natives-windows.jar
│   ├── bundleA-1.0-SNAPSHOT.jar
│   ├── bundleB-1.0-SNAPSHOT-natives-linux.jar
│   ├── bundleB-1.0-SNAPSHOT-natives-osx.jar
│   ├── bundleB-1.0-SNAPSHOT-natives-windows.jar
│   └── bundleB-1.0-SNAPSHOT.jar
└── libs
└── lwjgl-2.9.0.jar

换句话说,lwjgl 的每个本地 * 分类子项目都会根据我项目中的包数量神奇地复制为唯一的名称(但 jar 的大小和内容完全相同),这太疯狂了。

我想要的是一种指定 lwjgl 平台无关的 jar 的方法(不包含 native )或某种其他方法来从生成的分发中排除此 native -* jar。

这个项目在 github 上:https://github.com/iamtakingiteasy/maven-assembly-plugin-insanity

最佳答案

嗯,这可能不是最好或直接的解决方案,但使用

<moduleSets>
<moduleSet>
...
<binaries>
...
<includeDependencies>false</includeDependencies>
...
</binaries>
...
</moduleSet>
</moduleSets>

似乎有帮助。关键是开始查看捆绑选项,而不是尝试对 lwjgl 本身做一些事情。

此外,直接排除 * 平台依赖项(再次在 bundle 部分中)可能是解决方案:

<moduleSets>
<moduleSet>
...
<binaries>
...
<excludes>
<exclude>org.lwjgl.lwjgl:lwjgl-platform</exclude>
<exclude>net.java.jinput:jinput-platform</exclude>
</excludes>
...
</binaries>
...
</moduleSet>
</moduleSets>

关于java - 如何防止 maven- assembly-plugin 以疯狂的方式从 dependencySet 复制 natives-* 分类器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20380273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com