如果是 Spring Boot 项目结构是通过父子工程来管理,就可能有多个层级结构,工程之前存在依赖关系,如果所依赖的包被打包 spring boot 的可执行 jar,则该工程中启动时就会报找不到类的异常。

此时需要将所依赖的包打包普通 jar 包,就不要执行 spring-boot.repackage 操作。如下操作:

mvn clean package -Dspring-boot.repackage.skip=true

或在 pom.xml 文件中配置将是否打成执行 jar 包配置为参数项,默认为 false(即插件默认的打可执行 jar),外部执行 mvn package 传入该参数值。如下示例:

<project>
    <properties>
        <provider.package>false</provider.package>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <skip>${provider.package}</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

执行 mvn 命令,并传入 provider.package 参数

mvn clean package  file-server -Dprovider.package=true

上面配置等同于:

<project>
    <properties>
        <provider.package>false</provider.package>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <configuration>
                            <skip>${provider.package}</skip>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>