我正在制作微服务项目,因此名为 obshaga 的父项目仅包含 pom.xml 和模块(微服务)。所以我想通过使用 docker-compose 使其易于部署,所以首先我在每个项目中制作了 dockerfile。例如,例如在微服务“tg-dispatcher”中我写了这个 Dockerfile:
FROM openjdk:11 as build
WORKDIR /app
COPY .mvn/ .mvn
COPY mvnw pom.xml ./
COPY src ./src
RUN ["./mvnw", "install"]
ENTRYPOINT ["java", "-jar", "./target/tg-dispatcher.jar"]
pom.xml
父项目obshaga:
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>org.dompurrr</groupId>
<artifactId>obshaga</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>tg-dispatcher</module>
<module>node</module>
</modules>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<telegrambot.starter.version>6.1.0</telegrambot.starter.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
</parent>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.9.1.2184</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.4</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<reportFormat>plain</reportFormat>
<includes>
<include>**/*Test*.java</include>
<include>**/*IT*.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</project>
pom.xml
用于儿童项目 tg-dispatcher:
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.dompurrr</groupId>
<artifactId>obshaga</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>tg-dispatcher</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots-spring-boot-starter</artifactId>
<version>${telegrambot.starter.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies>
<build>
<finalName>tg-dispatcher</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
所以当我尝试为 tg-dispatcher 构建 docker 镜像时,我发生了错误:
[FATAL] Non-resolvable parent POM for org.dompurrr:tg-dispatcher:1.0-SNAPSHOT: Could not find artifact org.dompurrr:obshaga:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 6, column 13
@
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]
[ERROR] The project org.dompurrr:tg-dispatcher:1.0-SNAPSHOT (/app/pom.xml) has 1 error
[ERROR] Non-resolvable parent POM for org.dompurrr:tg-dispatcher:1.0-SNAPSHOT: Could not find artifact org.dompurrr:obshaga:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 6, column 13 -> [Help 2]
我可以很容易地
maven package
或maven install
在docker之外做其他事情,所以对我来说问题是把所有这些放在docker里面并组织起来。
我发现我可能会尝试将父项目工件部署到 Maven Central,但这似乎是一个奇怪的解决方案。 有没有办法在本地或在 docker 容器内部署它? 或者也许还有其他方法可以解决这个问题?也许我可以重新组织项目,所以每个微服务都不会连接到父项目?