【问题标题】:Deploying jar to Nexus using Maven Ant Task使用 Maven Ant Task 将 jar 部署到 Nexus
【发布时间】:2020-04-16 12:44:43
【问题描述】:

我快疯了。我只是尝试使用 Maven Ant Task 将 jar 上传到 Nexus 服务器,但是当我使用 ant 运行 build.xml 文件时出现以下错误

Deploying to http://nexus.xxxx.co.uk:8081/repository/maven-snapshots/
[INFO] Retrieving previous build number from snapshot
Uploading: com/xxx/xxx-yyy-zzz/3.0.0-SNAPSHOT/xxx-yyy-zzz-3.0.0-SNAPSHOT.jar to repository snapshot at http://nexus.xxxxx.co.uk:8081/repository/maven-snapshots/
Transferring 1091K from snapshot
Error writing to server
An error has occurred while processing the Maven artifact tasks.
 Diagnosis:

Error deploying artifact 'com.xxx-yyy-zzz': Error deploying artifact: Error transferring file
Error writing to server

这就是我的 build.xml 文件的样子

<project name="deploy" default="mvn-deploy" xmlns:artifact="antlib:org.apache.maven.artifact.ant">

    <path id="maven-ant-tasks.classpath" path="lib/maven-ant-tasks-2.1.3.jar"/>
    <typedef resource="org/apache/maven/artifact/ant/antlib.xml"
             uri="antlib:org.apache.maven.artifact.ant"
             classpathref="maven-ant-tasks.classpath"/>

    <artifact:remoteRepository id="snapshot" url="http://nexus.xxxx.co.uk:8081/repository/maven-snapshots/">
        <releases enabled="false"/>
        <snapshots enabled="true"/>
    </artifact:remoteRepository>

    <target name="mvn-deploy">
        <artifact:deploy file="/path/to/jar/xxx-yyy-zzz-3.0.0-SNAPSHOT.jar"
                         uniqueVersion="false">
            <remoteRepository refid="snapshot">
                <authentication username="username" password="password"/>
            </remoteRepository>
            <pom file="/path/to/pom/pom.xml"/>
        </artifact:deploy>
    </target>
</project>

我想我已经阅读了每篇博客文章/stackoverflow 文章、ant 文档页面,但仍然无法弄清楚为什么这不起作用。

在 Nexus 服务器上,这是日志显示的内容 (request.log)

77.101.44.67 - - [16/Apr/2020:12:08:03 +0000] "PUT /repository/maven-snapshots/com/xxx/xxx-yyy-zzz/3.0.0-SNAPSHOT/xxx-yyy-zzz-3.0.0-20200416.120803-3.jar HTTP/1.1" 401 1117368 0 1 "maven-artifact/2.2.1 (Java 1.8.0_31; Mac OS X 10.13.6)" [qtp615812221-41545]
77.101.44.67 - - [16/Apr/2020:12:08:03 +0000] "PUT /repository/maven-snapshots/com/xxx/xxx-yyy-zzz/3.0.0-SNAPSHOT/xxx-yyy-zzz-3.0.0-20200416.120803-3.jar HTTP/1.1" 401 1117368 0 1 "maven-artifact/2.2.1 (Java 1.8.0_31; Mac OS X 10.13.6)" [qtp615812221-41531]

正如您从日志中看到的那样,我收到了 401 HTTP 响应代码,这意味着未经授权。此外,上面日志行中的第三个参数应该显示用户名,因此这种倾向于 ant 在上传文件时不传递用户名和密码,并且由于您需要凭据来上传文件而失败。

它的 defo 不是 Nexus 配置问题或 nexus 用户权限问题,因为如果我使用 maven 并运行

mvn deploy

使用相同的信息,它可以毫无问题地上传 jar

在我没有头发之前,任何建议都将不胜感激......

【问题讨论】:

  • 你为什么使用 maven ant taks 而不是 Maven 本身?
  • @khmarbaise - 我实际上正在尝试调试 grails 插件,grails 发布插件。我正在尝试将 grails 插件部署到 nexus,但它一直失败,在调试插件本身之后,我发现该插件使用 maven ant 任务将文件传输到 nexus,因此我的问题。所以我想从问题中取出 grails 的上下文,因为我认为它与 grails 或插件无关,而是与 maven ant 任务有关,因为我从 grails 插件和这个 ant 目标中得到完全相同的行为以上。
  • maven-ant-tasks 已停用。根据website,它最后一次发布是在 2014 年,并且很长时间没有得到支持。我强烈建议您寻找另一种选择。我知道的一个问题是,有时插件拒绝正确考虑settings.xml 文件。
  • @user944849 - 感谢您让我知道 maven ant 任务正在退休,我不知道。我最终测试的是使用 AntBuilder 类和 antlib 向 Nexus 服务器发出相同的请求。我只是假设他们正在做与 maven ant 任务相同的事情,因此我为什么要尝试对此进行测试。所以我想我可以尝试使用 Maven Artifact Resolver Ant Tasks 进行测试,但我不确定这是否与 antlib 和 AntBuilder 相同。对此有何建议?

标签: maven ant nexus


【解决方案1】:

所以这里的所有功劳都归功于@user944849,让我知道maven ant 任务现在实际上已经按照website退休了

在页面顶部,它清楚地表明它已退役,并且它已被 Maven Artifact Resolver Ant Tasks 取代。所以我试了一下,就像魔术一样先行。

我还让它处理将快照和版本发送到正确的存储库。这由您链接的 pom 和项目版本处理,SNAPSHOT 版本转到快照存储库,非 SNAPSHOT 版本转到发布存储库

对于任何发现这个的人,这是我创建和使用的 build.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:resolver="antlib:org.apache.maven.resolver.ant">
    <taskdef uri="antlib:org.apache.maven.resolver.ant" resource="org/apache/maven/resolver/ant/antlib.xml">
        <classpath>
            <fileset dir="lib" includes="maven-resolver-ant-tasks-1.2.0-uber.jar"/>
        </classpath>
    </taskdef>

    <resolver:authentication username="user" password="pass" id="auth"/>

    <resolver:remoterepo id="ossrh" url="http://nexus.xxxx.co.uk:8081/repository/maven-snapshots/"
                type="default" releases="false" snapshots="true" updates="always" checksums="fail">
        <resolver:authentication refid="auth"/>
    </resolver:remoterepo>

    <resolver:remoterepo id="rao" url="http://nexus.xxxxx.co.uk:8081/repository/maven-releases/">
        <resolver:releases enabled="true" updates="daily" checksums="warn"/>
        <resolver:snapshots enabled="false"/>
        <resolver:authentication refid="auth"/>
    </resolver:remoterepo>

    <resolver:remoterepos id="all">
        <resolver:remoterepo refid="ossrh"/>
        <resolver:remoterepo refid="rao"/>
    </resolver:remoterepos>

    <resolver:artifacts id="producedArtifacts">
        <resolver:artifact file="/path/to/jar/xxx-yyy-zzz-3.0.0-SNAPSHOT.jar"/>
    </resolver:artifacts>

    <resolver:pom file="/path/to/pom/pom.xml" id="pom"/>

    <target name="deploy">
        <resolver:deploy artifactsref="producedArtifacts">
            <resolver:remoterepo refid="rao"/>
            <resolver:snapshotrepo refid="ossrh" />
        </resolver:deploy>
    </target>
</project>

这里唯一的主要问题是文件顶部的 taskdef 需要 jar 用于 maven resolver ant 任务。我发现 maven Central 中的那个在我运行构建文件时给了我依赖错误,所以我所做的是从website 下载源代码,然后我运行了

mvn package -DskipTests=true

我运行跳过测试的原因是某些测试由于某种原因失败了,我想您可以尝试找出原因并删除该开关。

您会在目标目录中找到 Uber jar,将其复制到您的 lib 目录中,然后一切都像魔术一样工作。

安宁快乐 :)

【讨论】:

    猜你喜欢
    • 2012-05-19
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2018-04-07
    • 2018-06-28
    • 2013-08-11
    • 1970-01-01
    相关资源
    最近更新 更多