1 spring-starter 排除所有


attach-sources

jar-no-fork

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-source-plugin</artifactId>
  6. <version>3.1.0</version>
  7. <executions>
  8. <execution>
  9. <id>attach-sources</id>
  10. <goals>
  11. <goal>jar-no-fork</goal>
  12. </goals>
  13. </execution>
  14. </executions>
  15. </plugin>
  16. </plugins>
  17. </build>

2 spring-starter 本身就是一套脚手架,最好是传递依赖,那么spring-starter 就需要明确指定 version 版本

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.pandora</groupId>
  7. <artifactId>minio-spring-starter</artifactId>
  8. <version>1.2.5</version>
  9. <parent>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-parent</artifactId>
  12. <version>2.3.2.RELEASE</version>
  13. </parent>
  14. <dependencies>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-configuration-processor</artifactId>
  18. <optional>true</optional>
  19. </dependency>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-autoconfigure</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>io.minio</groupId>
  26. <artifactId>minio</artifactId>
  27. <version>7.1.2</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>ch.qos.logback</groupId>
  31. <artifactId>logback-classic</artifactId>
  32. <version>1.2.3</version>
  33. </dependency>
  34. </dependencies>
  35. <build>
  36. <plugins>
  37. <plugin>
  38. <groupId>org.apache.maven.plugins</groupId>
  39. <artifactId>maven-source-plugin</artifactId>
  40. <version>3.1.0</version>
  41. <!--
  42. <executions>
  43. <execution>
  44. <id>attach-sources</id>
  45. <goals>
  46. <goal>jar-no-fork</goal>
  47. </goals>
  48. </execution>
  49. </executions>
  50. -->
  51. </plugin>
  52. </plugins>
  53. </build>
  54. </project>

${groupId}
${artifactId}
${version,必须明确指定}

3 maven 相关的排除

参考:
Maven打包SpringBoot项目,排除第三方依赖包
maven打包时去除不需要的jar包策略

简单说,就是 scope 节点元素的使用, compile,provided,runtime,system,test;以及 optional 元素的使用。另外就是 exclusion。

  1. mavendependency中有一个tag是<scope>option</scope>,其option有以下几个值:
  2. compile 缺省值,适用于所有阶段,会随着项目一起发布。
  3. provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet-api-2.3.jar
  4. runtime 在运行时使用,如JDBC驱动,适用运行和测试阶段。 plexus-utils-1.1.jar
  5. test 只在测试时使用,用于编译和运行测试代码。不会随项目发布。如Junit-3.8.1.jar
  6. system 类似provided,需要显式提供包含依赖的jarMaven不会在Repository中查找它。
  7. 加上<optional>true</optional>,这样可以使引用这些jar的项目不会产生传递依赖。
  1. <plugins>
  2. <plugin>
  3. <artifactId>maven-compiler-plugin</artifactId>
  4. <configuration>
  5. <source>${java.version}</source>
  6. <target>${java.version}</target>
  7. <encoding>UTF-8</encoding>
  8. </configuration>
  9. </plugin>
  10. <plugin>
  11. <groupId>org.apache.maven.plugins</groupId>
  12. <artifactId>maven-surefire-plugin</artifactId>
  13. <configuration>
  14. <!-- 跳过单元测试 -->
  15. <skipTests>true</skipTests>
  16. </configuration>
  17. </plugin>
  18. <plugin>
  19. <groupId>org.apache.maven.plugins</groupId>
  20. <artifactId>maven-dependency-plugin</artifactId>
  21. <executions>
  22. <!-- 复制第三方 jar 到项目目录下的 target/lib/ 下 -->
  23. <execution>
  24. <goals>
  25. <goal>copy-dependencies</goal>
  26. </goals>
  27. <configuration>
  28. <outputDirectory>${project.build.directory}/lib</outputDirectory>
  29. <excludeScope>provided</excludeScope>
  30. </configuration>
  31. </execution>
  32. </executions>
  33. </plugin>
  34. <plugin>
  35. <groupId>org.apache.maven.plugins</groupId>
  36. <artifactId>maven-jar-plugin</artifactId>
  37. <configuration>
  38. <archive>
  39. <manifest>
  40. <!-- 指定 Spring Boot 启动类,实际测试中必须 -->
  41. <mainClass>${project.main.class}</mainClass>
  42. <!-- 将所有第三方 jar 添加到项目 jar 的 MANIFEST.MF 文件中,这样运行 jar 时依赖包才能被加载 -->
  43. <addClasspath>true</addClasspath>
  44. <!-- 指定复制第三方 jar 的目标目录为 target/lib/-->
  45. <classpathPrefix>./lib/</classpathPrefix>
  46. </manifest>
  47. </archive>
  48. </configuration>
  49. </plugin>
  50. <plugin>
  51. <groupId>org.springframework.boot</groupId>
  52. <artifactId>spring-boot-maven-plugin</artifactId>
  53. <!-- repackage 时排除掉 第三方依赖 jar 文件,我们的可运行 Spring Boot 的 jar 文件瞬间变小 ^_^ -->
  54. <executions>
  55. <execution>
  56. <goals>
  57. <goal>repackage</goal>
  58. </goals>
  59. </execution>
  60. </executions>
  61. <configuration>
  62. <includes>
  63. <include>
  64. <groupId>nothing</groupId>
  65. <artifactId>nothing</artifactId>
  66. </include>
  67. </includes>
  68. </configuration>
  69. </plugin>
  70. </plugins>

4 排除文件

  1. <build>
  2. <resources>
  3. <resource>
  4. <directory>src/main/java</directory>
  5. <!-- 包含 -->
  6. <includes>
  7. <include>**/*.vm</include>
  8. <include>**/*.properties</include>
  9. </includes>
  10. <!-- 排除 -->
  11. <excludes>
  12. <exclude>**/*.log</exclude>
  13. </excludes>
  14. </resource>
  15. <resource>
  16. <directory>src/main/resources</directory>
  17. <filtering>true</filtering>
  18. <includes>
  19. <include>**/*.*</include>
  20. </includes>
  21. <excludes>
  22. <exclude>**/*.log</exclude>
  23. </excludes>
  24. </resource>
  25. </resources>
  26. </build>