文章目录
概述:
maven打包插件,在springboot中可以使用springboot封装的spring-boot-maven-plugin,也可以使用原始的maven打包插件***,因为springboot其实就是一个maven项目;
教程案例:
现在有一个本地的jar包:auth-1.3.jar ,从官网是获取不到的,因为是本地的一个程序打包而成,用来给其他服务使用的;我们的目的是在服务maven-standard中加载本地依赖,并打jar包,并且该jar包能正常运行;
首先我们来看一下,在新建的springboot工程中,pom文件中打包插件最初的样子:
xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cn</groupId>
<artifactId>maven-standard</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>maven-standard</name>
<description>Demo project for Spring Boot</description>
<packaging>jar</packaging> <!-- 可选: war -->
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.4.0</spring-boot.version> <!-- 与parent版本一致 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<!-- <!– 主类(可自动检测,也可显式指定) –>-->
<!-- <mainClass>com.example.demo.DemoApplication</mainClass>-->
<!-- <!– 启用DevTools支持 –>-->
<!-- <fork>true</fork>-->
<!-- <!– 配置JVM参数 –>-->
<!-- <jvmArguments>-Xmx512m -XX:MaxMetaspaceSize=256m</jvmArguments>-->
<!-- 打包时排除测试类 -->
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</exclude>
</excludes>
</configuration>
<!-- 执行目标,默认如此,可以不配置 -->
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 重打包为可执行JAR -->
</goals>
</execution>
</executions>
</plugin>
<!-- 编译插件,可不配置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<!-- 针对JDK 8的编译参数 -->
<compilerArgs>
<arg>-parameters</arg> <!-- 保留方法参数名 -->
</compilerArgs>
</configuration>
</plugin>
<!-- 资源处理插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
<!-- 过滤配置文件,不过滤静态资源 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>static/**</exclude>
<exclude>templates/**</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>static/**</include>
<include>templates/**</include>
</includes>
</resource>
</resources>
</configuration>
</plugin>
<!-- 生成源码JAR和Javadoc,可不配置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- 资源过滤配置 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/application*.yml</include>
<include>**/application*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/application*.yml</exclude>
<exclude>**/application*.properties</exclude>
</excludes>
</resource>
</resources>
</build>
<!-- 插件仓库配置 -->
<pluginRepositories>
<pluginRepository>
<id>spring-plugins</id>
<url>https://repo.spring.io/plugins-release</url>
</pluginRepository>
</pluginRepositories>
</project>
方式一:使用spring-boot-maven-plugin
方法一:
1)在maven-standard项目的根目录下新建lib文件夹,将auth-1.3.jar放在lib目录下;
2)在pom文件中进行插件配置
xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cn</groupId>
<artifactId>maven-standard</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>maven-standard</name>
<description>Demo project for Spring Boot</description>
<packaging>jar</packaging> <!-- 可选: war -->
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.4.0</spring-boot.version> <!-- 与parent版本一致 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--导入自定义jar包-->
<!--工具类-->
<dependency>
<groupId>com.auth</groupId>
<artifactId>auth</artifactId>
<version>1.3.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/auth-1.3.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<!-- 打包时排除测试类 -->
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</exclude>
</excludes>
<includeSystemScope>true</includeSystemScope>
</configuration>
<!-- 执行目标,默认如此,可以不配置 -->
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 重打包为可执行JAR -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
这里关键点就是使用:
bash
<includeSystemScope>true</includeSystemScope>
方法二:
1)在resource下面新建lib目录,将jar包放在该目录下:
2)pom文件配置:
bash
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cn</groupId>
<artifactId>maven-standard</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>maven-standard</name>
<description>Demo project for Spring Boot</description>
<packaging>jar</packaging> <!-- 可选: war -->
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.4.0</spring-boot.version> <!-- 与parent版本一致 -->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--导入自定义jar包-->
<!--工具类-->
<dependency>
<groupId>com.auth</groupId>
<artifactId>auth</artifactId>
<version>1.3.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/auth-1.3.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<excludes>
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</exclude>
</excludes>
<includeSystemScope>true</includeSystemScope>
</configuration>
<!-- 执行目标,默认如此,可以不配置 -->
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 重打包为可执行JAR -->
</goals>
</execution>
</executions>
</plugin>
<!-- 编译插件,可不配置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>${project.basedir}/src/main/resources/lib</extdirs>
</compilerArguments>
</configuration>
</plugin>
<!-- 资源处理插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
<!-- 过滤配置文件,不过滤静态资源 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>static/**</exclude>
<exclude>templates/**</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>static/**</include>
<include>templates/**</include>
</includes>
</resource>
</resources>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>jar</nonFilteredFileExtension>
<nonFilteredFileExtension>png</nonFilteredFileExtension>
<nonFilteredFileExtension>jpg</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
<!-- 资源过滤配置 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/application*.yml</include>
<include>**/application*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/application*.yml</exclude>
<exclude>**/application*.properties</exclude>
</excludes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<targetPath>BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
</build>
</project>
关键
关键点:
bash
<compilerArguments>
<extdirs>${project.basedir}/src/main/resources/lib</extdirs>
</compilerArguments>
bash
<nonFilteredFileExtensions>
<nonFilteredFileExtension>jar</nonFilteredFileExtension>
<nonFilteredFileExtension>png</nonFilteredFileExtension>
<nonFilteredFileExtension>jpg</nonFilteredFileExtension>
</nonFilteredFileExtensions>
bash
<resource>
<directory>${basedir}/src/main/resources</directory>
<targetPath>BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
主要是因为放在resource下面,springboot在检索资源的时候就默认从resource目录下去加载,需要一些特殊配置;
综上所述,还是方法一比较实用,无需太多特殊处理;