maven-assembly-plugin 和 jar 名称冲突
maven-assembly-plugin and jar name conflict
我有一个项目有两个依赖项(第三方库),不幸的是它们的名称和版本相同:
pom.xml:
<dependencies>
<dependency>
<groupId>a</groupId>
<artifactId>artifact</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>b</groupId>
<artifactId>artifact</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
两个依赖项具有相同的 artifactId
和 version
,但不同 groupId
。
我需要为我的项目创建一个分发包。必须将所有依赖项复制到 lib/
文件夹。这是 maven-assembly-plugin
、assembly.xml:
的最小配置
<id>package</id>
<formats>
<format>dir</format>
</formats>
<baseDirectory>/</baseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
因此,两个依赖项都应复制到 zip 存档内的 lib/
,但实际上只有一个工件存在:
$ find target/project-1.0-SNAPSHOT-package/
target/project-1.0-SNAPSHOT-package/
target/project-1.0-SNAPSHOT-package/lib
target/project-1.0-SNAPSHOT-package/lib/artifact-1.0-SNAPSHOT.jar
作为可能的解决方案之一,jar 文件名应包含 groupId
- 这样名称冲突就会消失。
所以问题是:如何配置 maven-assembly-plugin
(或其他插件)以将这两个依赖项包含到我的分发存档中?
尝试在依赖集中设置 outputFileNameMapping
以包含组 ID:
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<outputFileNameMapping>${artifact.groupId}-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
</dependencySet>
我有一个项目有两个依赖项(第三方库),不幸的是它们的名称和版本相同:
pom.xml:
<dependencies>
<dependency>
<groupId>a</groupId>
<artifactId>artifact</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>b</groupId>
<artifactId>artifact</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
两个依赖项具有相同的 artifactId
和 version
,但不同 groupId
。
我需要为我的项目创建一个分发包。必须将所有依赖项复制到 lib/
文件夹。这是 maven-assembly-plugin
、assembly.xml:
<id>package</id>
<formats>
<format>dir</format>
</formats>
<baseDirectory>/</baseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
因此,两个依赖项都应复制到 zip 存档内的 lib/
,但实际上只有一个工件存在:
$ find target/project-1.0-SNAPSHOT-package/
target/project-1.0-SNAPSHOT-package/
target/project-1.0-SNAPSHOT-package/lib
target/project-1.0-SNAPSHOT-package/lib/artifact-1.0-SNAPSHOT.jar
作为可能的解决方案之一,jar 文件名应包含 groupId
- 这样名称冲突就会消失。
所以问题是:如何配置 maven-assembly-plugin
(或其他插件)以将这两个依赖项包含到我的分发存档中?
尝试在依赖集中设置 outputFileNameMapping
以包含组 ID:
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<outputFileNameMapping>${artifact.groupId}-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
</dependencySet>