← Назад к вопросам

Что будешь делать, если при использовании Maven не приходят артефакты

1.2 Junior🔥 221 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что делать, если Maven не загружает артефакты

Эта проблема встречается часто, особенно при работе с корпоративными сетями или новыми проектами. У меня есть систематический подход к её решению.

Шаг 1: Проверить интернет соединение

# Проверить доступность репозитория
curl -I https://repo.maven.apache.org/maven2/

# Или с wget
wget --spider https://repo1.maven.org/maven2/

Шаг 2: Очистить кеш Maven

# Удалить локальный репозиторий
rm -rf ~/.m2/repository

# Или selectively удалить конкретный артефакт
rm -rf ~/.m2/repository/com/example/myapp/

# На Windows
del %USERPROFILE%\.m2\repository

Шаг 3: Проверить settings.xml

<!-- ~/.m2/settings.xml -->
<settings>
    <servers>
        <!-- Если используются приватные репозитории -->
        <server>
            <id>my-private-repo</id>
            <username>myuser</username>
            <password>mypass</password>
        </server>
    </servers>
    
    <mirrors>
        <!-- Перенаправление всех запросов на зеркало -->
        <mirror>
            <id>aliyun</id>
            <mirrorOf>*</mirrorOf>
            <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
    </mirrors>
    
    <profiles>
        <profile>
            <id>default</profile>
            <repositories>
                <repository>
                    <id>central</id>
                    <url>https://repo1.maven.org/maven2/</url>
                </repository>
            </repositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>default</activeProfile>
    </activeProfiles>
</settings>

Шаг 4: Проверить pom.xml

<!-- pom.xml -->
<repositories>
    <repository>
        <id>central</id>
        <url>https://repo1.maven.org/maven2/</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
    
    <!-- Если используются SNAPSHOT версии -->
    <repository>
        <id>snapshots</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
    </repository>
</repositories>

Шаг 5: Запустить Maven с debug информацией

# Очень подробный логирование
mvn -X clean install

# Или с помощью flags
mvn -e clean install  # Show errors
mvn -q clean install  # Quiet mode

# Пересчитать чексумы
mvn install -U  # Update snapshots and releases

Шаг 6: Проверить файрвол и прокси

<!-- ~/.m2/settings.xml для прокси -->
<proxies>
    <proxy>
        <id>proxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <host>proxy.company.com</host>
        <port>8080</port>
        <username>proxyuser</username>
        <password>proxypass</password>
        <nonProxyHosts>*.company.com</nonProxyHosts>
    </proxy>
</proxies>

Шаг 7: Использовать альтернативные репозитории

<repositories>
    <!-- Основной репозиторий -->
    <repository>
        <id>central</id>
        <url>https://repo1.maven.org/maven2/</url>
    </repository>
    
    <!-- Зеркало Aliyun (быстрое для Азии) -->
    <repository>
        <id>aliyun-central</id>
        <url>https://maven.aliyun.com/repository/public</url>
    </repository>
    
    <!-- JCenter -->
    <repository>
        <id>jcenter</id>
        <url>https://jcenter.bintray.com/</url>
    </repository>
    
    <!-- CloudFlare (зеркало) -->
    <repository>
        <id>cloudflare-maven</id>
        <url>https://cdn-mirror.maven.io/maven2/</url>
    </repository>
</repositories>

Шаг 8: Проверить корректность координат

// Неправильно:
// <groupId>com.example.incorrect</groupId>
// <artifactId>mylib-typo</artifactId>
// <version>1.0.1</version>  // Неверсия не существует

// Правильно:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>3.0.0</version>
</dependency>

// Или используем parent для управления версией:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.0</version>
</parent>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- version не нужен, берётся из parent -->
</dependency>

Шаг 9: Проверить availability онлайн

# Проверить есть ли артефакт в MVNRepository
curl -I https://mvnrepository.com/artifact/org/springframework/spring-core/5.3.0

# Поискать прямо
# Сайт: https://mvnrepository.com/

Шаг 10: Как последнее средство — локальный артефакт

# Установить JAR локально
mvn install:install-file \
    -Dfile=mylib.jar \
    -DgroupId=com.example \
    -DartifactId=mylib \
    -Dversion=1.0.0 \
    -Dpackaging=jar

# Или добавить в settings.xml

Пример полного решения

// pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.example</groupId>
    <artifactId>myapp</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    
    <repositories>
        <!-- Несколько репозиториев для надёжности -->
        <repository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2/</url>
        </repository>
        <repository>
            <id>aliyun</id>
            <url>https://maven.aliyun.com/repository/public</url>
        </repository>
    </repositories>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>3.0.0</version>
        </dependency>
    </dependencies>
</project>

Команды для диагностики

# Показать dependency tree
mvn dependency:tree

# Разрешить конфликты зависимостей
mvn dependency:resolve

# Проверить что поломалось
mvn verify -DskipTests

# Переиндексировать локальный репозиторий
mvn install:install-file -Dfile=target/myapp-1.0.0.jar -DgroupId=com.example -DartifactId=myapp -Dversion=1.0.0 -Dpackaging=jar

Заключение

При проблеме с загрузкой артефактов я проверяю в такой последовательности:

  1. Интернет соединение — базовое
  2. Очистка кеша — на 80% решает проблему
  3. Репозитории и конфигурация — settings.xml и pom.xml
  4. Debug информацияmvn -X для диагностики
  5. Альтернативные репозитории — если основной недоступен
  6. Проверка зависимостей — правильные версии и координаты
  7. Локальное решение — в крайнем случае установить JAR локально

Обычно помогают первые три шага. Если ничего не помогает — проблема в инфраструктуре или доступе.