settings.xml上的存储库组身份验证

时间:2011-11-24 20:58:33

标签: maven settings nexus

我正在使用nexus为这个场景生成maven settings.xml:

  • my-releases-repo
  • 我的快照回购

两者都进入了我的小组,我有一个角色,允许用户对我的小组进行讨论。

因此,在settings.xml中定义了服务器,id为my-group,它是相应的user和passwd。当然,也将存储库定义为活动配置文件,如下所示:

<repositories>
   <repository>
      <id>my-group</id>
      <releases>
         <enabled>true</enabled>
         <checksumPolicy>warn</checksumPolicy>
      </releases>
      <snapshots>
         <enabled>true</enabled>
         <updatePolicy>always</updatePolicy>
         <checksumPolicy>warn</checksumPolicy>
      </snapshots>
      <url>http://my.nexus.corp/content/groups/my-group</url>
   </repository>

使用此配置,用户可以对这两个存储库进行身份验证并从中下载工件,但不能进行部署。

最后一个问题是:settings.xml中提供的服务器身份验证仅适用于为存储库组定义的读取,视图方法?

当然,如果我添加指向每个存储库id的服务器(不在配置文件中添加这些存储库,只保留my-group),则部署可以正常工作。

我的想法是使用存储库组身份验证提供更简单的settings.xml,避免为每个服务器(repo)设置密码,因为它是同一个用户。

2 个答案:

答案 0 :(得分:0)

听起来你错过了pom.xml或settings.xml文件中的<distributionManagement>节。如果要将工件部署到repo,则需要这样做。

请注意,您在<servers>节中的settings.xml文件中定义的凭据适用于存储库,pluginRepositories和配置。你只需要添加额外的东西 - 例如,这里是我们用作所有Maven项目的父级的标准pom:

<repositories>
    <!-- WARNING: If you change the Id of ANY of these repos, you will need to update every settings.xml
        file on every machine including the Hudson CI server. -->
    <!-- NOTE: All of these repositories use externally accessible URLs, but you can override with LAN
        URLs by configuring mirrors in settings.xml -->
    <repository>
        <id>mycorp-release</id>
        <name>Nexus repository for artifact releases</name>
        <url>https://intranet.mycorp.com/nexus/content/repositories/releases</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>mycorp-snapshot</id>
        <name>Nexus repository for artifact SNAPSHOTs</name>
        <url>https://intranet.mycorp.com/nexus/content/repositories/snapshots</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>mycorp-plugin-release</id>
        <name>Nexus repository for plugin artifact releases</name>
        <url>https://intranet.mycorp.com/nexus/content/repositories/releases</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>
<distributionManagement>
    <repository>
        <!-- Where to put released artifacts -->
        <id>mycorp-release</id>
        <name>Nexus release artifact deployment repository</name>
        <url>https://intranet.mycorp.com/nexus/content/repositories/releases</url>
    </repository>
    <snapshotRepository>
        <!-- Where to put snapshot artifacts -->
        <id>mycorp-snapshot</id>
        <name>Nexus snapshot artifact deployment repository</name>
        <url>https://intranet.mycorp.com/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>

答案 1 :(得分:0)

只要处于不同的上下文中,您就可以对所有服务器使用相同的ID。我建议使用distributionManagement进行发布和快照部署,并使用相同的id。

为了阅读jars,我只会引用您添加发行版和快照存储库的公共组。然后,settings.xml将与“使用Nexus进行存储库管理”一书中的内容完成:

http://books.sonatype.com/nexus-book/reference/maven-sect-single-group.html