0

我正在尝试将工件上传到 Nexus 中的“maven-central”存储库。我正在使用命令:

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

我收到错误消息:

用户代理:curl/7.54.0 接受:/ 内容长度:560414 预期:100-继续 HTTP/1.1 400 Maven 2 存储库的路径无效日期:2018 年 3 月 9 日星期五 15:54:10 GMT 服务器:Nexus/ 3.9.0-01 (OSS)

我尝试了 sonatype 文档中的多个 curl 命令,但无济于事。我的问题是,这甚至可能吗?UI 只给了我上传到 maven-releases 和 nuget-hosted 的选项。我该如何解决这个问题?

4

2 回答 2

1

我假设默认情况下,您调用 maven-central 的存储库是镜像 Maven Central 的代理存储库。而且上传到代理存储库是没有意义的。您应该将工件上传到其他存储库,例如 maven-releases,它是所谓的托管存储库...

您无法将工件上传到 Nexus 文档中编写的代理存储库。在 Nexus 中创建一个单独的托管存储库(例如,默认情况下已经有一些已定义的第 3 方)并将它们上传到...

您需要正确处理您显然没有处理的 Nexus 配置。您有存储库组,它将不同的存储库组合成一个逻辑存储库,用于访问(使用)工件。

要正确访问 nexus 组,您应该具有如下所示的设置。给定的 URL 是在 Nexus 中配置为使用工件的存储库组的 URL。

Maven 中的distributionManagement应配置为使用两个单独的存储库,一个是发布存储库,另一个是 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>
于 2018-03-15T07:38:11.483 回答
1

我不确定您是否真的想通过 maven-central 将专有 jar 上传到开放世界。

指定和使用 maven-central 和公司特定存储库托管专有 jar 的组合是很常见的。你应该小心这种影响。

即将在 maven-central 上上传工件...

要将您的工件上传到中央 maven,这里给出了先决条件

为什么我们有需求?

为了确保中央存储库中可用组件的最低质量水平,我们确定了您的部署组件必须满足的一些要求。这使您的用户可以从中央存储库中提供的元数据中找到有关组件的所有相关详细信息。

采取的一些观点:

  1. 提供 Javadoc 和源
  2. 使用 GPG/PGP 签署文件
  3. 项目名称、描述和 URL
  4. 许可证信息
  5. 开发者信息
  6. 单片机信息

完整示例 POM 以下完整示例显示了 XML 标头和 project 和 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>manfred@sonatype.com</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>
于 2018-03-09T17:58:14.567 回答