如何使用 Maven 程序集插件从依赖 jar 中排除包?
How to use maven assembly plugin to exclude a package from dependency jar?
我正在使用 Maven 程序集插件来打包我的项目的分发,其中包含一个带有依赖项 jar 的 lib 文件夹、一个带有资源的配置文件夹和包含项目 class 文件的 jar 文件。我需要从 lib 文件夹中的一个依赖项 jar 中排除一个包。
assembly 插件有一个解压依赖 jar 的选项,如果使用这个选项,那么你可以像这样排除带有 assembly.xml 的包:
<assembly>
<formats>
<format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>./${project.build.finalName}/lib</outputDirectory>
<scope>runtime</scope>
<unpackOptions>
<excludes>
<exclude>**/excludedpackage/**<exclude>
</excludes>
</unpackOptions>
</dependencySet>
</dependencySets>
</assembly>
我的问题是,如何在不使用 unpack 的情况下从依赖项 jar 中排除包(即将所有依赖项打包为 jar)?理想情况下,我想要一个可以使用程序集插件完成的解决方案 - 如果这不可能,那么实现我想要做的事情的最简单方法是什么?
我认为您不能在解压和过滤后重新打包 JAR。您可以在 Maven Assembly Plugin JIRA.
提交增强请求
一个(复杂的)解决方法是再次使用 maven-dependency-plugin
到 unpack the project's dependency that you want to exclude something from, then use the maven-jar-plugin
to jar 类 排除新 JAR 中的包,最后声明一个 <files>
元素对于该特定依赖项的 maven-assembly-plugin
。
示例配置为
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>unpack</id>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<includeArtifactIds><!-- include here the dependency you want to exclude something from --></includeArtifactIds>
<outputDirectory>${project.build.directory}/unpack/temp</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>repack</id>
<goals>
<goal>jar</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<classesDirectory>${project.build.directory}/unpack/temp</classesDirectory>
<excludes>
<exclude>**/excludedpackage/**</exclude>
</excludes>
<outputDirectory>${project.build.directory}/unpack</outputDirectory>
<finalName>wonderful-library-repackaged</finalName> <!-- give a proper name here -->
</configuration>
</execution>
</executions>
</plugin>
然后在您的程序集配置中,您将拥有:
<files>
<file>
<source>${project.build.directory}/unpack/wonderful-library-repackaged.jar</source>
<outputDirectory>/${project.build.finalName}/lib</outputDirectory>
</file>
</files>
我正在使用 Maven 程序集插件来打包我的项目的分发,其中包含一个带有依赖项 jar 的 lib 文件夹、一个带有资源的配置文件夹和包含项目 class 文件的 jar 文件。我需要从 lib 文件夹中的一个依赖项 jar 中排除一个包。
assembly 插件有一个解压依赖 jar 的选项,如果使用这个选项,那么你可以像这样排除带有 assembly.xml 的包:
<assembly>
<formats>
<format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>./${project.build.finalName}/lib</outputDirectory>
<scope>runtime</scope>
<unpackOptions>
<excludes>
<exclude>**/excludedpackage/**<exclude>
</excludes>
</unpackOptions>
</dependencySet>
</dependencySets>
</assembly>
我的问题是,如何在不使用 unpack 的情况下从依赖项 jar 中排除包(即将所有依赖项打包为 jar)?理想情况下,我想要一个可以使用程序集插件完成的解决方案 - 如果这不可能,那么实现我想要做的事情的最简单方法是什么?
我认为您不能在解压和过滤后重新打包 JAR。您可以在 Maven Assembly Plugin JIRA.
提交增强请求一个(复杂的)解决方法是再次使用 maven-dependency-plugin
到 unpack the project's dependency that you want to exclude something from, then use the maven-jar-plugin
to jar 类 排除新 JAR 中的包,最后声明一个 <files>
元素对于该特定依赖项的 maven-assembly-plugin
。
示例配置为
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>unpack</id>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<includeArtifactIds><!-- include here the dependency you want to exclude something from --></includeArtifactIds>
<outputDirectory>${project.build.directory}/unpack/temp</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>repack</id>
<goals>
<goal>jar</goal>
</goals>
<phase>prepare-package</phase>
<configuration>
<classesDirectory>${project.build.directory}/unpack/temp</classesDirectory>
<excludes>
<exclude>**/excludedpackage/**</exclude>
</excludes>
<outputDirectory>${project.build.directory}/unpack</outputDirectory>
<finalName>wonderful-library-repackaged</finalName> <!-- give a proper name here -->
</configuration>
</execution>
</executions>
</plugin>
然后在您的程序集配置中,您将拥有:
<files>
<file>
<source>${project.build.directory}/unpack/wonderful-library-repackaged.jar</source>
<outputDirectory>/${project.build.finalName}/lib</outputDirectory>
</file>
</files>