我为两家不同的公司担任顾问,这两家公司都使用 maven 并且都有自己的 nexus 存储库管理器。我已经将 maven 与两个存储库管理器一起使用,它工作正常,但每次切换客户时,我都需要更改存储库管理器地址所在的 settings.xml 文件。
有没有办法解决这个问题?为了让 Maven 根据我正在构建的项目找出要使用的存储库管理器?我可以轻松地编辑两个项目中的 pom 文件,并在需要时激活不同的配置文件。
最好的方法是将 .m2/ 置于 Git 等 VCS 的控制之下,并使用不同的分支更改设置(忽略存储库本身)。
git checkout CUSTOMER1
git checkout CUSTOMER2
这是我目前的解决方案。非常简单有效,而且我对 settings.xml 所做的每一次更改都在版本控制之下。
在类似的情况下,我怀疑在为每个客户工作时我会使用不同的登录名。这对于您的个人资料(例如电子邮件帐户)来说不是很方便,但是知道所有内容都是分开的,我会感到更安全。
另一方面,如果您不担心,您可以考虑在您的机器上设置 Nexus 作为您客户存储库的代理。
我建议设置 Nexus 的本地副本,在您的机器上作为代理运行。从那里您代理两个外部存储库。
然后就部署到不同的存储库而言,您不需要做任何事情,因为它们已经在项目分发管理中使用了不同的 url。
如果您绝对必须将它们分开,我建议使用两个不同的 settings.xml 文件将它们分开,并使用 -s 指定正确的设置文件调用 mvn。
为方便起见,您可以为这些调用创建一个 shell 别名。
如果您在其中使用相同的 settings.xml 和配置文件,则您没有相同的分隔,但它也可以工作。然后,您还可以创建别名以使事情更清洁..
感谢您的所有回答,但是我终于有了不同的方法,那就是禁用中央存储库并在每个 pom.xml 中添加项目关系存储库。
这样做的缺点是,如果要充分发挥作用,它需要在每个pom 中,而不仅仅是父级。
但是,它是每个项目的一次性配置,每个开发人员唯一需要添加到他们的 settings.xml 的就是他们的 nexus 存储库的凭据,这使得新开发人员的启动变得更简单。
另一个缺点是,如果我在项目之外运行 maven,就像archetype:generate
maven 不知道我的 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>