自从我成功设置Nexus OSS,Maven和Gradle以便能够实现以下目标已经过去了2周:
将文件上传到将它们链接在一起的公司Nexus存储库。因此,文件必须保留一个链接,以便定义一个"包"由groupId / artifactId / version填充。
下载"包" (通过某种方式链接在一起的(文件集)(如POM依赖模式)。
目前,我可以使用Maven和Gradle在Nexus上传一个文件。即使我使用Gradle在POM文件或build.gradle中指定依赖项,我也无法一次性下载包含所有依赖项的文件。
此处的目标只是能够定义按组/名称/版本排序的一组组件,并且能够一次为一个包下载所有组件。这就像版本打包管理一样。
我已经看了两周,并且无法使用Maven或Gradle来实现这些目标。 请问任何人都可以告诉我如何使用Maven或Gradle来完成这项工作吗?
这是用于将artifactA与Maven中的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
它告诉我类似于&#34;依赖:无&#34;。 所以Nexus或Maven并不知道从B到A的依赖。
当我使用这个&#34; build.gradle&#34;时,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。
答案 0 :(得分:0)
你是在某种类型的系统工作?我不确定你想要达到的目的。但是,如果您想在一次构建期间一次上传多个工件,则需要创建一个多模块项目。
在maven中有一个约定:一个pom - 一个神器 (这更像是一个盗版指南,它不是真的,例如源jar和javadoc jar可以在同一个版本中 - 所以有一个pom上传了3个文件。)
您使用的deploy命令主要告诉maven手动上传工件。您需要的目标是mvn deploy
。这将执行构建阶段并将创建的工件上传到nexus(使用distributionManagement部分中的配置。通过多模块构建,这可以为每个模块完成。有一个guide,如果你有几个原型需要例子(例如appfuse)。
我不知道gradle如何处理这个或他们使用的最佳实践。
答案 1 :(得分:0)
在Nexus评估指南中有Maven,Gradle等示例项目。整个文档位于http://books.sonatype.com/nexus-book/reference/eval.html,示例项目位于https://github.com/sonatype/nexus-book-examples
除此之外,如果你想创建一个项目,将所有依赖项与Maven一起添加,你可以在程序集插件中使用,例如:在http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html