如何根据maven工件版本将存档上传到不同的文件夹?

时间:2016-04-26 12:37:10

标签: maven gradle nexus android-productflavors

我有一些问题试图弄清楚我如何上传到maven神器版本的不同文件夹,然后在该文件夹中生成了味道罐/战争/ aars。

例如,我收到了version 1.0.0groupId com.example的工件。 问题是,当将其上传到 Nexus 时,文件夹结构最终为com/example/10-flavor1 com/example/10-flavor2

这是我在gradle中得到的:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url:"http:/nexus/content/repositories/releases/") {
                authentication(userName: "username", password:"password")
            }

            addFilter('flavor1Release') { artifact, file ->
                artifact.attributes.classifier.equals("flavor1Release")
            }
            addFilter('flavor2Release') { artifact, file ->
                artifact.attributes.classifier.equals("flavor2Release")
            }

            pom('flavor1').artifactId = "artifactExample"
            pom('flavor1').version = "1.0.0"
            pom('flavor1').groupId = "com.example"

            pom('flavor2').artifactId = "artifactExample"
            pom('flavor2').version = "1.0.0"
            pom('flavor2').groupId = "com.example"
        }
    }
}

我想知道是否有一种自定义存储库请求的方法,以便我们可以传递我们需要为每个工件创建的确切文件夹。 或任何能够真正完成这项工作的东西。

1 个答案:

答案 0 :(得分:2)

这违反了Maven Coordinates groupId:artifactId:version的理念:

  

上面给出的三个要素指向一个项目的特定版本,让Maven知道我们正在处理谁,...

     

坐标为项目定义唯一的位置。 [...] 要查看,Maven坐标由三个组成部分组成:...

<packaging>类型不是坐标的一部分,例如:

com.example:artifact1:1.0.0:jar
com.example:artifact2:1.0.0:war

成为存储库文件夹和文件:

+- com/example/artifact1/1.0.0
   +- artifact1-1.0.0.pom
   +- artifact1-1.0.0.jar
+- com/example/artifact2/1.0.0
   +- artifact2-1.0.0.pom
   +- artifact2-1.0.0.war

当你想要的时候:

com.example:artifactExample:1.0.0:jar
com.example:artifactExample:1.0.0:war

成为:

+- com/example/artifactExample/1.0.0
   +- jar
      +- artifactExample-1.0.0.pom
      +- artifactExample-1.0.0.jar
   +- war
      +- artifactExample-1.0.0.pom
      +- artifactExample-1.0.0.war

除了<packaging>类型不是坐标的一部分(因此,结果文件夹结构),我们还会看到另一个问题:我们将有两个坐标相同的POM,而坐标是要识别的,即独一无二。