當要把依賴包打包進 jar 時,自己重寫了某些依賴包的類,這時會被依賴包的類覆蓋(相當於被還原了)
使用 maven-shade-plugin 打包可以排除掉依賴包中的一些類或文件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <!--自己項目的啟動類--> <mainClass>org.apache.catalina.startup.Tomcat</mainClass> </transformer> </transformers> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/**</exclude> <exclude>META-INF/*.*</exclude> <exclude>META-INF/**/*.*</exclude> <exclude>**/module-info.*</exclude> </excludes> </filter> <filter> <!--這里重寫了 tomcat-embed-core 包的 Tomcat 類--> <!--就讓 tomcat-embed-core 包的 Tomcat 類在打包時排除,讓自己寫的不被覆蓋--> <artifact>org.apache.tomcat.embed:tomcat-embed-core</artifact> <excludes> <exclude>org/apache/catalina/startup/Tomcat*.*</exclude> </excludes> </filter> </filters> <shadedArtifactAttached>true</shadedArtifactAttached> <!--生成 jar 包的名稱后綴--> <shadedClassifierName>jar-with-dependencies</shadedClassifierName> <!--是否不打包沒有用到的類,可能會有問題,可以自己測試精簡后是否正常運行--> <!--<minimizeJar>true</minimizeJar>--> </configuration> </execution> </executions> </plugin>