Развертывание jar на Nexus с помощью Maven Ant Task - PullRequest
1 голос
/ 16 апреля 2020

Я схожу с ума здесь. Я просто пытаюсь загрузить jar на сервер Nexus, используя Maven Ant Task, но когда я запускаю файл build. xml, используя ant, я получаю следующую ошибку

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

Это то, что моя сборка. 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 не передает имя пользователя и пароль при загрузке файла, и вызывает сбой, поскольку для загрузки файла необходимы учетные данные.

По умолчанию это не проблема конфигурации Nexus или проблема с разрешениями пользователей Nexus, потому что, если я использую maven и запускаю

mvn deploy

С той же самой информацией он загружает банку без проблем

Любое предложение будет очень признателен, прежде чем у меня не осталось волос ...

1 Ответ

0 голосов
/ 17 апреля 2020

Таким образом, вся заслуга здесь go для @ user944849 за то, что я осознал, что задачи maven ant на самом деле сняты с производства в соответствии с веб-сайтом

Maven Ant Tasks Website

В самом верху страницы прямо сказано, что он вышел на пенсию, а также что его заменили на Задачи муравья с разрешением артефактов Maven. Поэтому я дал ему go и точно так же, как magi c, который работал первым go.

. Я также заставил его работать с обработкой отправки снимков и выпусков в правильные репозитории. Это обрабатывается помпой, который вы связываете, и версией проекта, версия 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 выдавал мне ошибки зависимостей при запуске файла сборки, поэтому вместо этого я загрузил исходный код с веб-сайта , а затем запустил

mvn package -DskipTests=true

Причина, по которой я запустил пропущенные тесты, заключалась в том, что некоторые тесты по какой-то причине были неудачными. Я думаю, вы могли бы попытаться выяснить, почему и удалите этот переключатель.

Вы найдете в целевом каталоге файл Uber jar. скопируйте это в вашу директорию lib и тогда все будет работать как magi c.

Happy ant'ing:)

...