原创

【java】springboot 打包分离lib

原pom.xml

<build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
                </configuration>
            </plugin>

        </plugins>
    </build>

改造后pom.xml

去掉了spring-boot-maven-plugin,改为maven-jar-plugin


 <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- 打JAR包,不包含依赖文件;显式剔除配置文件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <outputDirectory>${project.build.directory}</outputDirectory>
                    <archive>
                        <!-- 生成的jar中,包含pom.xml和pom.properties这两个文件 -->
                        <addMavenDescriptor>true</addMavenDescriptor>
                        <!-- 生成MANIFEST.MF的设置 -->
                        <manifest>
                            <!--这个属性特别关键,如果没有这个属性,有时候我们引用的包maven库 下面可能会有多个包,并且只有一个是正确的, 其余的可能是带时间戳的,此时会在classpath下面把那个带时间戳的给添加上去,然后我们 在依赖打包的时候, 打的是正确的,所以两头会对不上,报错。 -->
                            <useUniqueVersions>false</useUniqueVersions>
                            <!-- 为依赖包添加路径, 这些路径会写在MANIFEST文件的Class-Path下 -->
                            <addClasspath>true</addClasspath>
                            <!-- MANIFEST.MF 中 Class-Path 各个依赖加入前缀 -->
                            <!--这个jar所依赖的jar包添加classPath的时候的前缀,需要 下面maven-dependency-plugin插件补充-->
                            <!--一定要找对目录,否则jar找不到依赖lib,前边加../是因为jar在bin下,而bin与lib是平级目录-->
                            <classpathPrefix>./lib</classpathPrefix>
                            <!--指定jar启动入口类 -->
                            <mainClass>com.ruoyi.RuoYiApplication</mainClass>
                        </manifest>

                    </archive>
                </configuration>
            </plugin>

            <!--拷贝依赖 copy-dependencies-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

原dockerfile


# 环境版本
FROM anapsix/alpine-java:8_server-jre_unlimited

ENV PARAMS ""

ENV TZ=PRC

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone


EXPOSE 1234

RUN mkdir /home/db/

ADD target/weekely.jar /home/weekely.jar

ENTRYPOINT ["java", "-jar","/home/weekely.jar" , ""]

改造后dockerfile


FROM anapsix/alpine-java:8_server-jre_unlimited

ENV PARAMS ""

ENV TZ=PRC

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

EXPOSE 1234

RUN mkdir /home/db/

ADD target/lib/* /home/lib/
ADD target/weekely.jar /home/weekely.jar


ENTRYPOINT ["java", "-jar", "/home/weekely.jar","-Dloader.path=./lib","-Djava.ext.dirs=./lib"]

结构

生成产物:

target\xxx.jar
target\lib\xxx.jar,xxx.jar2

docker目录结构为:
Dockerfile
target/lib/...jar
target/xxx.jar
```

参考

SpringBoot分离打包:将jar包与lib依赖、配置文件分开

温馨提示:
本文最后更新于 2022年10月27日,已超过 94 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
本文目录