Можно ли загружать артефакты в репозиторий maven-central в Nexus?

Я пытаюсь загрузить артефакты в свой репозиторий «maven-central» в Nexus. Я использую команду:

curl -v --user admin:admin123 --upload-file /path/myjar.jar  http://nexus-nexus3.apps.lab.ca/repository/maven-central/com/tp/mycompany/1.0/myjar.jar

Я получаю сообщение об ошибке:

User-Agent: curl/7.54.0 Accept: / Content-Length: 560414 Expect: 100-continue HTTP/1.1 400 Недопустимый путь для репозитория Maven 2 Дата: Пт, 09 марта 2018 г., 15:54 :10 GMT Сервер: Nexus/3.9.0-01 (OSS)

Я пробовал несколько команд curl из документов sonatype, но безрезультатно. Мой вопрос в том, возможно ли это вообще? Пользовательский интерфейс дает мне возможность загружать только на maven-releases и nuget-hosted. Как мне обойти это?


person redhatter    schedule 09.03.2018    source источник
comment
Я предполагаю, что по умолчанию репозиторий, который вы вызываете maven-central, является прокси-репозиторием, который отражает Maven Central. И нет смысла заливать в репозиторий прокси. Вы должны загрузить свои артефакты в другой репозиторий, например maven-releases, который является так называемым репозиторием hosted...   -  person khmarbaise    schedule 09.03.2018
comment
Причина @khmarbaise, по которой я хочу загрузить в maven-central, заключается в том, что во время сборки maven некоторые артефакты загружаются из прокси-репозитория maven-central, а некоторые являются пользовательскими. Вот почему я хотел просто разместить все в одном месте.   -  person redhatter    schedule 09.03.2018
comment
Вы не можете загружать артефакты в прокси-репозиторий, указанный в документации Nexus. Создайте отдельный размещенный репозиторий в Nexus (например, по умолчанию уже есть некоторые определенные сторонние) и загрузите их в него...   -  person khmarbaise    schedule 09.03.2018
comment
да. Но когда я даю своему приложению URL (‹nexus-url›/repository/maven-central) для зеркала maven. он ищет пользовательские банки по этому конкретному пути.   -  person redhatter    schedule 10.03.2018
comment
Вам нужно правильно настроить конфигурацию Nexus, чего вы, очевидно, не сделали. У вас есть группа репозиториев, которая объединяет разные репозитории в один логический, который вы используете для доступа (потребления) к артефактам.   -  person khmarbaise    schedule 10.03.2018


Ответы (2)


Я не уверен, действительно ли вы хотите загружать проприетарные банки в открытый мир через maven-central.

Очень часто указывается и используется комбинация репозитория maven-central и конкретной компании, в котором размещаются проприетарные jar-файлы. Вы должны быть осторожны с последствиями этого.

Приступая к загрузке артефакта на maven-central...

Чтобы загрузить свои артефакты в Central-maven, необходимо выполнить предварительные условия здесь

Почему у нас есть требования?

Чтобы обеспечить минимальный уровень качества компонентов, доступных в центральном репозитории, мы установили ряд требований, которым должны соответствовать ваши компоненты развертывания. Это позволяет вашим пользователям находить все необходимые сведения о компонентах из метаданных, представленных в центральном репозитории.

Некоторые из принятых пунктов:

  1. Поставка Javadoc и исходников
  2. Подпишите файлы с помощью GPG/PGP
  3. Название проекта, описание и URL
  4. Информация о лицензии
  5. Информация для разработчиков
  6. Информация о СКМ

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

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.simpligility.training</groupId>
  <artifactId>ossrh-demo</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <name>ossrh-demo</name>
  <description>A demo for deployment to the Central Repository via OSSRH</description>
  <url>http://github.com/simpligility/ossrh-demo</url>

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>

  <developers>
    <developer>
      <name>Manfred Moser</name>
      <email>[email protected]</email>
      <organization>Sonatype</organization>
      <organizationUrl>http://www.sonatype.com</organizationUrl>
    </developer>
  </developers>

  <scm>
    <connection>scm:git:git://github.com/simpligility/ossrh-demo.git</connection>
    <developerConnection>scm:git:ssh://github.com:simpligility/ossrh-demo.git</developerConnection>
    <url>http://github.com/simpligility/ossrh-demo/tree/master</url>
   </scm>

...

</project>
person Gyanendra Dwivedi    schedule 09.03.2018
comment
вы неправильно поняли мой вопрос. Я пытаюсь загрузить свой артефакт в репозиторий maven-central в своем пользовательском Nexus. - person redhatter; 10.03.2018

Я предполагаю, что по умолчанию репозиторий, который вы вызываете maven-central, является прокси-репозиторием, который отражает Maven Central. И нет смысла заливать в репозиторий прокси. Вы должны загрузить свои артефакты в другой репозиторий, например, maven-releases, который является так называемым размещенным репозиторием...

Вы не можете загружать артефакты в прокси-репозиторий, указанный в документации Nexus. Создайте отдельный размещенный репозиторий в Nexus (например, по умолчанию уже есть некоторые определенные сторонние) и загрузите их в него...

Вам нужно правильно настроить конфигурацию Nexus, чего вы, очевидно, не сделали. У вас есть группа репозиториев, которая объединяет разные репозитории в один логический, который вы используете для доступа (потребления) к артефактам.

Чтобы правильно получить доступ к группе нексуса, у вас должны быть настройки, которые выглядят следующим образом. Данный URL-адрес — это URL-адрес группы репозиториев, которая настроена в Nexus для использования артефактов.

distributionManagement в Maven должен быть настроен на использование двух отдельных репозиториев, тогда как один является репозиторием выпуска. а другой репозиторий SNAPSHOT.

<settings>
  <mirrors>
    <mirror>
      <!--This sends everything else to /public -->
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://localhost:8081/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <id>nexus</id>
      <!--Enable snapshots for the built in central repo to direct -->
      <!--all requests to nexus via the mirror -->
      <repositories>
        <repository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </repository>
      </repositories>
     <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://central</url>
          <releases><enabled>true</enabled></releases>
          <snapshots><enabled>true</enabled></snapshots>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
  <activeProfiles>
    <!--make the profile active all the time -->
    <activeProfile>nexus</activeProfile>
  </activeProfiles>
</settings>
person khmarbaise    schedule 15.03.2018