Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 我可以在单个artifactId上发布多个工件吗?_Maven_Gradle - Fatal编程技术网

Maven 我可以在单个artifactId上发布多个工件吗?

Maven 我可以在单个artifactId上发布多个工件吗?,maven,gradle,Maven,Gradle,我知道如何使用singleartifactId发布单个工件。我正在使用gradle发布我的工件。我的工件是.aar文件。 我发布我的工件如下: publishing { publications { myPublication(MavenPublication) { groupId 'com.example.project' version '1.0.2' artifactId 'myProject'

我知道如何使用single
artifactId
发布单个工件。我正在使用gradle发布我的工件。我的工件是.aar文件。 我发布我的工件如下:

publishing {
    publications {
        myPublication(MavenPublication) {
            groupId 'com.example.project'
            version '1.0.2'
            artifactId 'myProject'
            artifact("$buildDir/outputs/aar/mySDK-release.aar")
        }
    }

    repositories {
        mavenLocal()
    }
}

现在我想使用单个
artifactId

TLDR发布多个工件:使用分类器


既然您要发布给Maven,让我们阅读他们的文档:

上面定义的POM是Maven允许的最小值。
groupId:artifactId:version
都是必填字段(尽管是groupId 如果它们是继承的,则不需要显式定义版本 来自父级-稍后将详细介绍继承)。这三个领域的作用很大 就像一个地址和时间戳。这标志着一个特定的位置 存储库,就像Maven项目的坐标系:

  • groupId:这在组织或项目中通常是唯一的。例如,所有的核心Maven工件都是活的(很好,应该是活的) 在groupId
    org.apache.maven
    下。组ID不一定使用 点表示法,例如junit项目。请注意 点标记的groupId不必与包相对应 项目包含的结构。然而,这是一种良好的做法 跟随。当存储在存储库中时,组的行为与 Java打包结构在操作系统中不起作用。点是 替换为操作系统特定的目录分隔符(如Unix中的“/”) 它将成为基础存储库中的相对目录结构。 在给出的示例中,
    org.codehaus.mojo
    组位于 目录
    $M2\u REPO/org/codehaus/mojo
  • artifactId:artifactId通常是项目的名称。虽然groupId很重要,但是 小组在讨论中很少提到groupId(他们经常 所有项目都必须具有相同的ID,例如项目组ID:
    org.codehaus.mojo
    )。它与groupId一起创建一个 将此项目与世界上所有其他项目分开(在 至少,它应该:))。除了groupId之外,artifactId 在存储库中定义工件的居住区。在 在上述项目中,
    我的项目
    位于
    $M2\u REPO/org/codehaus/mojo/my project
  • 版本:这是命名拼图的最后一块
    groupId:artifactId
    表示单个项目,但它们不能描述 我们谈论的是该项目的哪一个化身。我们想要这个吗 junit:junit是2018年版(4.12版)还是2007年版(3.8.2版)?在里面 简短:代码更改,这些更改应该进行版本控制,并且 元素使这些版本保持一致。它也用于 工件的存储库将版本彼此分离<代码>我的项目 1.0版文件位于目录结构中
    $M2\u REPO/org/codehaus/mojo/my project/1.0
上面给出的三个元素指向一个特定版本的 项目,让Maven知道我们在和谁打交道,以及何时处于 软件生命周期我们需要它们

很明显,Maven坐标是工件特定版本的唯一标识符。可能没有两个具有相同坐标的不同工件

在单个
artifactId
下发布两个工件的唯一方法是使用不同的版本

如果选中,您将看到可以使用所谓的限定符,如
1.0.0-ALPHA
1.0.0-RC
。这实际上就是Java文档和源代码在Maven存储库中发布的方式:坐标为
a.b.c:d:1.0.0
的工件可能会在
a.b.c:d:1.0.0-javadoc
下发布Java文档,在
a.b.c:d:1.0-sources>下发布源代码

所以,使用限定符来完成这个技巧

限定符在Gradle中的工件端指定:

publishing {
    publications {
        myPublication(MavenPublication) {
            groupId 'com.example.project'
            version '1.0.2'
            artifactId 'myProject'


            artifact("$buildDir/outputs/aar/mySDK-release-2.aar") {
                // These values can also be specified in the task that generates the AAR.
                classifier "q1"
            }
            artifact("$buildDir/outputs/aar/mySDK-release-1.aar") {
                classifier "q2"
            }
        }
    }
}

那么你想如何区分它们呢?通过分类器?是的,我可以用分类器来区分它们。谢谢你的知识。