首页 » Maven repository artifacts

Maven repository artifacts

必需 artifacts

在发布 Maven repository artifacts 时,通常情况下我们上传的文件包含:

  • 描述文件 POM : artifactId-version.pom
  • aar/jar : artifactId-version.aar/jar

示例如下:

perfmonitor-0.1.1-20200114.075334-4.aar           14-Jan-2020 15:53  48.27 KB
perfmonitor-0.1.1-20200114.075334-4.pom           14-Jan-2020 15:53  463 bytes

上传了这两者,我们的 library 就是合法的 artifacts ,其他人就可以通过 Maven Coordinates (groupId, artifactId, version) 来定位并下载到我们的 artifacts 。

可选 artifacts

除了上述的必需文件 ,我们还可以上传两个可选的文件:

  • javadoc jar 包: artifactId-version-javadoc.jar
    打包了 library 的 Javadoc 。 只要按照规范命名,你发布到 Maven CentralBintray (JCenter) 的 library 的 Javadoc 就可以自动部署到比如 javadoc.io 这样的服务上。
  • sources jar 包: artifactId-version-sources.jar
    打包了 library 的源码。 只要按照规范命名,智能的 IDE(比如 IDEA/Android Studio )会自动帮我们下载并将 .java 文件与相应的 .class 文件关联。 此时当我们在这些 IDE 中查看某个我们发布的 library 的类代码时,看到的就是 .java 文件而不再是 .class 文件,这样不仅方便阅读理解代码逻辑,而且可以直接进行断点调试。 几乎所有开源项目的发布都会包含 sources ,比如 Android 本身。

示例如下:

perfmonitor-0.1.1-20200114.075334-4-javadoc.jar   14-Jan-2020 15:53  94.29 KB
perfmonitor-0.1.1-20200114.075334-4-sources.jar   14-Jan-2020 15:53  23.93 KB

注意

如果你的 library 要发布到 Maven Central ,那么这两个 artifacts 就是必需的。

如何配置生成上述 artifacts

Android Gradle pluginJava plugin 有不同,使用了 Kotlin 后也会不同,这里只列出不使用 Kotlin 的 Android 的核心配置方法供参考。

// sources
tasks.register('sourcesJar', Jar) {
    archiveClassifier.set('sources')
    from android.sourceSets.main.java.sourceFiles
}
    
// javadoc
tasks.register('androidJavadoc', Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
tasks.register('javadocJar', Jar) {
    dependsOn androidJavadoc
    archiveClassifier.set('javadoc')
    from androidJavadoc.destinationDir
}

// Because the components are created only during the afterEvaluate phase, you must
// configure your publications using the afterEvaluate() lifecycle method.
afterEvaluate {
    publishing {
        publications {
            // Creates a Maven publication called "release".
            release(MavenPublication) {
                // Applies the component for the release build variant.
                from components.release
                // You can then customize attributes of the publication as shown below.
                groupId = 'com.example.MyLibrary'
                artifactId = 'final'
                version = '1.0'
                // Generate sources.jar
                artifact sourcesJar
                // Generate javadoc.jar
                artifact javadocJar
            }
        }
    }
}

参考

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注