删除maven程序集中jar的所有依赖项

时间:2016-10-31 08:11:17

标签: java maven zip

我正在尝试创建一个包含两个文件夹的zip文件,每个文件夹将包含一个pom中某个依赖项的插件。我目前能够创建正确的结构,但我想确保第一个依赖的jar例如不属于第二个依赖的jar。 我目前的pom结构如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>PARENT-GROUP</groupId>
        <artifactId>PARENT-ARTIFACT</artifactId>
        <version>0.2.0-SNAPSHOT</version>
    </parent>
    <groupId>GROUP-ID</groupId>
    <artifactId>ARTIFACT-ID</artifactId>

    <properties>
        <main.project>MAIN-PROJECT</main.project>
        <plugin.version>0.0.1-SNAPSHOT</plugin.version>
        <plugin.artifact>PLUGIN-ID</plugin.artifact>
    </properties>

    <dependencies>
        <dependency>
            <groupId>PLUGIN-GROUP</groupId>
            <artifactId>${plugin.artifact}</artifactId>
            <version>${plugin.version}</version>
        </dependency>
        <dependency>
            <groupId>SECOND-DEPENDENCY</groupId>
            <artifactId>SECOND-ARTIFACT-ID</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>${main.project}-${project.parent.version}</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <descriptor>${project.basedir}/src/zip.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

可以看出,我在pom中有两个依赖关系。我想要的输出是以下文件夹结构 main \ lib:包含第二个依赖jar,它包含同一文件夹中的所有依赖项。 main \ plugin \ plugin:包含所有第一个依赖项(插件及其所有依赖项),两个文件夹不应包含第一个依赖项,反之亦然。到目前为止,我已经提出了以下程序集xml

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>release</id>
    <formats>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <unpack>false</unpack>
            <useProjectArtifact>false</useProjectArtifact>
            <excludes>
                <exclude>
                    *:${plugin.artifact}
                </exclude>
            </excludes>
        </dependencySet>
        <dependencySet>
            <outputDirectory>/plugins/${plugin.artifact}-${plugin.version}/${plugin.artifact}-${plugin.version}</outputDirectory>
            <unpack>false</unpack>
            <useProjectArtifact>false</useProjectArtifact>
            <excludes>
                <exclude>
                    *:SECOND-ARTIFACT-ID
                </exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>  

这给了我写文件夹结构,但是包含两者中的依赖关系我想知道是否有更好的方法来自动排除每个jar的依赖关系而不是逐个排除它们

1 个答案:

答案 0 :(得分:1)

如果他们正在寻找解决方案,请帮助其他人。您需要执行的只是在dependencySet中添加额外标记用户传递过滤并将其设置为true。

<dependencySet>
    <outputDirectory>/lib</outputDirectory>
    <unpack>false</unpack>
    <useProjectArtifact>false</useProjectArtifact>
    <useTransitiveFiltering>true</useTransitiveFiltering>
    <excludes>
        <exclude>
            *:${plugin.artifact}
        </exclude>
    </excludes>
</dependencySet>

这将确保过滤依赖关系。