2013-01-15 142 views

回答

23

Maven - Settings Reference

下载和部署存储库是由POM的repositoriesdistributionManagement元素来定义。但是,某些设置(如用​​户名和密码)不应与pom.xml一起分发。这种类型的信息应该存在于settings.xml中的构建服务器上。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
        http://maven.apache.org/xsd/settings-1.0.0.xsd"> 
    ... 
    <servers> 
    <server> 
     <id>server001</id> 
     <username>my_login</username> 
     <password>my_password</password> 
     <privateKey>${user.home}/.ssh/id_dsa</privateKey> 
     <passphrase>some_passphrase</passphrase> 
     <filePermissions>664</filePermissions> 
     <directoryPermissions>775</directoryPermissions> 
     <configuration></configuration> 
    </server> 
    </servers> 
    ... 
</settings> 

ID:这是服务器(不是用户为登录)的是档案库/镜Maven在尝试连接到的id元素相匹配的ID。

用户名,密码:这些元素显示为一对,表示对此服务器进行身份验证所需的登录名和密码。

privateKey,密码短语:与前两个元素一样,此对指定私钥的路径(默认为${user.home}/.ssh/id_dsa)和密码(如果需要)。密码和密码元素可能在将来被外化,但现在它们必须在settings.xml文件中设置为纯文本。

filePermissions,directoryPermissions:当在部署中创建存储库文件或目录时,这些是使用权限。每个的合法值都是一个三位数字,与* nix文件权限相对应,即。 664或775.

注意:如果您使用私钥登录到服务器,请确保您省略该元素。否则,密钥将被忽略。

所有,如果您需要的是idusernamepassword

idURL应该在pom.xml这样的定义:

<repositories> 
    ... 
    <repository> 
     <id>acme-nexus-releases</id> 
     <name>acme nexus</name> 
     <url>https://nexus.acme.net/content/repositories/releases</url> 
    </repository> 
    ... 
</repositories> 

如果你需要一个用户名和密码登录服务器,你应该加密它。 Maven Password Encryption

4

Apache Maven site

<project> 
    ... 
    <repositories> 
    <repository> 
     <id>my-internal-site</id> 
     <url>http://myserver/repo</url> 
    </repository> 
    </repositories> 
    ... 
</project> 

“的资料库下载和部署是由仓库和POM的distributionManagement元素定义的。然而,某些设置,如用户名和密码不应该随着分布式pom.xml。这种类型的信息应该存在于构建服务器的settings.xml文件中。“ - Apache Maven site - settings reference

<servers> 
    <server> 
     <id>server001</id> 
     <username>my_login</username> 
     <password>my_password</password> 
     <privateKey>${user.home}/.ssh/id_dsa</privateKey> 
     <passphrase>some_passphrase</passphrase> 
     <filePermissions>664</filePermissions> 
     <directoryPermissions>775</directoryPermissions> 
     <configuration></configuration> 
    </server> 
</servers> 
2

maven setting reference,你不能把你的用户名/密码在一个pom.xml

的资料库下载和部署由仓库和POM的distributionManagement元素被定义。但是,某些设置(如用​​户名和密码)不应与pom.xml一起分发。这种类型的信息应该存在于settings.xml中的构建服务器上。

您可以先在你的POM中添加存储库,然后在$ MAVEN_HOME/conf目录/ settings.xml中添加用户名/密码:

<servers> 
    <server> 
     <id>my-internal-site</id> 
     <username>yourUsername</username> 
     <password>yourPassword</password> 
    </server> 
    </servers> 
+0

不一定真正。您可能能够将其放入您的POM或settings.xml中。是否应该把它放在与特定用例有关的意见问题上。声明“不能”正在阅读Maven设置参考。 – ingyhere

9

我只能强烈建议你阅读的第一Nexus book。它将解释使用Maven存储库管理器的好处。

有关于如何将Maven构建配置才能使用Nexus一个部分:

这使我质疑为什么你改变你的POM文件?我怀疑你真正想要做的是将Nexus设置为远程存储库镜像。这是在你的Maven设置文件中完成的。

下面告诉Maven使用的Nexus作为默认存储库

<settings> 
    .. 
    .. 
    <mirrors> 
    <mirror> 
     <id>nexus</id> 
     <url>http://localhost:8081/nexus/content/groups/public</url> 
     <mirrorOf>central</mirrorOf> 
    </mirror> 
    </mirrors> 

这是期望的行为,因为你的Nexus仓库被配置为从中央(检索缓存文物(而不是Maven Central),这是很好的构建性能)。

注:

  • “公共”资源库群可能包括由您的Nexus实例(不仅仅是Maven的中央)代理其他存储库。您可能需要这种行为,因为它集中了所有存储库管理。它只是让您的构建对组织之外的人更加便携。
5

看起来这里的答案不支持企业用例,其中Nexus服务器有多个用户,并且基于用户ID ALONG使用像Jenkins这样的自动构建(CI)系统的基于项目的隔离(保护) 。您将无法创建settings.xml文件来满足不同项目所需的不同用户ID。我不知道如何解决这个问题,除非打开Nexus直到读取存储库的匿名访问,除非项目可以在他们的pom.xml中存储项目特定的通用用户标识。

+0

+1 - 正确。该页面上的其他评论并未思考或者完全误解了文档。 – ingyhere

+0

@ kevin-buchs为什么不为每个项目创建一个_settings.xml_文件,并使用_mvn clean install -s projectA-settings.xml_明确链接到Jenkins作业中正确的一个。 – ajeans

1

如果你不想或者不能修改settings.xml文件,你可以创建你的根项目一个新的,并呼吁行家把它当作一个参数与-s参数:

$ mvn COMMAND ... -s settings.xml 
相关问题