2014-10-03 64 views
-1

它已经过2次周以来我已经成功地安装的Nexus OSS,Maven和再摇篮能够实现以下目标与摇篮或Maven下载依赖:上传文物和购自Nexus库

  1. 将文件上传到公司的Nexus存储库,将它们链接在一起。所以这些文件必须保留一个链接,以便定义由其groupId/artifactId /版本填充的“包”。

  2. 下载由某些东西(如POM依赖模式)链接在一起的“包”(文件集)。

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

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

我看了2周,无法使用Maven或Gradle来实现这些目标。 请任何人都可以告诉我如何使用Maven或Gradle来完成这项工作?

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

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> 

一旦我已上传然后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”文件来达到我的目标:

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

你是在围绕系统工作吗?我不确定你试图达到什么目的。但是,如果您想在一次构建中一次上传多个工件,则需要创建一个多模块项目。

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

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

我不知道该怎么gradle这个句柄这还是什么最佳实践,他们使用。

+0

感谢您的回答。 我试图实现的是使用他们的POM上传一组文件来定义它们之间的依赖关系。 然后,我希望能够只用一个解决依赖关系的命令来下载它们。 我试着用“mvn deploy”表示赞同,但它并不能帮助我在一个命令中下载A和B.即使我的POM文件定义了从B到A的依赖关系,Nexus或Maven似乎也没有看到它...... – Yvan781 2014-10-03 14:40:50

+0

以下是我在解析B上的依赖关系时所得到的结果:http://image.noelshack.com/fichiers/ 2014/40/1412347722-mvn-dependency-resolve-artifactb.png – Yvan781 2014-10-03 14:49:23

+0

我明白了。我认为有两种选择:一种是使用“mvn dependency:copy-dependencies”,它将所有需要的jar复制到你的目标文件夹中。另一个选择是在构建过程中使用程序集插件将所需的所有内容打包到zip文件中,并将其放入nexus中:http://maven.apache.org/plugins/maven-assembly-plugin/ - 有一些默认程序集可用要做到这一点。 – wemu 2014-10-06 10:42:51