Развертывание Jar-артефакта в Nexus приводит к несоответствию типов контента - PullRequest
0 голосов
/ 04 мая 2018

Я использую Nexus Repository Manager v3.1.0-04. Когда я пытаюсь mvn deploy jar-артефакт в своем хранилище, я получаю следующую проблему.

[ОШИБКА] Не удалось выполнить цель org.sonatype.plugins: нексус-стадирования-Maven-плагин: 1.5.1: развернуть (injected-nexus-deploy) в проекте rest-service: не удалось развернуть артефакты: не удалось передать артефакт com.xyz:rest-service:jar:0.0.1-20180504.193415-6 от / до нексуса (http://nexus.mydomain.io/repository/snapshots/): Не удалось передать файл: http://nexus.mydomain.io/repository/snapshots/com/xyz/rest-service/0.0.1-SNAPSHOT/rest-service-0.0.1-20180504.193415-6.jar. Код возврата: 400, ReasonPhrase: обнаружен тип контента [application / x-sh], но ожидаемый [application / java-архив]: ком / хуг / отдых-сервис / 0.0.1-SNAPSHOT / отдых-сервис 0.0.1-20180504.193415-6.jar. -> [Помощь 1]

Я подумал, что, возможно, это связано с версией nexus-staging-maven-plugin ( ссылка ), но даже если я установлю версию на 1.6.8 (последняя), я получу тот же эффект. В этом посте предлагается использовать build-helper-maven-plugin, и поэтому я изменил свой pom.xml следующим образом.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
        <id>attach-artifacts</id>
        <phase>package</phase>
        <goals>
            <goal>attach-artifact</goal>
        </goals>
        <configuration>
            <artifacts>
            <artifact>
                <file>target/${artifactId}-${version}.jar</file>
                <type>jar</type>
            </artifact>
            </artifacts>
        </configuration>
        </execution>
    </executions>
</plugin>

Однако сейчас я вижу другую проблему.

[ОШИБКА] Не удалось выполнить цель org.codehaus.mojo: строить-хелперов-Maven-плагин: 3.0.0: присоедините-артефакт (attach-artifacts) в проекте rest-service: выполнение attach-artifacts цели org.codehaus.mojo: строить-хелперов-Maven-плагин: 3.0.0: присоедините-артефакт не удалось: для артефакта {com.xyz:rest-service:0.0.1-SNAPSHOT:jar}: An прикрепленный артефакт должен иметь другой идентификатор, чем соответствующий ему основной артефакт. -> [Помощь 1]

Обратите внимание, что проект Maven создается Spring Initializer через IntelliJ и является проектом Spring Boot. Не используя плагин Builder Helper , я вижу, что все файлы успешно выгружаются в Nexus до тех пор, пока не завершится загрузка файла jar (на самом деле загрузка завершена, но из-за несоответствия типа содержимого происходит сбой).

Есть идеи, как решить эту проблему? В сообщении, о котором я упоминал, говорится: «Некоторые репозитории maven проверяют содержимое файла», и как мне отключить Nexus (который я контролирую) при проверке содержимого файла? Но настоящая проблема в том, почему тип контента application/x-sh вместо application/java-archive?

1 Ответ

0 голосов
/ 04 мая 2018

В настройках рассматриваемого репозитория (URL-адрес в сообщении об ошибке упоминает репозиторий «Снимки»), Хранение : отключить параметр Строгая проверка типа содержимого . Описание этого параметра: Validate that all content uploaded to this repository is of a MIME type appropriate for the repository format.

Чтобы ответить на второй вопрос, зачем: загрузить файл JAR в редактор. Вы можете увидеть заголовок сценария оболочки (Bash). В этом случае файл JAR является «исполняемым JAR», а заголовок сценария оболочки - это сценарий запуска из Spring Boot. Из-за этого Nexus неправильно определяет файл как сценарий оболочки.

Пример:

#!/bin/bash
#
#    .   ____          _            __ _ _
#   /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
#  ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
#   \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
#    '  |____| .__|_| |_|_| |_\__, | / / / /
#   =========|_|==============|___/=/_/_/_/
#   :: Spring Boot Startup Script ::
#
# ... etc

Вот скриншот такого файла, открытого в Sublime Text: enter image description here

...