簡體   English   中英

無法使用 docker 構建具有自定義依賴項的 Spring Boot 項目

[英]Unable to build the spring boot project with custom dependency using docker

我正在從事 Spring Boot 項目,並且我有多個微服務。 為了保留所有模塊中的冗余代碼,我將它們分開並制作了一個項目,並將其作為依賴項添加到每個模塊中。

我的情況是,讓我們說

我有一個 commons spring boot 項目和 A 和 B 項目。 現在我可以在項目 A 和項目 B 中添加公共依賴項

<dependency>
 <groupId>com.example </groupId>
 <artifactId>commons</artifactId>
 <version>1.0.0</version>
</dependency>

並且 commons pom.xml 具有以下內容

     <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <configuration>
                            <classifier>exec</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

如果我在 A 和 B 項目上運行以下命令,我可以看到構建成功mvn clean install

現在問題出現在我身上,如果我嘗試為項目 A 和 B 創建 docker 映像。在這種情況下,commons 模塊不會將其作為兩者的依賴項。

我使用以下 docker 命令序列來創建圖像

#
# Build stage
#
FROM maven:3.6.0-jdk-8-slim AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package -Dmaven.test.skip=true

#
# Package stage
#
FROM openjdk:8-jre-slim
COPY --from=build /home/app/target/A.jar /usr/local/lib/A-0.0.1-SNAPSHOT.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/lib/A-0.0.1-SNAPSHOT.jar"]

任何人都可以幫我將公共依賴項添加到項目 A 中嗎?

注意:我們使用 AWS 托管的容器鏡像注冊服務來存儲鏡像。

提前致謝 :)

據我了解,您尚未將依賴項推送到遠程 maven 工件存儲庫,因此它僅在您的本地計算機中可用~/.m2/repository/com/example/commons/1.0.0/

當您嘗試編譯時,maven 將首先檢查您的本地計算機以查看依賴項是否可用,否則它將聯系 maven Central(或任何其他配置的 repo)來解析和檢索工件。 由於您在工件不可用的 docker 容器中執行此操作,因此它將失敗。

所以我的建議是嘗試:

選項1

在運行 mvn clean package 之前,在 Dockerfile 中添加一行以將此工件復制到 docker 容器中:

COPY ~/.m2/repository/com/example/commons/1.0.0/ ~/.m2/repository/com/example/commons/1.0.0/

選項 2

設置工件存儲庫並將您的工件存儲在那里

最后,使用以下命令集找出解決方案

#
# Build stage
#
FROM maven:3.6.0-jdk-8-slim AS build

COPY /commons/src /home/commons/src
COPY /commons/pom.xml /home/commons
RUN mvn -f /home/commons/pom.xml clean install -Dmaven.test.skip=true

COPY A/src /home/A/src
COPY A/pom.xml /home/A/
RUN mvn -f /home/A/pom.xml clean package install:install-file -Dfile=/home/commons/target/commons-0.0.1-SNAPSHOT.jar -DgroupId=com.example -DartifactId=commons -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar -DgeneratePom=true -Dmaven.test.skip=true
#
# Package stage
#
FROM openjdk:8-jre-slim
COPY --from=build /home/A/target/A.jar /usr/local/lib/A.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/lib/A.jar","--spring.profiles.active=test"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM