使用Maven Ant Task将jar部署到Nexus

问题描述 投票:1回答:1

我在这里完全发疯。我只是尝试使用Maven Ant Task将罐子上传到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响应代码,表示未经授权。另外,上面的日志行中的第3个参数应显示用户名,因此这种倾向倾向于ant在上传文件时不传递用户名和密码,并且失败,因为您需要凭据才能上传文件。

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

mvn deploy

使用相同的信息,它没有问题地上传了罐子

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

maven ant nexus
1个回答
0
投票
所以这里所有的功劳都必须归功于@ user944849,以使我知道根据website现在实际上已经淘汰了Maven ant任务>

Maven Ant Tasks 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解析器ant任务。我发现在运行构建文件时,maven Central中的一个正在给我依赖性错误,所以我要做的是从website下载源代码,然后运行

mvn package -DskipTests=true

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

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

快乐蚂蚁:)

© www.soinside.com 2019 - 2024. All rights reserved.