SpringBoot trennt JAR-Pakete und Lib-Abhängigkeiten und erstellt Images mithilfe von Dockerfile

Vorwort

Spring Boot ist ein sehr beliebtes Java-Entwicklungsframework, das viele praktische Funktionen wie automatische Konfiguration, schnelle Entwicklung und mehr bietet.

Bei der Entwicklung mit Spring Boot verwenden wir normalerweise Maven oder Gradle, um das Projekt zu erstellen.

In diesem Artikel erfahren Sie, wie Sie mit Maven ein Spring Boot-Projekt in eine ausführbare JAR-Datei packen und die JAR-Datei und abhängige Bibliotheken für eine einfache Bereitstellung in einem Docker-Container trennen.

Maven-Abhängigkeits-Plugin

spring-boot-maven-plugin sum maven-dependency-plugin Maven-Bereitstellung.

spring-boot-maven-plugin wird zum Packen einer Spring Boot-Anwendung als ausführbares JAR- oder WAR-Archiv verwendet, während maven-dependency-plugin zum Kopieren von Projektabhängigkeiten an einen angegebenen Speicherort verwendet wird.

spring-boot-maven-pluginKonfiguriert, um die Anwendung als ausführbares ZIP-Archiv zu packen.

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
        <layout>ZIP</layout>
        <!--解决windows命令行窗口中文乱码-->
        <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
        <!--这里是填写需要包含进去的jar,
          必须项目中的某些模块,会经常变动,那么就应该将其坐标写进来
          如果没有则nothing ,表示不打包依赖 -->
        <includes>
            <include>
                <groupId>nothing</groupId>
                <artifactId>nothing</artifactId>
            </include>
        </includes>
    </configuration>
</plugin>

maven-dependency-plugin ist so konfiguriert, dass Projektabhängigkeiten nach ${project.build.directory}/lib kopiert werden.

Kopieren Sie lib Abhängigkeiten in das Verzeichnis target

<!--拷贝依赖到jar外面的lib目录-->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <!--指定的依赖路径-->
                <outputDirectory>
                    ${project.build.directory}/lib
                </outputDirectory>
                <excludeScope>provided</excludeScope>
            </configuration>
        </execution>
    </executions>
</plugin>

maven-jar-plugin ist so konfiguriert, dass das Projekt als JAR-Datei verpackt und die Projektabhängigkeiten nach ${project.build.directory}/lib kopiert werden.

Darüber hinaus konfiguriert maven-jar-plugin auch die MANIFEST.MF-Datei der JAR-Datei, die die Hauptklasse und den Klassenpfad der Anwendung enthält, und gibt < an a i=3> Ladepfad Pfadjarlib

Die Startup-Klasse muss die Startup-Klasse in Ihrem Projekt ausfüllen

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>top.teainn.project.MyApplication</mainClass>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
</plugin>

In im jar-Paket können Sie sehen, dass der Abhängigkeit vorangestellt istMETA-INFMANIFEST.MFlib/

Bild-20231104105644791

Paketpaket

Bild-20231104104046348

Nachdem gepackt wurde, können Sie sehen, dass jar und lib getrennt sind

Bild-20231104104122447

Docker-Datei

Die wichtigste ist COPY ${OUT_DIRECTORY}/lib /lib, das Kopieren von lib im externen Verzeichnis nach im Containerlib

# 凉了的凉茶

# 设置jdk版本
FROM java:8

# 设置我们的个人信息,大家根据需求随便写
MAINTAINER daqi <[email protected]>

# 这两行是设置我们容器内的时间以及jvm的时间(默认不是GMT)
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone

#复制依赖 jar
COPY ${OUT_DIRECTORY}/lib /lib

# 前面的xxxxxx是我们上传的jar包名称,后面的是我们新命名的jar包
ADD Esurvey-backend-1.1.1.jar springboot.jar
# 执行我们的jar包,xxx是上面刚命名的新名字
# CMD java -jar springboot.jar

# 镜像启动成为容器后,对外暴露的端口
EXPOSE 9996

# Image创建容器时的初始化内存,最大内存,及启动时使用的profile. -c为清除以前启动的数据
# 依赖默认访问本目录下的 lib
ENTRYPOINT ["java","-Xms256m","-Xmx256m","-jar","/springboot.jar","--spring.profiles.active=prod","-c"]

andere

Nachdem Sie Dockerfile und Docker-Compose zum Bereitstellen des Projekts verwendet haben, können Sie diesen Blog anzeigen

Verwenden Sie Docker-Compose, um das SpringBoot-Projekt bereitzustellen, und Nginx, um das Front-End bereitzustellen

Guess you like

Origin blog.csdn.net/weixin_62726289/article/details/134215719