首页 > 解决方案 > Docker多阶段maven构建拆分依赖解析和编译

问题描述

我正在尝试为基于 maven 的 java 项目设置一个多阶段的 dockerfile。这是我目前使用的:

### STAGE 1: Build ###
FROM maven:3.6.1-jdk-8 as build

WORKDIR /usr/src/app

# Install app dependencies
COPY pom.xml .
RUN mvn dependency:go-offline

# Bundle app source
COPY src src
RUN mvn package

### STAGE 2: Production Environment ###
FROM jboss/wildfly:17.0.0.Final

COPY --from=build /usr/src/app/target/Appname.war /opt/jboss/wildfly/standalone/deployments/Appname.war

RUN /opt/jboss/wildfly/bin/add-user.sh admin admin123 --silent
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]

问题是关于mvn命令的。我看到它mvn dependency:go-offline下载了一些依赖项,这很棒。但随后会mvn package下载更多软件包。为什么?我怎样才能有两个步骤:

编辑

使用mvn package -o,我找不到以下包:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources (default-resources) on project monolith: Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources failed: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of its dependencies could not be resolved: The following artifacts could not be resolved: org.apache.maven:maven-profile:jar:2.0.6, org.apache.maven:maven-repository-metadata:jar:2.0.6, org.apache.maven:maven-plugin-registry:jar:2.0.6, classworlds:classworlds:jar:1.1-alpha-2: Cannot access central (https://repo.maven.apache.org/maven2) in offline mode and the artifact org.apache.maven:maven-profile:jar:2.0.6 has not been downloaded from it before. -> [Help 1]

我认为这与pom.xml. 有什么想法吗?

<build>
    <finalName>Monolith</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.3</version>
            <!--<configuration>-->
                <!--<webXml>src\main\webapp\WEB-INF\web.xml</webXml>-->
            <!--</configuration>-->
        </plugin>
    </plugins>
</build>

标签: javamavendocker

解决方案


您很可能受到MDEP-82 go-offline / resolve-plugins 无法解决当前未解决的所有插件依赖问题的影响。

根据MDEP-82 问题中的此评论,这可以通过指定 maven-dependency-plugin 版本而不是使用默认版本来解决:

然后明确定义用于离线的 maven-dependency-plugin 版本不依赖于 Maven 内部定义的默认版本:

mvn -s settings.xml org.apache.maven.plugins:maven-dependency-plugin:2.8:go-offline


推荐阅读