带有user settings.xml和项目特定settings.xml的Maven

带有user settings.xml和项目特定settings.xml的Maven,maven,Maven,我有几个项目指向不同的内部存储库。一个项目上的用户可能无法看到另一个项目上的存储库,因此我需要为每个项目指定一个特定于项目的settings.xml 指示我可以通过使用创建MVN\u ROOT/.MVN/maven.config来执行此操作 --设置。/.mvn/settings.xml 然后将存储库信息放入MVN\u ROOT/.MVN/settings.xml中 这似乎可行,我可以将这些文件添加到git,其他用户可以自动使用存储库 但是,存储库需要验证,这需要settings.xml包含以下

我有几个项目指向不同的内部存储库。一个项目上的用户可能无法看到另一个项目上的存储库,因此我需要为每个项目指定一个特定于项目的
settings.xml

指示我可以通过使用创建
MVN\u ROOT/.MVN/maven.config
来执行此操作

--设置。/.mvn/settings.xml

然后将存储库信息放入
MVN\u ROOT/.MVN/settings.xml

这似乎可行,我可以将这些文件添加到git,其他用户可以自动使用存储库

但是,存储库需要验证,这需要
settings.xml
包含以下内容

...
<server>
  <id>repo-proj-1</id>
  <username>me</username>
  <password>secret</password>
</server>
<server>
  <id>repo-proj-2</id>
  <username>my.name</username>
  <password>secure</password>
</server>
...
。。。
repo-proj-1
我
秘密
repo-proj-2
我的名字
保护
...
显然,我不想把这些信息放到git存储库中
~/.m2/settings.xml
是放置这些信息的明显位置。然而,似乎我只能有一个用户设置文件,因为在我尝试构建时没有获取我的登录信息

有没有办法同时使用这两个设置文件

这需要在Mac、Linux和Windows上运行,因此类似于
~/.m2/settings.xml
(xml包含,可能不是正确的语法)的东西将无法工作,因为
~/.m2
在Windows上通常不是正确的位置


我们使用的是Maven 3,如果需要特定的最新版本,我们可以要求用户升级到该版本。

如何将机密视为环境变量

<server>
  <id>repo-proj-2</id>
  <username>${user}</username>
  <password>${pass}</password>
</server>

应该有一个包含快照的中央存储库和另一个包含发布的存储库,以及存储库管理器中的一个组,该组将它们组合起来以供使用。这应该在位于用户主目录或CI服务器配置中的
settings.xml
中配置

到存储库的部署只能由CI服务器完成,而不能由开发人员完成

在CI服务器中,您应该正确设置由CI服务器托管的凭据(Jenkins:credentials Store)等

如果您需要按项目单独设置
settings.xml
,这是安装程序中的一个设计问题,并且会导致许多问题

不同项目的分离是Maven存储库中的一项基本工作,该存储库称为坐标,它是groupId和artifactId plus版本的组合


通常,
settings.xml
应仅位于用户主目录中,该目录包含用户凭据(如果需要)(如前所述,与加密结合使用)。

有帮助吗?为什么使用不同的存储库?违反了存储库管理器的概念…根据shell设置,这会使命令历史记录中的密码未加密,而这些密码可以保留到磁盘。@user944849生成计算机必须知道密码,即使在加密时,也必须提供主密码。这取决于工具。我们正在使用docker映像进行管道运行,实例将在构建过程完成后销毁。销毁实例可确保密码不会持久化。一个幼稚的方法可能会让密码不受保护,而我的评论仅仅是鼓励人们考虑这一点。如果变量是“代码>项目-2,用户< /代码>和类似的,那么它们可以被设置在<代码>。BASHC (或由该文件提供的一些文件),这看起来几乎和将它们存储在<代码> .M2/Stutial.XML/COD>中一样安全。(如果有人可以看到我的环境变量,那么他们可能也可以看到我系统上的文件。)。
mvn -s ./build/settings.xml -Duser=xxx -Dpass=xxx clean install