Jetpack Compose项目生成Jar包并部署至Jenkins的正确方案
一、Jetpack Compose项目构建Jar包的正确Gradle配置
注意事项
Jetpack Compose Android应用项目通常不推荐打包成Jar,因为Jar无法包含Android资源、Manifest文件以及Compose UI所需的Android runtime依赖。如果你的目标是分发可运行的应用,应该打包为APK或AAB;如果是要打包Compose组件库,以下配置适用。
1. 统一Gradle DSL(避免混合Kotlin/Groovy)
原配置混用了Kotlin和Groovy DSL语法,这是执行失败的核心原因之一。确保build.gradle.kts(Kotlin DSL,Android Studio默认)配置统一,核心代码如下:
plugins { id("com.android.application") // 若为组件库,替换成id("com.android.library") kotlin("android") } android { namespace = "com.xxx.xxx" compileSdk = 34 defaultConfig { applicationId = "com.xxx.xxx" // 库项目无需此配置 minSdk = 24 targetSdk = 34 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = false proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.11" // 适配你的Compose版本 } } dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.graphics) implementation(libs.androidx.compose.ui.tooling.preview) implementation(libs.androidx.material3) // 其他项目依赖... } // 自定义Jar打包任务 tasks.register<Jar>("createJar") { // 设置Jar包命名规则 archiveBaseName.set("mycomposeapp") archiveVersion.set("1.0.0") archiveClassifier.set("") // 打包编译后的源码与字节码 from(android.sourceSets.getByName("main").java.srcDirs) from(android.sourceSets.getByName("main").kotlin.srcDirs) from("$buildDir/intermediates/javac/release/classes") from("$buildDir/tmp/kotlin-classes/release") // 排除无用文件 exclude("**/R.class", "**/R$*.class", "**/BuildConfig.class") // 若需包含依赖(谨慎使用,可能导致Jar过大或依赖冲突) // from(configurations.runtimeClasspath.get().filter { it.name.endsWith(".jar") }.map { zipTree(it) }) } // 可选:关联Jar任务到Release构建流程 tasks.named("assembleRelease") { finalizedBy("createJar") }
2. 执行打包命令
在终端运行以下命令生成Jar包:
./gradlew createJar
生成的Jar包会存放在build/libs/mycomposeapp-1.0.0.jar路径下。
二、Jenkins上传构建产物的Gradle配置(可选)
如果需要通过Gradle直接上传到Jenkins服务器,可添加自定义上传任务:
tasks.register<Upload>("uploadJarToJenkins") { configuration = configurations["archives"] repositories { mavenDeployer { repository(url = "http://你的Jenkins服务器地址/repository/maven-releases/") { authentication(userName = System.getenv("JENKINS_USER"), password = System.getenv("JENKINS_PASSWORD")) } pom.version = "1.0.0" pom.artifactId = "mycomposeapp" pom.groupId = "com.xxx.xxx" } } } // 关联上传任务到Jar打包任务 tasks.named("uploadJarToJenkins") { dependsOn("createJar") }
在Jenkins中执行以下命令完成上传:
./gradlew uploadJarToJenkins
注意:建议通过Jenkins环境变量配置JENKINS_USER和JENKINS_PASSWORD,避免明文泄露。
常见问题排查
- DSL语法错误:确保所有配置使用同一种DSL(Kotlin或Groovy),不要混用
<>和:语法。 - Jar包无内容:执行
./gradlew clean build后再重新打包,检查from配置的路径是否正确。 - Compose依赖缺失:如果Jar用于其他项目,需确保依赖方自行引入Compose相关依赖,Jar不会包含所有依赖项。
内容的提问来源于stack exchange,提问作者Akash Nair
相关产品推荐
相关产品推荐

