4

我难住了。我正在使用 ant 和 maven-ant-tasks 构建快照工件(非 maven)并将其部署到远程 nexus 存储库。构建过程指定存储库的 url。这是运行的 ant 目标:

<target name="shared_resources_war_deploy" depends="shared_resources_war">
    <artifact:pom id="sharedResourcesPom" file="${resourcesdir}/shared-resources-pom.xml" />
    <echo message="**************************${nexus.url}*************************" />
    <artifact:deploy file="${resourcesdir}/shared-resources.war">
        <remoteRepository url="${nexus.url}">
            <authentication username="${nexusUserName}" password="${nexusUserPassword}" /> 
        </remoteRepository>
        <pom refid="sharedResourcesPom"/>
    </artifact:deploy>
</target>

结果:

shared_resources_war_deploy:
     [echo] **************************http://${nexusIP}:8081/nexus/content/repositories/snapshots*************************
[artifact:deploy] Deploying to http://${nexusIP}:8081/nexus/content/groups/public
[artifact:deploy] [INFO] Retrieving previous build number from nexus
[artifact:deploy] Uploading: com/xactsites/shared-resources/13.1.19-SNAPSHOT/shared-resources-13.1.19-20121211.172831-28.war to repository nexus at http://${nexusIP}:8081/nexus/content/groups/public
[artifact:deploy] Transferring 2K from nexus
[artifact:deploy] An error has occurred while processing the Maven artifact tasks.
[artifact:deploy]  Diagnosis:
[artifact:deploy]
[artifact:deploy] Error deploying artifact 'com.xactsites:shared-resources:war': Error deploying artifact: Failed to transfer file: http://${nexusIP}:8081/nexus/content/groups/public/com/xactsites/shared-resources/13.1.19-SNAPSHOT/shared-resources-13.1.19-20121211.172831-28.war. Return code is: 400
[artifact:deploy]

BUILD FAILED
C:\Users\11_1_15\build.xml:561: The following error occurred while executing this line:
C:\Users\11_1_15\build.xml:551: Error deploying artifact 'com.xactsites:shared-resources:war': Error deploying artifact: Failed to transfer file: http://${nexusIP}:8081/nexus/content/groups/public/com/xactsites/shared-resources/13.1.19-SNAPSHOT/shared-resources-13.1.19-20121211.172831-28.war. Return code is: 400

由于某些超出我理解的原因,maven 正试图部署到公共存储库(nexus 不允许)而不是指定的快照存储库(注意 nexus.url 变量)。构建文件中没有指定公共 URL。

更奇怪的是,在一台机器上,相同的构建脚本成功地部署了相同的工件,结果如下:

shared_resources_war_deploy:
     [echo] **************************http://${nexusIP}:8081/nexus/content/repositories/snapshots*************************
[artifact:deploy] Deploying to http://${nexusIP}:8081/nexus/content/repositories/snapshots
[artifact:deploy] [INFO] Retrieving previous build number from remote
[artifact:deploy] Uploading: com/xactsites/shared-resources/13.1.19-SNAPSHOT/shared-resources-13.1.19-20121211.172031-27.war to repository remote at http://${nexusIP}:8081/nexus/content/repositories/snapshots
[artifact:deploy] Transferring 2K from remote
[artifact:deploy] Uploaded 2K
[artifact:deploy] [INFO] Retrieving previous metadata from remote
[artifact:deploy] [INFO] Uploading repository metadata for: 'snapshot com.xactsites:shared-resources:13.1.19-SNAPSHOT'
[artifact:deploy] [INFO] Uploading project information for shared-resources 13.1.19-20121211.172031-27
[artifact:deploy] [INFO] Retrieving previous metadata from remote
[artifact:deploy] [INFO] Uploading repository metadata for: 'artifact com.xactsites:shared-resources'

BUILD SUCCESSFUL

实际使用指定 URL 的位置。在比较两台机器时,ant(1.8.1 版)和 maven-ant-tasks(2.1.3)都是同一个版本。关系日志表明传入的请求在两者之间是不同的(其中一个指定快照存储库,另一个指定公共存储库),所以我想将此错误固定在 Maven 上。但是,我无法确定会导致这种情况的任何差异。

这是怎么回事?!

更新:

在嗅探数据包后,我们发现来自 maven 的请求被发送到:/nexus/content/groups/public/com/xactsites/shared-resources/13.1.19.2/shared-resources-13.1.19.2.war HTTP/1.1,在发送请求之前确认 maven 正在更改 URL。因此,解决此问题的任何努力都可以集中在 maven(而不是 nexus)上。

4

2 回答 2

2

经过一些痛苦的研究和一位同事的侥幸错字开辟了一条新的探索途径,我们找到了原因。本质上,如果 M2/M2_HOME 环境变量按照此处指定的方式设置,那么远程存储库 url 将被我们的 settings.xml 文件中的内容覆盖,并使用为 nexus 设置的镜像(因此使用了错误的只读 URL用于部署)。

这似乎是 pom 中使用<distributionManagement>元素以及使用<remoteRepository>ant 文件中的元素的问题。已经为此提交了一个错误

决议:

我们将其范围缩小到具有<mirrorOf>*</mirrorOf>“*”导致此问题的集合。将 * 替换为特定存储库(例如“中央”)可解决此问题。

同样,不设置 M2 环境变量也可以解决此问题,因为它无法访问 settings.xml 文件来获取 URL。当然,如果您在运行部署时依赖于 settings.xml 中的一些其他内容,那么您不会希望采用这种方法。

ugh,这是一个令人痛苦的错误。

于 2012-12-13T00:15:18.627 回答
0

这似乎在 2.1.4-SNAPSHOT 版本中得到解决。

于 2014-09-24T18:12:54.237 回答