使用Nexus Repository中的Gradle或Maven上载工件并下载依赖项

时间:2014-10-03 13:09:53

标签: maven gradle dependencies repository nexus

自从我成功设置Nexus OSS,Maven和Gradle以便能够实现以下目标已经过去了2周:

  1. 将文件上传到将它们链接在一起的公司Nexus存储库。因此,文件必须保留一个链接,以便定义一个"包"由groupId / artifactId / version填充。

  2. 下载"包" (通过某种方式链接在一起的(文件集)(如POM依赖模式)。

  3. 目前,我可以使用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。

2 个答案:

答案 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