springboot实现本地jar包依赖

文章目录

概述:

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>
<!--                    &lt;!&ndash; 主类(可自动检测,也可显式指定) &ndash;&gt;-->
<!--                    <mainClass>com.example.demo.DemoApplication</mainClass>-->

<!--                    &lt;!&ndash; 启用DevTools支持 &ndash;&gt;-->
<!--                    <fork>true</fork>-->

<!--                    &lt;!&ndash; 配置JVM参数 &ndash;&gt;-->
<!--                    <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目录下去加载,需要一些特殊配置;

综上所述,还是方法一比较实用,无需太多特殊处理;

方式二:使用maven原始打包插件