chore: migrate to version catalog, Gropify

This commit is contained in:
2025-11-12 17:32:55 +08:00
parent b72fd73e9b
commit 36e8350f84
11 changed files with 175 additions and 155 deletions

View File

@@ -3,22 +3,24 @@ import com.vanniktech.maven.publish.KotlinMultiplatform
import com.vanniktech.maven.publish.MavenPublishBaseExtension import com.vanniktech.maven.publish.MavenPublishBaseExtension
plugins { plugins {
autowire(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.kotlin.multiplatform) apply false
autowire(libs.plugins.android.application) apply false alias(libs.plugins.android.application) apply false
autowire(libs.plugins.android.library) apply false alias(libs.plugins.android.library) apply false
autowire(libs.plugins.jetbrains.compose) apply false alias(libs.plugins.jetbrains.compose) apply false
autowire(libs.plugins.compose.compiler) apply false alias(libs.plugins.compose.compiler) apply false
autowire(libs.plugins.maven.publish) apply false alias(libs.plugins.maven.publish) apply false
} }
libraryProjects { libraryProjects {
afterEvaluate { afterEvaluate {
resolveDevPublishWorkflow() resolveDevPublishWorkflow()
configure<PublishingExtension> { configure<PublishingExtension> {
repositories { repositories {
val repositoryDir = gradle.gradleUserHomeDir val repositoryDir = gradle.gradleUserHomeDir
.resolve("highcapable-maven-repository") .resolve("highcapable-maven-repository")
.resolve("repository") .resolve("repository")
maven { maven {
name = "HighCapableMavenReleases" name = "HighCapableMavenReleases"
url = repositoryDir.resolve("releases").toURI() url = repositoryDir.resolve("releases").toURI()
@@ -29,6 +31,7 @@ libraryProjects {
} }
} }
} }
configure<MavenPublishBaseExtension> { configure<MavenPublishBaseExtension> {
configure(KotlinMultiplatform(javadocJar = JavadocJar.Empty())) configure(KotlinMultiplatform(javadocJar = JavadocJar.Empty()))
} }
@@ -47,17 +50,23 @@ libraryProjects {
fun Project.resolveDevPublishWorkflow() { fun Project.resolveDevPublishWorkflow() {
fun String.parseCode() = (trim().toIntOrNull() ?: 0).toString().padStart(4, '0') fun String.parseCode() = (trim().toIntOrNull() ?: 0).toString().padStart(4, '0')
fun String.nextCode() = (toInt() + 1).toString().parseCode() fun String.nextCode() = (toInt() + 1).toString().parseCode()
val devFile = projectDir.resolve("build").resolve("publish_dev") val devFile = projectDir.resolve("build").resolve("publish_dev")
val isDevMode = devFile.exists() val isDevMode = devFile.exists()
val code = (if (isDevMode) devFile.readText() else "1").parseCode() val code = (if (isDevMode) devFile.readText() else "1").parseCode()
val devVersion = "$version-dev$code" val devVersion = "$version-dev$code"
version = if (isDevMode) devVersion else version version = if (isDevMode) devVersion else version
if (isDevMode) println("Detected dev mode of $name, publish version is $devVersion") if (isDevMode) println("Detected dev mode of $name, publish version is $devVersion")
tasks.register("publishDev") { tasks.register("publishDev") {
group = "publishing" group = "publishing"
dependsOn("publishAllPublicationsToHighCapableMavenSnapShotsRepository") dependsOn("publishAllPublicationsToHighCapableMavenSnapShotsRepository")
doLast { doLast {
val nextCode = code.nextCode() val nextCode = code.nextCode()
println("Dev publish is finished, next dev code is $nextCode") println("Dev publish is finished, next dev code is $nextCode")
devFile.writeText(nextCode) devFile.writeText(nextCode)
} }

View File

@@ -1,30 +1,34 @@
plugins { plugins {
autowire(libs.plugins.kotlin.multiplatform) alias(libs.plugins.kotlin.multiplatform)
autowire(libs.plugins.android.library) alias(libs.plugins.android.library)
autowire(libs.plugins.jetbrains.compose) alias(libs.plugins.jetbrains.compose)
autowire(libs.plugins.compose.compiler) alias(libs.plugins.compose.compiler)
autowire(libs.plugins.maven.publish) alias(libs.plugins.maven.publish)
} }
group = property.project.groupName group = gropify.project.groupName
version = property.project.flexiui.core.version version = gropify.project.flexiui.core.version
kotlin { kotlin {
androidTarget { androidTarget {
publishLibraryVariants("release") publishLibraryVariants("release")
} }
jvm("desktop") jvm("desktop")
listOf( listOf(
iosX64(), iosX64(),
iosArm64(), iosArm64(),
iosSimulatorArm64() iosSimulatorArm64()
).forEach { iosTarget -> ).forEach { iosTarget ->
iosTarget.binaries.framework { iosTarget.binaries.framework {
baseName = property.project.flexiui.core.iosModuleName baseName = gropify.project.flexiui.core.iosModuleName
isStatic = true isStatic = true
} }
} }
jvmToolchain(17) jvmToolchain(17)
sourceSets { sourceSets {
all { all {
languageSettings { languageSettings {
@@ -34,19 +38,20 @@ kotlin {
optIn("androidx.compose.foundation.ExperimentalFoundationApi") optIn("androidx.compose.foundation.ExperimentalFoundationApi")
} }
} }
val commonMain by getting { val commonMain by getting {
dependencies { dependencies {
implementation(compose.runtime) implementation(compose.runtime)
// Mark foundation with api like material do. // Mark foundation with api like material do.
api(compose.foundation) api(compose.foundation)
implementation(composeExt.material.ripple) implementation(libs.composeExt.material.ripple)
api(projects.flexiuiResources) api(projects.flexiuiResources)
api(com.highcapable.betterandroid.compose.extension) api(libs.betterandroid.compose.extension)
} }
} }
val androidMain by getting { val androidMain by getting {
dependencies { dependencies {
implementation(com.highcapable.betterandroid.ui.extension) implementation(libs.betterandroid.ui.extension)
} }
} }
val desktopMain by getting val desktopMain by getting
@@ -63,15 +68,15 @@ kotlin {
} }
android { android {
namespace = property.project.flexiui.core.namespace namespace = gropify.project.flexiui.core.namespace
compileSdk = property.project.android.compileSdk compileSdk = gropify.project.android.compileSdk
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
sourceSets["main"].res.srcDirs("src/androidMain/res") sourceSets["main"].res.srcDirs("src/androidMain/res")
sourceSets["main"].resources.srcDirs("src/commonMain/resources") sourceSets["main"].resources.srcDirs("src/commonMain/resources")
defaultConfig { defaultConfig {
minSdk = property.project.android.minSdk minSdk = gropify.project.android.minSdk
} }
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_17

View File

@@ -156,6 +156,8 @@ data class AutoCompleteOptions(
val threshold: Int = 2 val threshold: Int = 2
) )
// FIXME: (最后) TextField 重写,所有内容都需要定义到 decorationBox 中,不能在外部添加边框,否则会造成 KeyboardOptions 失效
/** /**
* Flexi UI text field. * Flexi UI text field.
* @see TextField * @see TextField

View File

@@ -1,36 +1,40 @@
plugins { plugins {
autowire(libs.plugins.kotlin.multiplatform) alias(libs.plugins.kotlin.multiplatform)
autowire(libs.plugins.android.library) alias(libs.plugins.android.library)
autowire(libs.plugins.jetbrains.compose) alias(libs.plugins.jetbrains.compose)
autowire(libs.plugins.compose.compiler) alias(libs.plugins.compose.compiler)
autowire(libs.plugins.maven.publish) alias(libs.plugins.maven.publish)
} }
group = property.project.groupName group = gropify.project.groupName
version = property.project.flexiui.resources.version version = gropify.project.flexiui.resources.version
kotlin { kotlin {
androidTarget { androidTarget {
publishLibraryVariants("release") publishLibraryVariants("release")
} }
jvm("desktop") jvm("desktop")
listOf( listOf(
iosX64(), iosX64(),
iosArm64(), iosArm64(),
iosSimulatorArm64() iosSimulatorArm64()
).forEach { iosTarget -> ).forEach { iosTarget ->
iosTarget.binaries.framework { iosTarget.binaries.framework {
baseName = property.project.flexiui.resources.iosModuleName baseName = gropify.project.flexiui.resources.iosModuleName
isStatic = true isStatic = true
} }
} }
jvmToolchain(17) jvmToolchain(17)
sourceSets { sourceSets {
val commonMain by getting { val commonMain by getting {
dependencies { dependencies {
implementation(compose.runtime) implementation(compose.runtime)
implementation(compose.foundation) implementation(compose.foundation)
implementation(com.highcapable.betterandroid.compose.extension) implementation(libs.betterandroid.compose.extension)
} }
} }
val androidMain by getting val androidMain by getting
@@ -48,15 +52,15 @@ kotlin {
} }
android { android {
namespace = property.project.flexiui.resources.namespace namespace = gropify.project.flexiui.resources.namespace
compileSdk = property.project.android.compileSdk compileSdk = gropify.project.android.compileSdk
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
sourceSets["main"].res.srcDirs("src/androidMain/res") sourceSets["main"].res.srcDirs("src/androidMain/res")
sourceSets["main"].resources.srcDirs("src/commonMain/resources") sourceSets["main"].resources.srcDirs("src/commonMain/resources")
defaultConfig { defaultConfig {
minSdk = property.project.android.minSdk minSdk = gropify.project.android.minSdk
} }
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_17

View File

@@ -26,7 +26,7 @@ project.android.compileSdk=35
project.android.minSdk=21 project.android.minSdk=21
project.android.targetSdk=35 project.android.targetSdk=35
# Maven Publish Configuration # Maven Publish Configuration
SONATYPE_HOST=S01 SONATYPE_HOST=CENTRAL_PORTAL
RELEASE_SIGNING_ENABLED=true RELEASE_SIGNING_ENABLED=true
# Maven POM Configuration # Maven POM Configuration
POM_NAME=FlexiUI POM_NAME=FlexiUI

47
gradle/libs.versions.toml Normal file
View File

@@ -0,0 +1,47 @@
[versions]
agp = "8.13.1"
androidx-compose-android = "1.9.4"
kotlin-multiplatform = "2.2.21"
jetbrains-compose = "1.9.3"
maven-publish = "0.35.0"
androidx-activity = "1.11.0"
androidx-core-ktx = "1.17.0"
androidx-appcompat = "1.7.1"
# noinspection GradleDependency
material = "1.11.0"
junit = "4.13.2"
androidx-test-ext-junit = "1.3.0"
androidx-test-espresso-core = "3.7.0"
betterandroid-ui-component = "1.0.8"
betterandroid-ui-extension = "1.0.7"
betterandroid-system-extension = "1.0.3"
betterandroid-compose-extension = "1.0.2"
betterandroid-compose-multiplatform = "0.1.0"
[plugins]
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin-multiplatform" }
jetbrains-compose = { id = "org.jetbrains.compose", version.ref = "jetbrains-compose" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin-multiplatform" }
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
maven-publish = { id = "com.vanniktech.maven.publish", version.ref = "maven-publish" }
[libraries]
composeExt-material-ripple = { module = "org.jetbrains.compose.material:material-ripple", version.ref = "jetbrains-compose" }
# Use a placeholder for the android compose version
# In the project to use "androidx.compose.android.version" to obtain the version
# and use the "resolutionStrategy" to replace all the current "stable" versions
androidx-compose-android = { module = "androidx.compose.runtime:runtime-android", version.ref = "androidx-compose-android" }
betterandroid-ui-component = { module = "com.highcapable.betterandroid:ui-component", version.ref = "betterandroid-ui-component" }
betterandroid-ui-extension = { module = "com.highcapable.betterandroid:ui-extension", version.ref = "betterandroid-ui-extension" }
betterandroid-system-extension = { module = "com.highcapable.betterandroid:system-extension", version.ref = "betterandroid-system-extension" }
betterandroid-compose-extension = { module = "com.highcapable.betterandroid:compose-extension", version.ref = "betterandroid-compose-extension" }
betterandroid-compose-multiplatform = { module = "com.highcapable.betterandroid:compose-multiplatform", version.ref = "betterandroid-compose-multiplatform" }
androidx-activity = { module = "androidx.activity:activity", version.ref = "androidx-activity" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidx-core-ktx" }
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }
material = { module = "com.google.android.material:material", version.ref = "material" }
junit = { module = "junit:junit", version.ref = "junit" }
androidx-test-ext-junit = { module = "androidx.test.ext:junit", version.ref = "androidx-test-ext-junit" }
androidx-test-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidx-test-espresso-core" }

View File

@@ -1,78 +0,0 @@
preferences:
autowire-on-sync-mode: UPDATE_OPTIONAL_DEPENDENCIES
repositories-mode: FAIL_ON_PROJECT_REPOS
repositories:
gradle-plugin-portal:
scope: PLUGINS
google:
maven-central:
highcapable-maven-releases:
url: https://raw.githubusercontent.com/HighCapable/maven-repository/main/repository/releases
plugins:
org.jetbrains.kotlin.multiplatform:
alias: kotlin-multiplatform
version: 2.2.10
org.jetbrains.compose:
alias: jetbrains-compose
version: 1.8.2
org.jetbrains.kotlin.plugin.compose:
alias: compose-compiler
version-ref: kotlin-multiplatform
com.android.application:
alias: android-application
version: 8.12.1
com.android.library:
alias: android-library
version-ref: android-application
com.vanniktech.maven.publish:
alias: maven-publish
version: 0.34.0
libraries:
org.jetbrains.compose.material:
material-ripple:
alias: composeExt-material-ripple
version-ref: <plugins>::jetbrains-compose
# Use a placeholder for the android compose version
# In the project to use "androidx.compose.android.version" to obtain the version
# and use the "resolutionStrategy" to replace all the current "stable" versions
androidx.compose.runtime:
runtime-android:
alias: androidx-compose-android
version: 1.9.0
com.highcapable.betterandroid:
ui-component:
version: 1.0.8
ui-extension:
version: 1.0.7
system-extension:
version: 1.0.3
compose-extension:
version: 1.0.2
compose-multiplatform:
version: 0.1.0
androidx.activity:
activity:
version: 1.10.1
activity-compose:
version: 1.10.1
androidx.core:
core-ktx:
version: 1.17.0
androidx.appcompat:
appcompat:
version: 1.7.1
com.google.android.material:
material:
version: 1.12.0
androidx.test.ext:
junit:
version: 1.3.0
androidx.test.espresso:
espresso-core:
version: 3.7.0
junit:
junit:
version: 4.13.2

View File

@@ -1,8 +1,8 @@
plugins { plugins {
autowire(libs.plugins.kotlin.multiplatform) alias(libs.plugins.kotlin.multiplatform)
autowire(libs.plugins.android.application) alias(libs.plugins.android.application)
autowire(libs.plugins.jetbrains.compose) alias(libs.plugins.jetbrains.compose)
autowire(libs.plugins.compose.compiler) alias(libs.plugins.compose.compiler)
} }
kotlin { kotlin {
@@ -18,19 +18,19 @@ kotlin {
} }
android { android {
namespace = property.project.samples.androidApp.packageName namespace = gropify.project.samples.androidApp.packageName
compileSdk = property.project.android.compileSdk compileSdk = gropify.project.android.compileSdk
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
sourceSets["main"].res.srcDirs("src/androidMain/res") sourceSets["main"].res.srcDirs("src/androidMain/res")
sourceSets["main"].resources.srcDirs("src/commonMain/resources") sourceSets["main"].resources.srcDirs("src/commonMain/resources")
defaultConfig { defaultConfig {
applicationId = property.project.samples.androidApp.packageName applicationId = gropify.project.samples.androidApp.packageName
minSdk = property.project.android.minSdk minSdk = gropify.project.android.minSdk
targetSdk = property.project.android.targetSdk targetSdk = gropify.project.android.targetSdk
versionName = property.project.samples.androidApp.versionName versionName = gropify.project.samples.androidApp.versionName
versionCode = property.project.samples.androidApp.versionCode versionCode = gropify.project.samples.androidApp.versionCode
} }
buildTypes { buildTypes {
release { release {
@@ -45,7 +45,7 @@ android {
} }
} }
val composeAndroidVersion = dependencies.androidx.compose.android.version val composeAndroidVersion = libs.androidx.compose.android.get().version ?: error("Unresolved compose android version.")
configurations.all { configurations.all {
resolutionStrategy.eachDependency { resolutionStrategy.eachDependency {

View File

@@ -1,42 +1,46 @@
plugins { plugins {
autowire(libs.plugins.kotlin.multiplatform) alias(libs.plugins.kotlin.multiplatform)
autowire(libs.plugins.android.library) alias(libs.plugins.android.library)
autowire(libs.plugins.jetbrains.compose) alias(libs.plugins.jetbrains.compose)
autowire(libs.plugins.compose.compiler) alias(libs.plugins.compose.compiler)
} }
kotlin { kotlin {
androidTarget() androidTarget()
jvm("desktop") jvm("desktop")
listOf( listOf(
iosX64(), iosX64(),
iosArm64(), iosArm64(),
iosSimulatorArm64(), iosSimulatorArm64(),
).forEach { iosTarget -> ).forEach { iosTarget ->
iosTarget.binaries.framework { iosTarget.binaries.framework {
baseName = property.project.samples.composeApp.iosModuleName baseName = gropify.project.samples.composeApp.iosModuleName
isStatic = true isStatic = true
} }
} }
jvmToolchain(17) jvmToolchain(17)
sourceSets { sourceSets {
val commonMain by getting { val commonMain by getting {
dependencies { dependencies {
implementation(compose.runtime) implementation(compose.runtime)
implementation(compose.foundation) implementation(compose.foundation)
api(projects.flexiuiCore) api(projects.flexiuiCore)
api(com.highcapable.betterandroid.compose.multiplatform) api(libs.betterandroid.compose.multiplatform)
} }
} }
val androidMain by getting { val androidMain by getting {
dependencies { dependencies {
api(androidx.core.core.ktx) api(libs.androidx.core.ktx)
api(androidx.appcompat.appcompat) api(libs.androidx.appcompat)
api(androidx.activity.activity) api(libs.androidx.activity)
api(androidx.activity.activity.compose) api(libs.androidx.activity.compose)
api(com.highcapable.betterandroid.ui.component) api(libs.betterandroid.ui.component)
api(com.highcapable.betterandroid.ui.extension) api(libs.betterandroid.ui.extension)
api(com.highcapable.betterandroid.system.extension) api(libs.betterandroid.system.extension)
} }
} }
val desktopMain by getting { val desktopMain by getting {
@@ -57,15 +61,15 @@ kotlin {
} }
android { android {
namespace = property.project.samples.composeApp.namespace namespace = gropify.project.samples.composeApp.namespace
compileSdk = property.project.android.compileSdk compileSdk = gropify.project.android.compileSdk
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
sourceSets["main"].res.srcDirs("src/androidMain/res") sourceSets["main"].res.srcDirs("src/androidMain/res")
sourceSets["main"].resources.srcDirs("src/commonMain/resources") sourceSets["main"].resources.srcDirs("src/commonMain/resources")
defaultConfig { defaultConfig {
minSdk = property.project.android.minSdk minSdk = gropify.project.android.minSdk
} }
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_17

View File

@@ -1,15 +1,16 @@
plugins { plugins {
autowire(libs.plugins.kotlin.multiplatform) alias(libs.plugins.kotlin.multiplatform)
autowire(libs.plugins.jetbrains.compose) alias(libs.plugins.jetbrains.compose)
autowire(libs.plugins.compose.compiler) alias(libs.plugins.compose.compiler)
} }
group = property.project.samples.desktopApp.groupName group = gropify.project.samples.desktopApp.groupName
version = property.project.samples.desktopApp.version version = gropify.project.samples.desktopApp.version
kotlin { kotlin {
jvm("desktop") jvm("desktop")
jvmToolchain(17) jvmToolchain(17)
sourceSets { sourceSets {
val desktopMain by getting { val desktopMain by getting {
dependencies { dependencies {

View File

@@ -1,4 +1,5 @@
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
pluginManagement { pluginManagement {
repositories { repositories {
gradlePluginPortal() gradlePluginPortal()
@@ -6,31 +7,56 @@ pluginManagement {
mavenCentral() mavenCentral()
} }
} }
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven("https://raw.githubusercontent.com/HighCapable/maven-repository/main/repository/releases")
}
}
plugins { plugins {
id("com.highcapable.sweetdependency") version "1.0.4" id("com.highcapable.gropify") version "1.0.0"
id("com.highcapable.sweetproperty") version "1.0.8"
} }
sweetDependency {
isUseDependencyResolutionManagement = false gropify {
}
sweetProperty {
global { global {
sourcesCode { android {
className = "FlexiUI" className = "FlexiUI"
includeKeys("^project\\..*\$".toRegex()) includeKeys("^project\\..*\$".toRegex())
isEnableRestrictedAccess = true isRestrictedAccessEnabled = true
} }
} }
rootProject { all { isEnable = false } }
project( rootProject {
common {
isEnabled = false
}
}
projects(
":samples", ":samples",
":samples:androidApp", ":samples:androidApp",
":samples:desktopApp", ":samples:desktopApp",
":samples:composeApp", ":samples:composeApp",
":flexiui-core", ":flexiui-core",
":flexiui-resources" ":flexiui-resources"
) { sourcesCode { isEnable = false } } ) {
android {
isEnabled = false
}
jvm {
isEnabled = false
}
kmp {
isEnabled = false
}
}
} }
rootProject.name = "FlexiUI" rootProject.name = "FlexiUI"
include(":samples:androidApp", ":samples:desktopApp", ":samples:composeApp") include(":samples:androidApp", ":samples:desktopApp", ":samples:composeApp")
include(":flexiui-core", ":flexiui-resources") include(":flexiui-core", ":flexiui-resources")