1

我为两家不同的公司担任顾问,这两家公司都使用 maven 并且都有自己的 nexus 存储库管理器。我已经将 maven 与两个存储库管理器一起使用,它工作正常,但每次切换客户时,我都需要更改存储库管理器地址所在的 settings.xml 文件。

有没有办法解决这个问题?为了让 Maven 根据我正在构建的项目找出要使用的存储库管理器?我可以轻松地编辑两个项目中的 pom 文件,并在需要时激活不同的配置文件。

4

4 回答 4

1

最好的方法是将 .m2/ 置于 Git 等 VCS 的控制之下,并使用不同的分支更改设置(忽略存储库本身)。

git checkout CUSTOMER1

git checkout CUSTOMER2

这是我目前的解决方案。非常简单有效,而且我对 settings.xml 所做的每一次更改都在版本控制之下。

于 2012-09-03T12:41:00.123 回答
1

在类似的情况下,我怀疑在为每个客户工作时我会使用不同的登录名。这对于您的个人资料(例如电子邮件帐户)来说不是很方便,但是知道所有内容都是分开的,我会感到更安全。

另一方面,如果您不担心,您可以考虑在您的机器上设置 Nexus 作为您客户存储库的代理。

于 2012-09-03T12:50:58.343 回答
0

我建议设置 Nexus 的本地副本,在您的机器上作为代理运行。从那里您代理两个外部存储库。

然后就部署到不同的存储库而言,您不需要做任何事情,因为它们已经在项目分发管理中使用了不同的 url。

如果您绝对必须将它们分开,我建议使用两个不同的 settings.xml 文件将它们分开,并使用 -s 指定正确的设置文件调用 mvn。

为方便起见,您可以为这些调用创建一个 shell 别名。

如果您在其中使用相同的 settings.xml 和配置文件,则您没有相同的分隔,但它也可以工作。然后,您还可以创建别名以使事情更清洁..

于 2012-09-03T20:56:54.730 回答
0

感谢您的所有回答,但是我终于有了不同的方法,那就是禁用中央存储库并在每个 pom.xml 中添加项目关系存储库。

这样做的缺点是,如果要充分发挥作用,它需要在每个pom 中,而不仅仅是父级。

但是,它是每个项目的一次性配置,每个开发人员唯一需要添加到他们的 settings.xml 的就是他们的 nexus 存储库的凭据,这使得新开发人员的启动变得更简单。

另一个缺点是,如果我在项目之外运行 maven,就像archetype:generatemaven 不知道我的 nexus repo 一样,我需要在命令行上指定它。我相信我可以在我的 settings.xml 中配置一个默认存储库,但我还没有进一步探索。

我也不必考虑我正在从事哪个项目,当我运行 maven 时,该项目知道要使用哪个存储库,这对我来说非常重要。

我怀疑不是每个人都同意这是最好的解决方案,但它对我有用,而且开销是可以接受的。

这就是我在每个 pom 中的配置的样子

    <repositories>
      <repository>
        <id>my-nexus-repo</id>
        <url>http://nexus.mycompany.com/content/groups/private/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>my-nexus-repo</id>
        <url>http://nexus.mycompany.com/content/groups/private/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </pluginRepository>
    <pluginRepository>
        <id>central</id>
        <url>http://repo1.maven.org/maven2</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>
于 2012-10-19T06:35:12.043 回答