1 spring-starter 排除所有
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.1.0</version><executions><execution><id>attach-sources</id><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin></plugins></build>
2 spring-starter 本身就是一套脚手架,最好是传递依赖,那么spring-starter 就需要明确指定 version 版本
<?xml version="1.0" encoding="UTF-8"?><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><groupId>com.pandora</groupId><artifactId>minio-spring-starter</artifactId><version>1.2.5</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>7.1.2</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.1.0</version><!--<executions><execution><id>attach-sources</id><goals><goal>jar-no-fork</goal></goals></execution></executions>--></plugin></plugins></build></project>
3 maven 相关的排除
参考:
Maven打包SpringBoot项目,排除第三方依赖包
maven打包时去除不需要的jar包策略
简单说,就是 scope 节点元素的使用, compile,provided,runtime,system,test;以及 optional 元素的使用。另外就是 exclusion。
maven的dependency中有一个tag是<scope>option</scope>,其option有以下几个值:compile, 缺省值,适用于所有阶段,会随着项目一起发布。provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet-api-2.3.jar。runtime, 在运行时使用,如JDBC驱动,适用运行和测试阶段。 如plexus-utils-1.1.jartest 只在测试时使用,用于编译和运行测试代码。不会随项目发布。如Junit-3.8.1.jarsystem, 类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。加上<optional>true</optional>,这样可以使引用这些jar的项目不会产生传递依赖。
<plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>${java.version}</source><target>${java.version}</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><!-- 跳过单元测试 --><skipTests>true</skipTests></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><!-- 复制第三方 jar 到项目目录下的 target/lib/ 下 --><execution><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/lib</outputDirectory><excludeScope>provided</excludeScope></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><!-- 指定 Spring Boot 启动类,实际测试中必须 --><mainClass>${project.main.class}</mainClass><!-- 将所有第三方 jar 添加到项目 jar 的 MANIFEST.MF 文件中,这样运行 jar 时依赖包才能被加载 --><addClasspath>true</addClasspath><!-- 指定复制第三方 jar 的目标目录为 target/lib/--><classpathPrefix>./lib/</classpathPrefix></manifest></archive></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- repackage 时排除掉 第三方依赖 jar 文件,我们的可运行 Spring Boot 的 jar 文件瞬间变小 ^_^ --><executions><execution><goals><goal>repackage</goal></goals></execution></executions><configuration><includes><include><groupId>nothing</groupId><artifactId>nothing</artifactId></include></includes></configuration></plugin></plugins>
4 排除文件
<build><resources><resource><directory>src/main/java</directory><!-- 包含 --><includes><include>**/*.vm</include><include>**/*.properties</include></includes><!-- 排除 --><excludes><exclude>**/*.log</exclude></excludes></resource><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/*.*</include></includes><excludes><exclude>**/*.log</exclude></excludes></resource></resources></build>
