Docker Spring Boot проекта Локальная Снимок Зависимость - PullRequest
0 голосов
/ 10 октября 2019

Я изучаю докер для работы с моим приложением весенней загрузки. Я не могу загрузить версии снимков зависимого проекта. У меня есть два проекта, Проект A и Проект B.

, это мой файл для создания docker

version: '2.1'
services:
    projectA:
       build:
          context: ./projectA
          dockerfile: Dockerfile
       restart: always
       working_dir: /app
       command: mvn clean install
    projectB:
       build:
          context: ./projectB
          dockerfile: Dockerfile
       restart: always
       working_dir: /app
       command: mvn clean spring-boot:run

. Это создает проект Snapshot JarA-1.1.0-SNAPSHOT.jar

Я хочу использовать этот jar-файл в projectB (Spring Boot Application)

Как мне указать yo Этот локальный jar-файл в POM.xml

Мой POM должен иметь

<dependency>
        <groupId>com.project.test</groupId>
        <artifactId>projectA</artifactId>
        <version>1.1.0-SNAPSHOT</version>
</dependency>

Я получаю ошибки при загрузке projectB из-за изменений в версии SNAPSHOT.

Спасибо,

, это вывод, когда я делаю docker-compose --build

[ERROR] COMPILATION ERROR : 
[INFO] ----------------------------   
[ERROR].../com/project/test/api/assembler/UserMapper.java:
[57,54]    cannot find symbol
  symbol:   method getLastSessionTimestamp()
  location: variable user of type com.project.test.domain.User

lastSessionTimestamp добавлен в локальный SNAPSHOT Jar.

1 Ответ

0 голосов
/ 11 октября 2019

Причина, по которой ваш пример не работает, состоит в том, что вы неправильно понимаете, что такое docker (compose) и как он работает. Это не менеджер пакетов для ваших библиотек Java, а инструмент для объединения целых приложений.

Итак, подробно вы настроили следующее: projectA создает контейнер Docker, используя ваш Dockerfile, создает библиотеки ProjectA Java и, наконец, устанавливаетупакованный jarfile в docker-контейнер локальных файловых систем maven папок. Дополнительно параллельно вы пытаетесь запустить projectB. Это означает, что у вас есть две проблемы:

  1. работающие контейнеры не знают друг о друге, поскольку они ничего не делят, но даже если вы решите эту проблему, например, поделившись томом между ними, вывсе еще есть проблема
  2. compose не подразумевает порядок и выполняет несколько контейнеров параллельно. Таким образом, вы можете столкнуться с ситуациями, когда это может сработать и при следующем запуске не будет работать снова, так как B выполняется до того, как будет выполнен A.

Чтобы решить эту проблему, у вас есть несколько вариантов, которые я хотел быПредложите сделать следующее: - Создайте A и B вне контейнеров на вашем компьютере, используя многомодульный файл pom, который организует сборку, и добавьте только последний jar в образ докера, который вы можете отправить. Если это работает, вы также можете выполнить сборку в контейнере.

Но чтобы просто попробовать, чтобы обе ваши сборки работали, вы можете создать том и смонтировать его в обоих контейнерах в папку maven, которая /root/.m2, если вы не изменили пользователя по умолчанию.

Но я настоятельно рекомендую вам также прочитать о том, как docker обрабатывает многоступенчатые сборки и как он обрабатывает тома, здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...