Почему maven использует неправильный репозиторий, когда несколько зависимостей в разных репозиториях? - PullRequest
0 голосов
/ 25 марта 2020

У меня есть настройки. xml файл, который имеет следующее ...

<settings>
    <mirrors>
        <mirror>
            <!--This sends everything else to /jpmc-public -->
            <id>PRIVATE-SNAPSHOT</id>
            <mirrorOf>PRIVATE-SNAPSHOT</mirrorOf>
            <url>https://url1</url>
        </mirror>
        <mirror>
            <id>PRVATE</id>
            <mirrorOf>PRIVATE</mirrorOf>
            <url>https://url2</url>
        </mirror>
        <mirror>
            <id>public</id>
            <mirrorOf>*,!PRIVATE,!PRIVATE-SNAPSHOT</mirrorOf>
            <url>http://url3</url>
        </mirror> 
    </mirrors>
    <profiles>
        <profile>
            <id>local</id>
            <pluginRepositories>
                <pluginRepository>
                    <id>public</id>
                    <url>http://url</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
            <repositories>
                <repository>
                    <id>PRIVATE-SNAPSHOT</id>
                    <url>https://url1</url>
                    <releases><enabled>false</enabled></releases>
                    <snapshots><enabled>true</enabled></snapshots>
                </repository>
                <repository>
                    <id>PRIVATE</id>
                    <url>https://url2</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>false</enabled></snapshots>
                </repository>
                <repository>
                    <id>public</id>
                    <url>http://url3</url>
                    <releases><enabled>true</enabled></releases>
                    <snapshots><enabled>false</enabled></snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>
    ...
</settings>

Тогда у меня есть что-то подобное в моем pom

<dependencies>
    <dependency>
        <groupId>some.group</groupId>
        <artifactId>public-lib</artifactId>
        <version>${version}</version>
    </dependency>
    <dependency>
        <groupId>come.other.group</groupId>
        <artifactId>private-lib</artifactId>
        <version>${scala.test}</version>
    </dependency>
</dependency>

Но когда я бегу он попытался получить publi c lib из частного репозитория и потерпел неудачу. Если я отредактирую настройки, чтобы удалить теги репозитория, то он получит вещи publi c нормально, но не сможет получить приватные вещи из репо publi c. Как я должен сказать, что конкретная c зависимость происходит от определенного c репо?

1 Ответ

1 голос
/ 25 марта 2020

Общая ситуация выглядит следующим образом:

  1. Вы не можете определить, из какого хранилища извлекается данная зависимость.

  2. Вам не нужно определять, из какого хранилища извлекается данная зависимость. Maven просматривает все репозитории и дает сбой, только если ни один из них не содержит его.

Но:

  • Вы можете запутать Maven неправильно зеркала в settings.xml.
  • В редких случаях разрешение Maven тормозит, если один из репозиториев сломан.

В компании обычно лучше всего запустить Nexus или Artifactory и добавить все соответствующие локальные и удаленные репозитории к нему. Тогда вы можете указать только на этот Nexus / Artifactory как зеркало в вашем setttings.xml.

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