gpt4 book ai didi

maven - 使用 Gradle 或 Maven 从 Nexus Repository 上传 Artifact 和下载依赖项

转载 作者:行者123 更新时间:2023-12-03 06:20:17 27 4
gpt4 key购买 nike

自从我设法设置 Nexus OSS、Maven 和 Gradle 以实现以下目标以来已经 2 周了:

  • 将文件上传到将它们链接在一起的公司 Nexus 存储库。因此,文件必须保留一个链接才能定义由其 groupId/artifactId/version 填充的“包”。
  • 下载通过某种东西(如 POM 依赖模式)链接在一起的“包”(一组文件)。

  • 目前,我可以使用 Maven 和 Gradle 在 Nexus 上上传一个文件。即使我在 POM 文件或使用 Gradle 的 build.gradle 中指定依赖项,我也无法一次下载包含所有依赖项的文件。

    这里的目标只是能够定义一组按组/名称/版本排序的组件,并且能够为一个包一次下载所有组件。这就像版本打包管理。

    我已经看了 2 周,但无法使用 Maven 或 Gradle 来实现这些目标。
    请问谁能准确地告诉我如何使用 Maven 或 Gradle 来完成这项工作?

    这是我用来在 Maven 中将 artifactA 与 artifactB 链接的 POM 文件:

    ArtifactA POM 文件:
    <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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>groupA</groupId>
    <artifactId>artifactA</artifactId>
    <version>1.2.4</version>
    <packaging>jar</packaging>

    <dependencyManagement>
    <dependencies>
    </dependencies>
    </dependencyManagement>

    <distributionManagement>
    <repository>
    <id>nexus</id>
    <name>Nexus Test Repository</name>
    <url>http://localhost:7080/repository/content/repositories/releases/</url>
    </repository>
    </distributionManagement>

    </project>

    ArtifactB POM 文件:
    <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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>groupA</groupId>
    <artifactId>artifactB</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>groupA</groupId>
    <artifactId>artifactA</artifactId>
    <version>1.2.4</version>
    <type>jar</type>
    </dependency>
    </dependencies>
    </dependencyManagement>

    <distributionManagement>
    <repository>
    <id>nexus</id>
    <name>Nexus Test Repository</name>
    <url>http://localhost:7080/repository/content/repositories/releases/</url>
    </repository>
    </distributionManagement>
    </project>

    一旦我使用这些命令上传了 A 然后 B:
    mvn deploy:deploy-file \
    -Dfile=artifactA_package.jar \
    -Dpackaging=jar \
    -DpomFile=pomA1.2.4.xml \
    -Durl=http://localhost:7080/repository/content/repositories/releases/ \
    -DrepositoryId=nexus

    mvn deploy:deploy-file \
    -Dfile=artifactB_package.jar \
    -Dpackaging=jar \
    -DpomFile=pomB1.0.0.xml \
    -Durl=http://localhost:7080/repository/content/repositories/releases/ \
    -DrepositoryId=nexus

    这两个文件很好地上传到我的 Nexus 存储库但是,即使 artifactB POM 文件指定了对 A 的依赖项,当我使用此脚本下载 B 时:
    mvn dependency:get \
    -Dartifact=groupA:artifactB:1.0.0:jar \
    -DremoteRepositories=nexus::default::http://localhost:7080/repository/content/repositories/releases/

    Maven 只下载 B,但不下载 A。即使我在 B 上使用此命令:
    mvn dependency:resolve

    它告诉我类似“依赖:无”之类的信息。
    所以 Nexus 或 Maven 不知道从 B 到 A 的依赖关系。

    当我使用这个“build.gradle”文件时,Gradle 也无法实现我的目标:
    apply plugin: 'maven'

    repositories {
    maven {
    url "http://localhost:7080/repository/content/groups/public/"
    }
    }

    artifacts {
    archives file('artifactB_package.jar')
    }

    dependencies {
    archives files('artifactA_package.jar')
    }

    uploadArchives {
    repositories {
    mavenDeployer {
    repository(url: "http://localhost:7080/repository/content/repositories/releases/") {
    authentication(userName: "deployment", password: "deployment123")
    }

    pom.project {
    groupId "groupA";
    artifactId "artifactB";
    version "1";

    dependencies {
    dependency {
    groupId "groupA";
    artifactId "artifactA";
    version "1";
    }
    }
    }
    }
    }
    }

    它只上传 B。

    最佳答案

    您正在围绕系统进行某种工作?我不确定你试图达到什么目标。但是,如果您想在一次构建期间一次上传多个 Artifact ,则需要创建一个多模块项目。

    在 maven 中有一个约定:一个 pom - 一个 Artifact
    (这更像是一个盗版指南,它不是真的,例如源 jar 和 javadoc jar 可以在同一个版本中 - 所以一个 pom 上传了 3 个文件)。

    您使用的 deploy 命令主要是告诉 maven 手动上传 Artifact 。您需要的目标是 mvn deploy .这将执行构建阶段并将创建的 Artifact 上传到nexus(使用distributionManagement部分中的配置。对于多模块构建,这对每个模块都完成。有一个guide如果您需要示例,还有几个原型(prototype)(例如在 appfuse )。

    我不知道 gradle 如何处理这个或他们使用什么最佳实践。

    关于maven - 使用 Gradle 或 Maven 从 Nexus Repository 上传 Artifact 和下载依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179568/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com