【发布时间】:2026-01-18 02:55:02
【问题描述】:
自从我设法设置 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
当我使用此脚本下载 B 时,即使 artifactB POM 文件指定了对 A 的依赖项,这两个文件也已很好地上传到我的 Nexus 存储库中:
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。
【问题讨论】:
标签: maven gradle dependencies repository nexus