首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在多模块maven项目中部署具有依赖关系的子模块

在多模块maven项目中部署具有依赖关系的子模块
EN

Stack Overflow用户
提问于 2021-07-30 09:26:52
回答 2查看 943关注 0票数 0

我有一个项目结构,比如:

代码语言:javascript
运行
复制
module-1
    pom.xml
    Dockerfile
module-2
    pom.xml
module-3
    pom.xml
module-4
    pom.xml
    Dockerfile
pom.xml

module-2module-3module-1module-4的依赖项。

现在,我想独立地部署module-4module-1。现在,在我的父pom中,我添加了dockerfile-maven-plugin并将<skip>添加到true,而对于两个子项目,我都有skip false,因为我想部署它们。然而,当我试图部署module-1时,它会为module-4选择Dockerfile。那么,我应该如何配置我的项目,以便每个模块都选择相应的Dockefile

我的父pom部分看起来如下:

代码语言:javascript
运行
复制
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.3.6</version>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

两个孩子的“我的孩子”部分看起来如下:

代码语言:javascript
运行
复制
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.3.6</version>
    <dependencies>
        <dependency>
            <groupId>jakarta.activation</groupId>
            <artifactId>jakarta.activation-api</artifactId>
            <version>1.2.2</version>
        </dependency>
    </dependencies>
    <configuration>
        <skip>false</skip>
        <repository>${docker.image.prefix}/${project.artifactId}</repository>
        <tag>${project.version}</tag>
        <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
        <buildArgs>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
        <contextDirectory>${basedir}/</contextDirectory>
    </configuration>
</plugin>

另外,在jenkins构建中,我正在运行命令:mvn -pl module-1,module-2,module-3 -am clean install

模块-1的Dockerfile如下所示

代码语言:javascript
运行
复制
FROM openjdk:11-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} module-1.jar
CMD java $JVM_OPTS -Djava.security.egd=file:/dev/./urandom -jar /module-1.jar

需要帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-02 15:01:09

所以,我们可以做的是对父pom:

代码语言:javascript
运行
复制
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.3.6</version>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

在儿童pom中:

代码语言:javascript
运行
复制
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <configuration>
        <skip>false</skip>
        <repository>${docker.image.prefix}/${project.artifactId}</repository>
        <tag>${project.version}</tag>
        <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
        <buildArgs>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
        <contextDirectory>${project.basedir}/</contextDirectory>
    </configuration>
 </plugin>

覆盖跳过到false

所以现在,如果我们运行mvn dockerfile:build,它将运行对接插件,并读取每个子模块的Dockerfile。但是,如果您想要将其应用于特定的模块,您可以运行mvn -pl your-module dockerfile:build,以便我们不想要的其他模块不会在反应堆摘要中运行。

此外,您还可以在您想要的地方将这些执行添加到子节点中。

票数 0
EN

Stack Overflow用户

发布于 2021-07-30 12:03:20

在以下条件下,您所描述的内容是正确的:

项目结构:

代码语言:javascript
运行
复制
project
├── module-1
│   ├── Dockerfile
│   ├── pom.xml
│   └── src
├── module-2
│   ├── pom.xml
│   └── src
├── module-3
│   ├── pom.xml
│   └── src
├── module-4
│   ├── Dockerfile
│   ├── pom.xml
│   └── src
└── pom.xml

亲本POM

代码语言:javascript
运行
复制
<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.3.6</version>
                <dependencies>
                    <dependency>
                        <groupId>jakarta.activation</groupId>
                        <artifactId>jakarta.activation-api</artifactId>
                        <version>1.2.2</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>docker-build</id>
                        <phase>install</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>docker-push</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                    <contextDirectory>${basedir}/</contextDirectory>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

子模块POM

代码语言:javascript
运行
复制
<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

使用命令为模块1构建停靠映像:

代码语言:javascript
运行
复制
mvn -pl module-1,module-2,module-3 -am clean install

输出:

代码语言:javascript
运行
复制
[INFO]  ---> 04ceb1feb02c
[INFO] Step 4/4 : ENTRYPOINT ["java", "-jar", "/app.jar"]
[INFO] 
[INFO]  ---> Running in 2d9866a14643
[INFO] Removing intermediate container 2d9866a14643
[INFO]  ---> ad16766ec096
[INFO] Successfully built ad16766ec096
[INFO] Successfully tagged ***/module-1:1.0-SNAPSHOT
[INFO] 
[INFO] Detected build of image with id ad16766ec096
[INFO] Building jar: ***/maven-docker/module-1/target/module-1-1.0-SNAPSHOT-docker-info.jar
[INFO] Successfully built ***/module-1:1.0-SNAPSHOT
[INFO]          ------------------------------------------------------------------------
[INFO] Reactor Summary for module-2 1.0-SNAPSHOT:
[INFO] 
[INFO] module-2 ............................................ SUCCESS [  0.797 s]
[INFO] module-3 ............................................ SUCCESS [  0.051 s]
[INFO] module-1 ............................................ SUCCESS [  5.019 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.016 s
[INFO] Finished at: 2021-07-30T14:47:53+03:00
[INFO] -----------------------------------------------------------------------

使用Dockerfile来自module-1,因为它有4个步骤( module-4有2个步骤)。

检查码头图像:

代码语言:javascript
运行
复制
$ docker image list

输出:

代码语言:javascript
运行
复制
REPOSITORY                     TAG              IMAGE ID       CREATED          SIZE
***/module-1               1.0-SNAPSHOT     ad16766ec096   16 minutes ago   456MB
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68588583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档