启用 Maven 加密的 Nexus 访问被拒绝

Posted

技术标签:

【中文标题】启用 Maven 加密的 Nexus 访问被拒绝【英文标题】:Nexus access denied with maven encryption enabled 【发布时间】:2014-07-17 20:55:09 【问题描述】:

我刚刚在我的项目中添加了 maven 加密,所以我的 settings.xml 文件中的所有密码都是加密的。当我尝试通过执行以下操作来联系我的 nexus 服务器时

mvn clean install -DskipTests

然后所有依赖项都被正确下载并且构建成功。但是,当我也通过执行

来运行测试时
mvn clean install

然后,当测试阶段开始并且 maven 尝试联系 nexus 以获取测试相关依赖项时,似乎对 nexus 的访问被拒绝,好像 surefire:test 插件目标忽略了 maven 加密并尝试连接到 nexus密码错误。

一个示例异常是:

-------------------------------------------------------

T E S T S
-------------------------------------------------------
Running com.activity.dashboard.DashboardActivityTest
Downloading: org/robolectric/android-all/4.3_r2-robolectric-0/android-all-4.3_r2-robolectr
ic-0.pom from repository nexus at http://xxx.xxx.xxx.xxx:7222/nexus/content/groups/public
Access denied to: http://xxx.xxx.xxx.xxx:7222/nexus/content/groups/public/org/robolectric/a
ndroid-all/4.3_r2-robolectric-0/android-all-4.3_r2-robolectric-0.pom
[WARNING] Unable to get resource 'org.robolectric:android-all:pom:4.3_r2-robolectric-0' fr
om repository nexus (http://xxx.xxx.xxx.xxx:7222/nexus/content/groups/public): Authorizatio
n failed: Access denied to: http://xxx.xxx.xxx.xxx:7222/nexus/content/groups/public/org/rob
olectric/android-all/4.3_r2-robolectric-0/android-all-4.3_r2-robolectric-0.pom

编辑:

settings.xml 如下所示:

<settings>

    <servers>
        <server>
            <id>nexus</id>
            <username>maven</username>
            <password>encryptedpassword</password>
        </server>
    </servers>

    <mirrors>
        <mirror>
            <id>nexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://xxx.xxx.xxx.xxx:7222/nexus/content/groups/public</url>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>nexus</id>
            <repositories>
                <!--Overriding the central repo to allow snapshots.-->
                <repository>
                    <id>central</id>
                    <!--Url will eventually get overridden by the mirror url.-->
                    <url>fake url</url>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>

    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>

</settings>

另外,我的父 pom.xml 包含可能相关的分发管理部分:

<distributionManagement>
    <snapshotRepository>
        <uniqueVersion>true</uniqueVersion>
        <id>nexus</id>
        <name>Nexus Follower Snapshot Repository</name>
        <url>http://xxx.xxx.xxx.xxx:7222/nexus/content/repositories/snapshots/</url>
        <layout>default</layout>
    </snapshotRepository>
</distributionManagement>

上传和下载快照工作正常。

【问题讨论】:

我们在工作中使用相同的设置,我们没有这样的问题。您确定您已正确诊断问题吗?我们可以查看您的设置文件吗(当然,经过适当编辑)? 不太确定。问题是,只要我将 settings.xml 上的密码更改为未加密的密码,那么一切正常。 【参考方案1】:

有趣的是,今天再次尝试加密后,它毫无例外地正常工作。不确定是什么原因造成的,可能是 Intellij 中缓存的东西,甚至是 maven/nexus 版本。

【讨论】:

以上是关于启用 Maven 加密的 Nexus 访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

XP系统可以看到共享文件夹却拒绝访问

在 Web API 中启用了 CORS,但访问被拒绝

CORS 已启用,但访问仍被拒绝

在 Spring Security 中启用 CSRF 时,访问被拒绝 403

win7位 连接共享打印机 0x00000043报错,本地端口添加被拒绝访问。有啥解决方法吗?

未能执行目标... maven-install-plugin ... 无法安装工件...(访问被拒绝)