8

我有一个使用内部存储库和中央存储库的项目。有没有一种方法可以配置 settings.xml 以便我可以同时使用这两个而不是一个?当我添加

<mirrors>
    <mirror>
        <id>MY ID</id>
        <url>MY URL</url>
        <mirrorOf>*</mirrorOf>
    </mirror>
</mirrors>

在 settings.xml 中,我可以查看我自己的内部存储库,但它会覆盖中央存储库。

我确信这是 Maven 新手经常遇到的问题。

4

4 回答 4

8

有几种方法可以做到这一点。

最好的,IMO,是让你的本地存储库服务器充当 Maven Central 的代理。Nexus 和 Artifactory 都是开箱即用的。如果您使用的是 Apache 或其他 Web 服务器,则应该切换。

您还可以更新您的设置,从您的镜像中排除目标服务器:

<mirrorOf>*,!MyOtherRepository</mirrorOf>

如果您有多个本地存储库服务器,则此方法有效,但我认为您不能以这种方式排除中央:默认情况下,Maven 在中央查找工件,而您的服务器充当它的替身。

这会在您的 POMS 中留下明确的存储库条目,这些条目引用本地存储库。如果您的本地存储库只为您的工件提供服务,这可能是第二简单的事情(尤其是如果您使用包含存储库规范的父 POM)。

于 2012-10-11T17:00:44.513 回答
4

您的 mirror 指令当前正在镜像所有内容。您可以排除命名存储库:

<mirrorOf>!myExcludedRepo,*</mirrorOf>

上面的镜像除了名为myExcludedRepo.

这是Maven 镜像指南。请特别注意标记为Advanced的部分。那里有很多功能。

于 2012-10-11T16:58:07.297 回答
0

我找到了一个可行的答案,即按照此链接的指示更改 pom.xml 并动态添加远程存储库

感谢您的回答,伙计们,我认为您的建议对于具有更多存储库和复杂配置的更复杂场景很有用。

于 2012-10-11T19:01:34.600 回答
0

我使用三个存储库(使用 Nexus),第一个是代理存储库,我将所有外部存储库添加到其中。另外两个是我用于部署版本和快照的内部存储库。这是我的 .m2/settings.xml:

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
    <!-- http://maven.apache.org/ref/3.0.4/maven-settings/settings.html -->

    <interactiveMode>true</interactiveMode>
    <offline>false</offline>

    <mirrors>
    <mirror>
        <id>nexus</id>
        <mirrorOf>external:*</mirrorOf>
        <url>http://localhost:3129/nexus/content/groups/public</url>
    </mirror>
    </mirrors>

    <profiles>
    <profile>
        <id>nexus</id>
        <repositories>
            <repository>
                <id>central</id>
                <url>http://central</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>

            <repository>
                <id>internal.releases</id>
                <url>http://localhost:3129/nexus/content/repositories/releases</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>        

            <repository>
                <id>internal.snapshots</id>
                <url>http://localhost:3129/nexus/content/repositories/snapshots</url>
                <releases>
                    <enabled>false</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>        
        </repositories>

        <pluginRepositories>
            <pluginRepository>
                <id>central</id>
                <url>http://central</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </pluginRepository>
        </pluginRepositories>
        <properties>
            <downloadSources>true</downloadSources>
            <downloadJavadocs>true</downloadJavadocs>           
        </properties>
    </profile>
    </profiles>

    <activeProfiles>
    <activeProfile>nexus</activeProfile>
    </activeProfiles>  

    <servers>
    <server>
        <id>internal.releases</id>
        <username>admin</username>
        <password>XXX</password>
    </server>
    <server>
        <id>internal.snapshots</id>
        <username>admin</username>
        <password>XXX</password>
    </server>
    </servers>

</settings>

Maven 全部使用它们,因此您可能希望使用 Nexus 的路由功能来阻止“^/my/private/packages/.*”,这样它就不会尝试从外部存储库获取内部包。我还没有将内部存储库添加到代理存储库中。

您无需调整 pom.xml 文件即可使其正常工作。只需输入“mvn deploy”。

于 2014-03-16T13:21:59.083 回答