Как в CI/CD происходила сборка модулей
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# Как в CI/CD происходила сборка модулей
Общая архитектура
В многомодульном Java проекте сборка в CI/CD требует правильной организации зависимостей и грамотной конфигурации build системы. Рассмотрю типичный сценарий с Maven и GitHub Actions.
1. Структура многомодульного проекта
project-root/ ├── pom.xml (parent POM) ├── core-module/ │ ├── pom.xml │ └── src/ ├── web-module/ │ ├── pom.xml │ └── src/ ├── api-module/ │ ├── pom.xml │ └── src/ └── app-module/
├── pom.xml
└── src/
Parent POM (pom.xml)
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>parent-project</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>core-module</module>
<module>api-module</module>
<module>web-module</module>
<module>app-module</module>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<spring-boot.version>3.1.0</spring-boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2. Maven сборка в CI/CD
GitHub Actions pipeline
name: Build and Test
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
java-version: [ '17' ]
steps:
- uses: actions/checkout@v3
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build all modules
run: mvn clean install -DskipTests
- name: Run tests
run: mvn test
- name: Build final artifacts
run: mvn package -DskipTests
3. Оптимизация сборки
Параллельная сборка модулей
mvn clean install -T 1C
-T 1C означает 1 поток на ядро процессора
Incremental сборка
mvn install -amd -pl core-module,api-module
4. Зависимости между модулями
core-module собирается первым (нет зависимостей) api-module собирается после core (зависит от core) web-module может собираться параллельно с api app-module собирается последним (зависит от всех)
5. Docker для сборки
FROM maven:3.8.6-eclipse-temurin-17 AS builder
WORKDIR /app
COPY . .
RUN mvn clean install -DskipTests
FROM eclipse-temurin:17-jdk-alpine
COPY --from=builder /app/app-module/target/app.jar /app/app.jar
EXPOSE 8080
CMD ["java", "-jar", "/app/app.jar"]
Итого
Сборка многомодульного проекта в CI/CD:
- Настраивается через Parent POM (Maven) или settings.gradle (Gradle)
- Автоматически определяется порядок модулей по зависимостям
- Оптимизируется параллельной сборкой (-T 1C)
- Кэшируется через actions/setup-java
- Собранные артефакты загружаются в artifact storage
- На production используется Docker multi-stage build