Как заставить Maven использовать внешние репозитории для извлечения артефактов?

#java #maven #repository #settings #pom.xml

Вопрос:

Я получил следующую ошибку при попытке создать проект. Проект является проектом spring и использует IntelliJ с java 8.

 Could not find artifact org.springframework.data:spring-data-bom:pom:2021.0.0-M2 in nexus (http://maven:8081/nexus/content/groups/public)
 

Есть ли способ исправить это с помощью setting.xml?
У меня нет доступа к какой-либо конфигурации на http://maven:8081/nexus/content/groups/public

Это моя обстановка.

 <settings
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                    http://maven.apache.org/xsd/settings-1.0.0.xsd">

<servers>
    <server>
        <id>releases</id>
        <username>me</username>
        <password>mee</password> <!-- impossible password here :-) -->
    </server>
    <server>
        <id>snapshots</id>
        <username>me</username>
        <password>mee</password> <!-- impossible password here :-) -->
    </server>
    <server>
        <id>nexus</id>
        <username>me</username>
        <password>mee</password> <!-- impossible password here :-) -->
    </server>
</servers>

<mirrors>
    <mirror>
        <!--This sends everything else to /public -->
        <id>nexus</id>
        <mirrorOf>*</mirrorOf>
        <url>http://maven:8081/nexus/content/groups/public</url>
    </mirror>
</mirrors>

<profiles>
    <profile>
        <id>nexus</id>
        <!--Enable snapshots for the built in central repo to direct -->
        <!--all requests to nexus via the mirror -->

        <repositories>
            <repository>
                <id>central</id>
                <url>https://mvnrepository.com/repos/central</url>
                <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
                <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
            </repository>
        </repositories>

        <pluginRepositories>
            <pluginRepository>
                <id>central</id>
                <url>https://mvnrepository.com/repos/central</url>
                <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
                <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
            </pluginRepository>
        </pluginRepositories>
    </profile>

    <profile>
        <id>defaultprofile</id>
        <!-- if you want to be able to switch to the defaultprofile profile put this in the active profile -->

        <repositories>
            <repository>
                <id>maven.default</id>
                <name>default maven repository</name>
                <url>http://repo1.maven.org/maven2</url>
                <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
                <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
            </repository>
            <repository>
                <id>maven.snapshot</id>
                <name>Maven snapshot repository</name>
                <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
                <url>http://people.apache.org/repo/m2-snapshot-repository</url>
                <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
            </repository>
            <repository>
                <id>vaadin-addons</id>
                <url>https://maven.vaadin.com/vaadin-addons</url>
            </repository>
        </repositories> 
    </profile>
</profiles>

<activeProfiles>
    <!--make the profile active all the time -->
    <activeProfile>nexus</activeProfile>
</activeProfiles>
 

Комментарии:

1. Сначала эти записи: https://mvnrepository.com/repos/central просто неверны… Уберите их. Во-вторых, эти записи: http://repo1.maven.org/maven2 не нужны. Удалите их также.. Если вы хотите использовать веховые выпуски spring boot, вам необходимо добавить это в свой менеджер репозиториев, а не в файл pom, потому что вы уже используете менеджер репозиториев.

2. Пожалуйста, прокомментируйте мой ответ, вместо того, чтобы редактировать его.

Ответ №1:

Если вы установите

     <mirrorOf>*</mirrorOf>
    <url>http://maven:8081/nexus/content/groups/public</url>
 

затем вы отправляете каждый запрос в этот репозиторий, независимо от остальной части settings.xml . Вам нужно сделать что-то вроде

     <mirrorOf>*,!central</mirrorOf>
    <url>http://maven:8081/nexus/content/groups/public</url>
 

но, пожалуйста, также исправьте/удалите URL-адреса, как сказал хмарбайз.

Комментарии:

1. Я добавил <mirror> <!--This sends everything else to /public --> <id>nexus</id> <mirrorOf>*,!central</mirrorOf> <url>http://maven:8081/nexus/content/groups/public</url> </mirror> и удалил остальное, но ошибка все еще там.

2. Вы строили с -U помощью , так mvn clean install -U ?

3. Нет, я просто выполняю чистую установку mvn

4. Затем повторите попытку -U , чтобы избежать ошибок из-за кэширования.