You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:55:04