首页 > 解决方案 > 未使用的类未打包在 Maven 多模块项目中

问题描述

我将 Maven 3.6.2 与多模块 Java 项目一起使用。example模块依赖于core模块,所以我在example模块的 POM 中有这样的依赖:

<dependency>
    <groupId>com.company</groupId>
    <artifactId>core</artifactId>
    <version>${project.version}</version>
</dependency>

问题是当我运行时,并非模块中的所有类core都被打包到examplejar 中mvn clean install。只有example项目中使用的类被打包。我需要为以后的过程打包所有类。

我正在使用maven-shade-plugin这个配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.1</version>
    <configuration>
        <createDependencyReducedPom>false</createDependencyReducedPom>
        <minimizeJar>true</minimizeJar>
        <filters>
            <filter>
                <artifact>*:*</artifact>
                <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                    <exclude>module-info.class</exclude>
                </excludes>
            </filter>
        </filters>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <finalName>${project.name}</finalName>
            </configuration>
        </execution>
    </executions>
</plugin>

如何在 jar 中包含core模块中的所有类,example而不必在 jar 中使用它们example

标签: javamaven

解决方案


问题是minimizeJar参数。根据https://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html#minimizeJar

当为 true 时,依赖项将在类级别上被剥离为仅工件所需的传递外壳。

我删除了该参数,它按预期工作。


推荐阅读