有人可以给我一个关于如何使用maven-publish gradle插件发布带有aar和source jar的com.android.library项目/模块的提示吗?我可以使用旧的maven插件执行此操作 - 但我想使用新的maven-publish插件.
android gradle android-library android-gradle-plugin maven-publish
使用 Gradle7.2和这些插件:
plugins {
id 'com.android.library' // Android Gradle Plugin 7.1.2
id 'maven-publish'
}
Run Code Online (Sandbox Code Playgroud)
它仍然有效,但给了我这个弃用警告:
警告:不会自动为 Android Gradle Plugin 8.0 的 Maven 发布创建软件组件。要选择未来的行为,请在文件
android.disableAutomaticComponentCreation=true中设置 Gradle 属性gradle.properties或使用新的发布 DSL。
发行说明也提到了它,但这些引用的是过时的文档:
从 AGP 8.0 开始,默认情况下将禁用自动组件创建。目前,AGP 7.1 自动为每个构建变体创建一个与构建变体同名的组件,以及一个包含所有构建变体的 all 组件。此自动组件创建将被禁用。要转换到新行为,您应该通过设置为 来手动禁用自动组件
android.disableAutomaticComponentCreation创建true。
有关更多信息,请参阅使用 Maven 发布插件。
但是在文件中启用 AGP 8.0 默认行为预览时gradle.properties:
android.disableAutomaticComponentCreation=true
Run Code Online (Sandbox Code Playgroud)
它找不到属性components.release:
FAILURE: Build failed with an exception.
* Where:
Script 'publish.gradle' line: 53
* What went wrong:
A problem …Run Code Online (Sandbox Code Playgroud) android gradle android-gradle-plugin maven-publish android-gradle-7.0
TL\'DR:在此 Android Kotlin 库中,我从 Gradle 5.6.4 更新到 6.6.1(提交d5d8d2)。现在我无法再依赖 aar 来构建项目了。
我构建aar并将其部署到mavenLocal ...
\n$ ./gradlew clean :roadsigns:assemble\n$ ./gradlew publishToMavenLocal\nRun Code Online (Sandbox Code Playgroud)\n...然后在示例 Androidapp模块中引用已部署的库工件。mavenLocal()首先,我在根build.gradle文件中添加:
allprojects {\n repositories {\n google()\n mavenCentral()\n jcenter()\n mavenLocal() // <-- Add this\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n我mavenLocal()直接引用依赖项:
dependencies {\n implementation\n // implementation project(":roadsigns")\n implementation "info.metadude.kotlin.library.roadsigns:roadsigns:$version"\n implementation Libs.kotlinStdlib\n // ...\nRun Code Online (Sandbox Code Playgroud)\n当我构建示例应用程序时,我收到以下构建错误:
\n$ ./gradlew …Run Code Online (Sandbox Code Playgroud) 我有一个具有以下层次结构的示例项目:
Sample (root)
-- model (simple jar)
-- api (springboot jar)
Run Code Online (Sandbox Code Playgroud)
我想将两个生成的 jars:plain jar 和 bootJar 发布到我的 localRepository。
gradlew clean build -xTest publishToMavenLocal
Run Code Online (Sandbox Code Playgroud)
但是,出现以下错误:
* What went wrong:
Execution failed for task ':api:publishMavenJavaPublicationToMavenLocal'.
> Failed to publish publication 'mavenJava' to repository 'mavenLocal'
> Artifact api.jar wasn't produced by this build.
Run Code Online (Sandbox Code Playgroud)
根 build.gradle 如下:
plugins {
id 'java'
id "org.springframework.boot" version "2.2.5.RELEASE" apply false
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
}
group 'sample'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.8
repositories { …Run Code Online (Sandbox Code Playgroud) 我有 2 个 lib 模块 : library, library2, 并使用android-maven-publish发布具有 multi-productFlavors 的多模块 android 项目
build.gradle 在图书馆:
apply plugin: 'com.android.library'
apply plugin: 'digital.wup.android-maven-publish'
android {
compileSdkVersion 26
defaultConfig {
minSdkVersion 14
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
flavorDimensions "runner"
productFlavors {
sit {
dimension "runner"
}
dev {
dimension "runner"
}
uat {
dimension "runner"
}
prd {
dimension "runner"
}
}
}
dependencies …Run Code Online (Sandbox Code Playgroud) 我在私人 Maven 仓库中有一个库(我自己的)。我将它与 javadoc 和源一起发送到那里:
\n\n在我的应用程序中,我声明了这个存储库:
\ndependencyResolutionManagement {\n repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)\n\n repositories {\n google()\n mavenCentral()\n\n maven {\n url = uri("https://jitpack.io")\n }\n maven { // <- This is my private repo\n credentials {\n username = extra["mavenUser"] as String\n password = extra["mavenPassword"] as String\n }\n url = uri(extra["mavenUrl"] as String)\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n它下载 aar 没有任何问题,但不下载源,当我尝试通过单击 \xc2\xabDownloadsources\xc2\xbb 来强制它时,它失败了:
\nExecution failed for task \':app:DownloadSources\'.\n> Could not resolve all files for configuration \':app:downloadSources_36c7b334-04c2-4099-b66c-2adc137cc95c\'.\n > Could not find com.example.path:common-core:0.0.1@aar.\n Searched in the following …Run Code Online (Sandbox Code Playgroud) 我尝试将库发布到私有S3 maven存储库.上传由密码保护,但是为了下载,该库是公开的.aar文件上传没有问题(以及pom/md5/sha1),我可以在我的S3存储桶中看到它,下载它甚至手动添加这个作为依赖项到我的项目.但是当我像这样加载这个依赖:
allprojects {
repositories {
google()
jcenter()
maven { url "http://myrepo.com" }
}
//in the project's build.gradle
implementation 'com.mylib:mylib:0.1.1'
Run Code Online (Sandbox Code Playgroud)
......有一个问题.Gradle同步完成没有问题,看起来已经下载了aar,但它从未出现在Android Studio内的"外部库"部分,并且代码不可用(Unresolved reference: MyLib).
当然,我尝试重建,使缓存无效并将其应用于不同的项目.
任何想法如何使其工作?
这就是maven-publish代码的外观.
android.libraryVariants.all { variant ->
if (variant.buildType.name == "release" && variant.flavorName == "prod") {
variant.outputs.all { output ->
publishing.publications.create(variant.name, MavenPublication) {
artifact source: output.outputFile, classifier: output.name
pom.withXml {
def dependencies = asNode().appendNode('dependencies')
configurations.getByName(variant.name + "CompileClasspath").allDependencies
.findAll { it instanceof ExternalDependency }
.each {
def dependency = dependencies.appendNode('dependency')
dependency.appendNode('groupId', it.group)
dependency.appendNode('artifactId', it.name)
dependency.appendNode('version', …Run Code Online (Sandbox Code Playgroud) 当我同步项目时,android studio警告 could not get unknown property 'bundleRelease' for object of type org.gradle.api.publish.maven.internal.publication.DefaultMavenPublication.
我添加project.afterEvaluate{//block},但它不起作用.我该怎么做才能设置artifact
我的项目结构包含 3 个模块::library、:shared和:internal。
它们之间的依赖关系如下:
:library--取决于-->:internal通过实现
:library--取决于-->:shared通过api
:internal --取决于-->:shared通过实现
因此,:library使用:internal,而不暴露它并:shared 暴露它。另外,:internal用途:shared也是如此。
问题:如何:library使用 Gradle 插件发布模块maven-publish并包含其他模块源?
目前,我的发布看起来像这样(build.gradle.kts ):library:
publishing {
publications {
register<MavenPublication>("release") {
groupId = Project.GROUP_ID
artifactId = Project.ARTIFACT_ID
version = Project.VERSION
from(components["release"])
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是在发布(我使用 JitPack)并将其添加为另一个项目的build.gradle文件中的依赖项之后,我在尝试构建它时遇到以下错误: …
我使用gradle(2.9)maven-publish插件将文件发布到私有nexus maven repo.build.gradle文件是
apply plugin: 'maven-publish'
publishing {
repositories {
maven {
name "example-maven"
url "https://..."
credentials {
username mavenUser
password mavenPassword
}
}
}
publications {
maven(MavenPublication) {
groupId 'com.example.karaf-utils'
artifactId 'esa-bootstrapper'
version '1.0.0'
artifact source: "${projectDir}/kar/example.esa.bootstrapper.kar", extension: 'kar'
}
}
}
Run Code Online (Sandbox Code Playgroud)
kar文件已正确上传,在nexus中我可以看到预期的xml描述符:
<dependency>
<groupId>com.example.karaf-utils</groupId>
<artifactId>esa-bootstrapper</artifactId>
<version>1.0.0</version>
<type>kar</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但不幸的是,在执行publish任务期间,我收到以下错误:
gradle :com.example.karaf.subsys.bootstrap:publish
:com.example.karaf.subsys.bootstrap:generatePomFileForMavenPublication
:com.example.karaf.subsys.bootstrap:publishMavenPublicationToexample-mavenRepository
Upload https://nexus.dev.example.io/nexus/content/repositories/example-maven/com/example/karaf-utils/esa-bootstrapper/1.0.0/esa-bootstrapper-1.0.0.kar
Upload https://nexus.dev.example.io/nexus/content/repositories/example-maven/com/example/karaf-utils/esa-bootstrapper/1.0.0/esa-bootstrapper-1.0.0.kar.sha1
Upload https://nexus.dev.example.io/nexus/content/repositories/example-maven/com/example/karaf-utils/esa-bootstrapper/1.0.0/esa-bootstrapper-1.0.0.kar.md5
Upload https://nexus.dev.example.io/nexus/content/repositories/example-maven/com/example/karaf-utils/esa-bootstrapper/1.0.0/esa-bootstrapper-1.0.0.pom
Could not transfer artifact com.example.karaf-utils:esa-bootstrapper:pom:1.0.0 from/to remote (https://nexus.dev.example.io/nexus/content/repositories/example-maven): Could not write to resource …Run Code Online (Sandbox Code Playgroud)