springboot使用本地jar包,并打包进行部署

过程: springboot成功引入了本地jar包,并且idea运行成功,调用接口也成功;但是使用maven进行打包后,运行失败,报ClassNotFound错误,所以看来没有那么简单,经过搜索解决方案与测试,终于成功;
我直接copy原文吧:

相信大家和我一样肯定会遇到项目中需要导入自己写的一些jar,并不是所有的jar包在maven上都能下到的,特别有些是公司内部写的,或者自己封装的一下jar包,这种jar包怎么导入到SpringBoot项目中
1.我的jar包在项目中的位置
在这里插入图片描述

2.maven中导入(如果单独在idea,eclipse等编辑器中使用,就这样就可以了)
在这里插入图片描述

<!--导入自定义jar包-->
<!--工具类-->
<dependency>
    <groupId>com.yun.common</groupId>
    <artifactId>common</artifactId>
    <version>0.0.1</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/common-0.0.1.jar</systemPath>
</dependency>
<dependency>
    <groupId>com.alipay</groupId>
    <artifactId>sdk</artifactId>
    <version>0.0.1</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/lib/alipay-sdk-java-0.0.1.jar</systemPath>
</dependency>

3.如果单纯只是上面那样写,通过maven生成的项目jar运行会报错,缺少我们自己本地的jar包
怎么解决这个问题,在网上有很多写法,我基本都试完了,最后东拼西凑的弄出一种用法终于成功了,在这里记录下,顺便也帮助下和我一样的同学
在这里插入图片描述
图中1是springboot的maven插件不用说了吧
图中2才是我要说的重点,这个地方是指定我们本地jar包的位置,让maven打包的时候一起打进去

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>1.5.7.RELEASE</version>
        <configuration>
            <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
        </configuration>
    </plugin>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF-8</encoding>
            <compilerArguments>
                <extdirs>${project.basedir}/src/main/resources/lib</extdirs>
            </compilerArguments>
        </configuration>
    </plugin>
</plugins>

4.新问题来了,如果单纯使用上面这段maven插件还是不能解决问题,还需要告诉maven具体要把哪些资源打包进去,我就是在下面这个绕了很久
在这里插入图片描述
图中1,2是我项目中用到的一些配置文件和本文无关,但是如果你除了jar包还有其他资源在项目resources文件夹下也要通过这种方式加载进去
图中3,4是绕了我很久的问题根源,网上很多地方都讲到了要配置图5,配置了之后你会发现你项目就启动不了,因为springboot的配置没加载进来,这个坑大家一定要注意。

<resources>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>**/*.txt</include>
        </includes>
    </resource>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <targetPath>config/</targetPath>
        <includes>
            <include>**/*.xml</include>
        </includes>
    </resource>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>**/*.properties</include>
        </includes>
    </resource>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <excludes>
            <exclude>**/*.properties</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <targetPath>BOOT-INF/lib/</targetPath>
        <includes>
            <include>**/*.jar</include>
        </includes>
    </resource>
</resources>

PS:plugins标记和resources标记在maven中都位于build标记之下,build标记和dependencies标记是同级关系
备注: 上文中sping-boot-maven插件版本不知道可以不用指定,自动适配当前springboot版本,我实际用的下面:

          <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArguments>
                        <extdirs>${project.basedir}/src/main/resources/lib</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>
        </plugins>

原文地址:https://blog.youkuaiyun.com/dongdingzhuo/article/details/78731704?spm=1001.2014.3001.5506

实际中使用,两种方法
第一种:
本地jar包位置:
在这里插入图片描述

  <!--导入自定义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>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArguments>
                        <extdirs>${project.basedir}/src/main/resources/lib</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>
        </plugins>

        <resources>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <excludes>
                    <exclude>**/*.properties</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
        </resources>
    </build>

第二种:

本地jar文件位置:
在这里插入图片描述

        <dependency>
            <groupId>cisdi.info.imc</groupId>
            <artifactId>imc-common</artifactId>
            <version>1.3.5.3-SNAPSHOT</version>
            <scope>system</scope>
            <systemPath>${pom.basedir}/lib/imc-common-1.3.5.3-SNAPSHOT.jar</systemPath>
        </dependency>
 <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.13.RELEASE</version>
                <configuration>
                    <!-- 打包时是否包含scope为system的依赖 -->
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

有人说还得加上那个resources,但是我没有加,也成功了;

### Spring Boot 打包 JAR 文件部署到 Docker 容器 #### 准备工作 为了实现将 Spring Boot 项目打包JAR 文件通过 Docker 进行容器化部署,需要完成以下几个核心步骤: --- #### 构建 Spring Boot 应用程序的 JAR 文件 通过 Maven 或 Gradle 工具可以轻松构建 Spring Boot 的可执行 JAR 文件。 对于基于 Maven 的项目,在项目的根目录下运行以下命令来生成 JAR 文件: ```bash mvn clean package ``` 这会清理旧的目标文件夹将最新的应用程序编译为一个单独的 JAR 文件[^2]。默认情况下,JAR 文件会被放置在 `target` 目录中。 如果使用的是 Gradle,则可以通过以下命令生成 JAR 文件: ```bash gradle bootJar ``` --- #### 创建 Dockerfile 文件 创建一个名为 `Dockerfile` 的文件用于定义 Docker 镜像的构建过程。以下是典型的 Dockerfile 内容示例: ```dockerfile # 使用官方的基础 Java 镜像作为父镜像 FROM openjdk:17-jdk-slim # 将当前目录下的目标 JAR 文件复制到容器中的 /app/ 路径下 COPY target/*.jar /app/app.jar # 设置容器的工作目录 WORKDIR /app # 暴露应用所需的端口(假设 Spring Boot 默认监听8080) EXPOSE 8080 # 启动容器时自动运行的应用启动命令 ENTRYPOINT ["java", "-jar", "/app/app.jar"] ``` 上述配置指定了基础镜像、JAR 文件的位置以及服务暴露的端口号,设置了容器启动后的入口点[^4]。 --- #### 构建 Docker 镜像 确保已经安装好 Docker 和 Docker Compose 后,可以在终端中导航到含 `Dockerfile` 和生成好的 JAR 文件的目录,然后运行以下命令以构建自定义镜像: ```bash docker build -t springboot-app . ``` 此命令会在当前目录查找 `Dockerfile` 按照其中的指令逐步构建一个新的 Docker 镜像,最终命名为 `springboot-app`[^3]。 --- #### 运行 Docker 容器 一旦成功构建了镜像,就可以利用该镜像启动新的容器实例。例如,下面这条命令将会以前台模式启动容器,绑定主机上的某个端口与容器内部的服务端口相对应: ```bash docker run -d -p 9090:8080 --name my-springboot-container springboot-app ``` 这里的 `-d` 参数表示以后台方式运行;`-p` 则用来设置宿主机和容器之间的网络端口映射关系;而 `--name` 是给新创建出来的容器赋予唯一的名字以便后续管理操作更加方便快捷。 另外还可以加上数据持久化的选项比如这样: ```bash docker run -d \ -p 9090:8080 \ -v $(pwd)/logs:/app/logs \ --name my-springboot-container \ springboot-app ``` 这段脚本不仅实现了基本功能还增加了日志记录位置共享的功能使得调试更简单高效。 --- #### 自动化流程 (Optional) 为了进一步简化开发运维一体化(CI/CD),可以借助 Jenkins 来自动化整个流水线作业——从源码检出、测试验证直到最后一步制作镜像推送远程仓库都可通过插件支持无缝衔接起来。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值