我需要使用 Gradle 将我的 android 库 (aar) 发布到 Maven 本地存储库。 但发布脚本还需要生成 Javadoc,同时仅包含公共和受保护的方法和类。
似乎无法在网上找到任何信息,特别是关于Javadocs部分...... 救命,我以前从未发布过库。
好的,经过大量研究,我找到了解决方案,所以如果有人需要的话,我将在这里分享。
(我不想让你像我一样感到沮丧)。
1) 创建一个 android 库作为项目中的新模块。
2)在库的构建 gradle 中放置以下代码:
plugins {
id 'com.android.library'
id 'maven-publish'
}
android {
nothing special here...
}
这是创建Javadocs的代码(仍在build.gradle中):
task androidJavadocs(type: Javadoc){
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
android.libraryVariants.all{ variant->
if (variant.name == 'release'){
owner.classpath += variant.javaCompileProvider.get().classpath
}
}
// excluding a specific class from being documented
exclude '**/NameOfClassToExclude.java'
title = null
options{
doclet = "com.google.doclava.Doclava"
docletpath = [file("libs/doclava-1.0.6.jar")]
noTimestamp = false
// show only Protected & Public
memberLevel = JavadocMemberLevel.PROTECTED
}
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs){
archiveClassifier.set('javadoc')
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar){
archiveClassifier.set('sources')
from android.sourceSets.main.java.srcDirs
}
这是将库发布到MavenLocal(仍在build.gradle中):
afterEvaluate {
publishing{
publications{
release(MavenPublication){
groupId = "com.example.mylibrary"
artifactId = "mycoollibrary"
version = "1.0"
// Applies the component for the release build variant
from components.release
// Adds javadocs and sources as separate jars.
artifact androidSourcesJar
artifact androidJavadocsJar
}
}
}
}
您的默认依赖项块:
dependencies {
your dependencies...
}
3)现在您可以下载doclava doclet:
解压缩 zip,复制 doclava-1.0.6.jar 并将其粘贴到 LibraryName/libs 文件夹中(可以使用项目视图找到)。
如果您希望能够使用@hide,则只需要 doclava。
使用此注释,您可以从 Javadocs 中排除特定方法。
4) 构建并发布您的库:
在android studio右上角找到gradle选项卡,或者从工具栏View->Tool Windows->Gradle中找到。
现在找到您的库 -> 任务 -> 发布 ->publishReleasePublicationToMavenLocal。
5)要使用另一个项目的库:
转到(使用项目的)settings.gradle 文件并将 MavenLocal() 添加为 dependencyResolutionManagement 块中的第一个存储库。
在模块构建 gradle 中添加您的库作为依赖项:
dependencies{
implementation 'com.example.mylibrary:mycoollibrary:1.0'
}
我花了将近 2 天的时间来弄清楚这个解决方案,用于生成在任何工件中发布 aar 所需的 aar、pom 、 sha 文件。
这对我使用最新的 Android 版本很有用。截至 2024 年 7 月 8 日
build.gradle
(模块)
plugins {
.
.
id("maven-publish")
}
depedndencis{
.
.
.
}
def libraryGroupId = 'com.example'
def libraryArtifactId = 'sdk'
def libraryVersion = '1.0.0'
publishing {
publications {
maven(MavenPublication) {
//from components.android
groupId libraryGroupId
artifactId libraryArtifactId
version libraryVersion
afterEvaluate {
from components.release
}
}
}
repositories {
maven {
url "$buildDir/releases"
}
}
}
最后运行以下命令,您可以在 sdk 模块
/build/releases/
文件夹中看到生成的工件。
./gradlew publish
希望这可以帮助每个人解决使用 maven 在本地生成工件的用例