Развертывание артефакта jar в Nexus приводит к несоответствию типов контента
Я использую Nexus Repository Manager v3. 1. 0-04. Когда я пытаюсь mvn deploy
артефакт jar в мое хранилище, я получаю следующую проблему.
[ошибка] не удалось выполнить цель орг..sonatype.Плагины:Нексус-постановка-Maven-плагина:1.5.1:развернуть (вводят-Нексус-развертывание) на остальное-обслуживание проекта: не удалось развернуть артефакты: не удалось передать артефакт ком.xyz: rest-сервис: jar:0.0.1-20180504.193415-6 от / до nexus (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: Detected content type [application / x-sh], но ожидается [application / java-archive]: com / xyz/rest-service / 0.0.1-SNAPSHOT / rest-service-0.0.1-20180504.193415-6.кувшин. - >[Справка 1]
Я подумал, что, возможно, это связано с версией nexus-staging-maven-plugin
(link ) но даже если я установлю версия до 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>
Однако, я вижу другую проблему сейчас.
[ошибка] не удалось выполнить цель орг..codehaus.Моджо:строить-помощник-Maven-плагина:3.0.0:прикрепить-артефакт (прикрепить-артефакты) на остальное-обслуживание проекта: выполнение прикрепить-артефакты из цели орг..codehaus.Моджо:строить-помощник-Maven-плагина:3.0.0:прикрепить-артефакт не удалось: для артефакта {com.xyz: rest-service: 0.0.1-SNAPSHOT: jar}: An присоединенный артефакт должен иметь другой идентификатор, чем соответствующий основной экспонат. - >[Справка 1]
Обратите внимание, что проект Maven генерируется инициализатором Spring через IntelliJ и является проектом Spring Boot. Без использования плагинаBuilder Helper я могу видеть, что все файлы успешно загружаются в Nexus до тех пор, пока jar не будет загружен (на самом деле он завершает загрузку, но из-за несоответствия типа контента, он потерпеть неудачу).
Есть идеи, как решить эту проблему? Сообщение, которое я упомянул, говорит: "некоторые репозитории maven проверяют содержимое файла", и поэтому, как я мог бы отключить Nexus (который я контролирую) в проверке содержимого файла? Но реальная проблема заключается в том, почему тип контента application/x-sh
вместо application/java-archive
?
1 ответ:
В настройках рассматриваемого репозитория (URL-адрес в сообщении об ошибке упоминает репозиторий" Snapshots"), разделStorage : отключите параметрStrict content type validation . Описание этой установки выглядит следующим образом:
Validate that all content uploaded to this repository is of a MIME type appropriate for the repository format
.Чтобы ответить на второй вопрос, почему: загрузите файл JAR в Редакторе. Вы можете увидеть заголовок сценария оболочки (Bash). В этом случае jar-файл является "исполняемым JAR", а заголовок shell script-это сценарий запуска из Spring Boot. Из-за этого Nexus ошибочно определяет файл как сценарий оболочки.
Пример:
#!/bin/bash # # . ____ _ __ _ _ # /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ # ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ # \\/ ___)| |_)| | | | | || (_| | ) ) ) ) # ' |____| .__|_| |_|_| |_\__, | / / / / # =========|_|==============|___/=/_/_/_/ # :: Spring Boot Startup Script :: # # ... etc