当前位置: 首页 > 知识库问答 >
问题:

Android Library Gradle发布罐

范鸿畅
2023-03-14

如何发布Android-Library项目的Jar包?
我发现,classes.Jar位于build/bundles/release/classes.Jar下,我认为这是正确的Jar包(包含*.class文件)。

是否有某种官方方法,将库释放为JAR而不是AAR?

编辑
我使用Gradle来发布Maven工件,我想发布JAR和AAR包。So基于https://chris.banes.me/2013/08/27/push-aars-to-maven-central/的带有签名、md5、manifest的JAR

apply plugin: 'maven'
apply plugin: 'signing'

configurations {
    archives {
        extendsFrom configurations.default
    }
}

def sonatypeRepositoryUrl
if (isReleaseBuild()) {
    println 'RELEASE BUILD'
    sonatypeRepositoryUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
} else {
    println 'DEBUG BUILD'
    sonatypeRepositoryUrl = "https://oss.sonatype.org/content/repositories/snapshots/"
}

if(!hasProperty('nexusPassword')) {
    ext.set('nexusPassword', System.console().readPassword("\n\$ Type in password for Sonatype nexus account " + nexusUsername + ": "))
}

if(!signing.hasProperty('password')) {
    ext.set('signing.password', System.console().readPassword("\n\$ Type in GPG key password: "))
}

afterEvaluate { project ->
    uploadArchives {
        repositories {
            mavenDeployer {
                beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }

                pom.artifactId = POM_ARTIFACT_ID

                repository(url: sonatypeRepositoryUrl) {
                    authentication(userName: nexusUsername, password: nexusPassword)
                }

                pom.project {
                    name POM_NAME
                    packaging POM_PACKAGING
                    description POM_DESCRIPTION
                    url POM_URL

                    scm {
                        url POM_SCM_URL
                        connection POM_SCM_CONNECTION
                        developerConnection POM_SCM_DEV_CONNECTION
                    }

                    licenses {
                        license {
                            name POM_LICENCE_NAME
                            url POM_LICENCE_URL
                            distribution POM_LICENCE_DIST
                        }
                    }

                    developers {
                        developer {
                            id "loopj"
                            name "James Smith"
                        }
                        developer {
                            id "smarek"
                            name "Marek Sebera"
                        }
                    }
                }
            }
        }
    }

    signing {
        required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
        sign configurations.archives
    }

    task androidJavadocs(type: Javadoc) {
        source = android.sourceSets.main.java.srcDirs
    }

    task androidJavadocsJar(type: Jar) {
        classifier = 'javadoc'
        from androidJavadocs.destinationDir
    }

    task androidSourcesJar(type: Jar) {
        classifier = 'sources'
        from android.sourceSets.main.java.srcDirs
    }

    artifacts {
        archives androidSourcesJar
        archives androidJavadocsJar
    }
}

使用

task androidJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
}

将只打包java文件,不编译和链接到android sdk

共有1个答案

糜宜民
2023-03-14

虽然我还没有尝试将工件与Sonatype的部署(甚至是本地repo)一起上传,但以下是几周前我试图解决相同问题时想出的方法。

android.libraryVariants.all { variant ->
  def name = variant.buildType.name
  if (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) {
    return; // Skip debug builds.
  }
  def task = project.tasks.create "jar${name.capitalize()}", Jar
  task.dependsOn variant.javaCompile
  task.from variant.javaCompile.destinationDir
  artifacts.add('archives', task);
}

然后运行以下命令:

./gradlew jarRelease
 类似资料:
  • 从1.14.0开始支持预发布、灰度发布,可登陆SOP-Admin,然后选择服务列表进行操作。 使用预发布 SOP中预发布的思路如下: 假设网关工程sop-gateway在阿里云负载均衡有两台服务器,域名分别为: 域名 说明 open1.domain.com 网关服务器1 openpre.domain.com 网关服务器2,作为预发布请求入口 SLB对外域名为:open.domain.com,即开放

  • 现在我们已经按照指南里的步骤写好一个声明文件,是时候把它发布到npm了。 有两种主要方式用来发布声明文件到npm: 与你的npm包捆绑在一起,或 发布到npm上的@types organization。 如果你能控制要使用你发布的声明文件的那个npm包的话,推荐第一种方式。 这样的话,你的声明文件与JavaScript总是在一起传递。 如果你的包有一个主.js文件,你还是需要在package.js

  • 本章应该与 rel(4) , systools(3) 和 script(4) 。 发布的概念 当我们已经写了一个或多个应用后,我们可能想创建一个由这些应用和Erlang/OTP应用的一个子集组成的完整系统。 要实现这个目的,我们通过创建一个定义在发布中要包含哪些应用的 发布资源文件 。 该发布资源文件是用于生成 启动脚本 和 发布包 。传送并安装在另外一个站点的系统称之为 目标系统 。如果使用发布

  • 使用xsltproc将它发布为 Html xsltproc /usr/share/xml/docbook/xsl-stylesheets-1.73.2/html/html.xsl docbook.xml xsl-stylesheets目录,里面包含可以发布的格式。该路径可能会因系统的不同而改变 发布为 Html 格式所需要的 xsl 文件 发布为单独的 html 页面。如果需要分页,使用chu

  • 现在你拥有了足够的Vimscript技能来打造能帮助许多人的Vim插件。 这一章涉及如何把你的插件发布在网上,以便人们获取,还有如何向潜在用户派小广告。 托管 你需要做的第一件事是把你的插件放在网上,让其他人可以下载它。 最普遍的选择是放到Vim官网的script版面。 你需要这个网站的一个免费账户。一旦你有了,你可以点击"Add Script"链接并填写表单。 到那里你就会明白了。 在过去的几年

  • 本文针对于发布标准化做一个详解。 主要内容包含: 创建应用 配置发布环境 发布 RDC部署的原理说明: 项目的编译构建工作是在RDC的机器上面完成的, 根据.release文件中的build.output的配置将指定的路径下面的文件 打包成.tgz格式的文件, 然后发送到环境中的"部属配置"中的"下载路径"配置的路径下面. 再根据配置的"Stop" 和 "Start" 脚本去重启服务.

  • 由于本示例的WebService类使用了一个Java类(DataForm类),因此,在发布WebService之前,需要先将DataForm.class文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\classes\data目录中,然后将ComplexTypeService.class文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\p

  • 问题内容: 我必须承认我有点困惑…我以前从未做过,而且我显然缺少一些东西 当我通过http.post将数据传递到我的php文件时,我似乎无法收集数据… 有人可以告诉我为什么这行不通吗? FormData会显示在控制台日志中,并且可以确定正在写入文件。但是,看起来好像没有数据传递。 这是在我的php文件中。试图将提交表单中的数据写入文件中(只是测试)。 问题答案: 经过大量研究后,我发现这有点像ph