首页 文章

如何使用maven程序集插件从依赖jar中排除一个包?

提问于
浏览
3

我正在使用maven程序集插件来打包我的项目的发行版,其中包含一个带有依赖项jar的lib文件夹,一个包含资源的配置文件夹和包含项目类文件的jar文件 . 我需要从lib文件夹中的一个依赖项jar中排除一个包 .

程序集插件有一个解压缩依赖项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)?理想情况下,我想要一个可以使用程序集插件完成的解决方案 - 如果不可能,那么实现我想做的最简单的方法是什么?

1 回答

  • 1

    在解压缩和过滤后,我认为你不能重新包装JAR . 您可以在Maven Assembly Plugin JIRA提交增强请求 .


    一个(复杂的)解决方法是使用 maven-dependency-pluginunpack项目的依赖项,你要从中排除某些东西,然后再次使用 maven-jar-pluginjar这些类,不包括新JAR中的包,最后为 maven-assembly-pluginmaven-assembly-plugin 声明一个 <files> 元素特别的依赖 .

    样本配置将是

    <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>
    

相关问题