Skip to content

Commit c8da5b5

Browse files
committed
Feat: Convention 플러그인 설정
- Android Application, Library, Compose, Hilt, Kotlin JVM Convention 플러그인 추가 - 각 플러그인에 대한 기본 설정 및 의존성 추가 - build-logic 모듈에 Convention 플러그인 등록 - 버전 카탈로그에 Convention 플러그인 등록
1 parent b287522 commit c8da5b5

10 files changed

Lines changed: 267 additions & 0 deletions

File tree

build-logic/convention/build.gradle.kts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,32 @@ dependencies {
1919
compileOnly(libs.kotlin.gradle.plugin)
2020
compileOnly(libs.compose.compiler.gradle.plugin)
2121
}
22+
23+
gradlePlugin {
24+
plugins {
25+
register("androidApplication") {
26+
id = "bitnagil.android.application"
27+
implementationClass = "com.threegap.bitnagil.convention.AndroidApplicationPlugin"
28+
}
29+
30+
register("androidLibrary") {
31+
id = "bitnagil.android.library"
32+
implementationClass = "com.threegap.bitnagil.convention.AndroidLibraryPlugin"
33+
}
34+
35+
register("androidComposeLibrary") {
36+
id = "bitnagil.android.compose.library"
37+
implementationClass = "com.threegap.bitnagil.convention.AndroidComposePlugin"
38+
}
39+
40+
register("androidHilt") {
41+
id = "bitnagil.android.hilt"
42+
implementationClass = "com.threegap.bitnagil.convention.HiltPlugin"
43+
}
44+
45+
register("kotlin") {
46+
id = "bitnagil.kotlin"
47+
implementationClass = "com.threegap.bitnagil.convention.KotlinJvmPlugin"
48+
}
49+
}
50+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.threegap.bitnagil.convention
2+
3+
import com.android.build.api.dsl.ApplicationExtension
4+
import com.threegap.bitnagil.convention.extension.configureComposeAndroid
5+
import com.threegap.bitnagil.convention.extension.configureKotlinAndroid
6+
import org.gradle.api.Plugin
7+
import org.gradle.api.Project
8+
import org.gradle.api.artifacts.VersionCatalogsExtension
9+
import org.gradle.kotlin.dsl.getByType
10+
import org.gradle.kotlin.dsl.configure
11+
12+
class AndroidApplicationPlugin : Plugin<Project> {
13+
override fun apply(target: Project): Unit = with(target) {
14+
pluginManager.apply {
15+
apply("com.android.application")
16+
apply("org.jetbrains.kotlin.android")
17+
apply("org.jetbrains.kotlin.plugin.compose")
18+
}
19+
20+
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
21+
extensions.configure<ApplicationExtension> {
22+
configureKotlinAndroid(this)
23+
configureComposeAndroid(this)
24+
with(defaultConfig) {
25+
targetSdk = libs.findVersion("targetSdk").get().requiredVersion.toInt()
26+
versionCode = libs.findVersion("versionCode").get().requiredVersion.toInt()
27+
versionName = libs.findVersion("versionName").get().requiredVersion
28+
}
29+
}
30+
}
31+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.threegap.bitnagil.convention
2+
3+
import com.android.build.gradle.LibraryExtension
4+
import com.threegap.bitnagil.convention.extension.configureComposeAndroid
5+
import org.gradle.api.Plugin
6+
import org.gradle.api.Project
7+
import org.gradle.kotlin.dsl.configure
8+
9+
class AndroidComposePlugin : Plugin<Project> {
10+
override fun apply(target: Project): Unit = with(target) {
11+
pluginManager.apply {
12+
apply("org.jetbrains.kotlin.plugin.compose")
13+
}
14+
15+
extensions.configure<LibraryExtension> {
16+
configureComposeAndroid(this)
17+
}
18+
}
19+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.threegap.bitnagil.convention
2+
3+
import com.android.build.gradle.LibraryExtension
4+
import com.threegap.bitnagil.convention.extension.configureKotlinAndroid
5+
import com.threegap.bitnagil.convention.extension.configureKotlinCoroutine
6+
import org.gradle.api.Plugin
7+
import org.gradle.api.Project
8+
import org.gradle.kotlin.dsl.configure
9+
10+
class AndroidLibraryPlugin : Plugin<Project> {
11+
override fun apply(target: Project): Unit = with(target) {
12+
pluginManager.apply {
13+
apply("com.android.library")
14+
apply("org.jetbrains.kotlin.android")
15+
}
16+
17+
extensions.configure<LibraryExtension> {
18+
configureKotlinAndroid(this)
19+
configureKotlinCoroutine(this)
20+
}
21+
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.threegap.bitnagil.convention
2+
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.api.artifacts.VersionCatalogsExtension
6+
import org.gradle.kotlin.dsl.dependencies
7+
import org.gradle.kotlin.dsl.getByType
8+
9+
class HiltPlugin : Plugin<Project> {
10+
override fun apply(target: Project): Unit = with(target) {
11+
pluginManager.apply {
12+
apply("dagger.hilt.android.plugin")
13+
apply("com.google.devtools.ksp")
14+
}
15+
16+
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
17+
dependencies {
18+
"implementation"(libs.findLibrary("hilt.android").get())
19+
"ksp"(libs.findLibrary("hilt.compiler").get())
20+
}
21+
}
22+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.threegap.bitnagil.convention
2+
3+
import org.gradle.api.JavaVersion
4+
import org.gradle.api.Plugin
5+
import org.gradle.api.Project
6+
import org.gradle.api.plugins.JavaPluginExtension
7+
import org.gradle.kotlin.dsl.configure
8+
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
9+
10+
class KotlinJvmPlugin : Plugin<Project> {
11+
override fun apply(target: Project): Unit = with(target) {
12+
with(target) {
13+
pluginManager.apply {
14+
apply("java-library")
15+
apply("org.jetbrains.kotlin.jvm")
16+
}
17+
}
18+
19+
extensions.configure<JavaPluginExtension> {
20+
sourceCompatibility = JavaVersion.VERSION_17
21+
targetCompatibility = JavaVersion.VERSION_17
22+
}
23+
24+
extensions.configure<KotlinJvmProjectExtension> {
25+
jvmToolchain(17)
26+
}
27+
}
28+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.threegap.bitnagil.convention.extension
2+
3+
import com.android.build.api.dsl.CommonExtension
4+
import org.gradle.api.Project
5+
import org.gradle.api.artifacts.VersionCatalogsExtension
6+
import org.gradle.kotlin.dsl.getByType
7+
import org.gradle.kotlin.dsl.dependencies
8+
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension
9+
10+
internal fun Project.configureComposeAndroid(commonExtension: CommonExtension<*, *, *, *, *, *>) {
11+
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
12+
13+
commonExtension.apply {
14+
buildFeatures {
15+
compose = true
16+
}
17+
18+
extensions.getByType<ComposeCompilerGradlePluginExtension>().apply {
19+
includeSourceInformation.set(true)
20+
}
21+
22+
dependencies {
23+
"implementation"(platform(libs.findLibrary("compose.bom").get()))
24+
"implementation"(libs.findBundle("compose").get())
25+
"implementation"(libs.findBundle("compose.lifecycle").get())
26+
"debugImplementation"(libs.findBundle("compose.debug").get())
27+
}
28+
}
29+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.threegap.bitnagil.convention.extension
2+
3+
import com.android.build.api.dsl.CommonExtension
4+
import org.gradle.api.JavaVersion
5+
import org.gradle.api.Project
6+
import org.gradle.api.artifacts.VersionCatalogsExtension
7+
import org.gradle.kotlin.dsl.getByType
8+
import org.gradle.kotlin.dsl.withType
9+
import org.gradle.kotlin.dsl.provideDelegate
10+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
11+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
12+
13+
internal fun Project.configureKotlinAndroid(commonExtension: CommonExtension<*, *, *, *, *, *>) {
14+
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
15+
16+
commonExtension.apply {
17+
compileSdk = libs.findVersion("compileSdk").get().requiredVersion.toInt()
18+
19+
defaultConfig {
20+
minSdk = libs.findVersion("minSdk").get().requiredVersion.toInt()
21+
vectorDrawables.useSupportLibrary = true
22+
}
23+
24+
compileOptions {
25+
sourceCompatibility = JavaVersion.VERSION_17
26+
targetCompatibility = JavaVersion.VERSION_17
27+
}
28+
29+
buildTypes {
30+
getByName("debug") {
31+
isMinifyEnabled = false
32+
}
33+
34+
getByName("release") {
35+
isMinifyEnabled = false
36+
proguardFiles(
37+
getDefaultProguardFile("proguard-android-optimize.txt"),
38+
"proguard-rules.pro"
39+
)
40+
}
41+
}
42+
43+
packaging {
44+
resources {
45+
excludes.add("META-INF/AL2.0")
46+
excludes.add("META-INF/LGPL2.1")
47+
}
48+
}
49+
50+
tasks.withType<KotlinCompile>().configureEach {
51+
compilerOptions {
52+
jvmTarget.set(JvmTarget.JVM_17)
53+
54+
val warningsAsErrors: String? by project
55+
allWarningsAsErrors.set(warningsAsErrors.toBoolean())
56+
freeCompilerArgs.addAll(
57+
listOf(
58+
"-opt-in=kotlin.RequiresOptIn",
59+
)
60+
)
61+
}
62+
}
63+
}
64+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.threegap.bitnagil.convention.extension
2+
3+
import com.android.build.api.dsl.CommonExtension
4+
import org.gradle.api.Project
5+
import org.gradle.api.artifacts.VersionCatalogsExtension
6+
import org.gradle.kotlin.dsl.getByType
7+
import org.gradle.kotlin.dsl.dependencies
8+
9+
internal fun Project.configureKotlinCoroutine(commonExtension: CommonExtension<*, *, *, *, *, *>) {
10+
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
11+
12+
commonExtension.apply {
13+
dependencies {
14+
"implementation"(libs.findBundle("coroutine").get())
15+
}
16+
}
17+
}

gradle/libs.versions.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,3 +176,9 @@ ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
176176
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
177177
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" }
178178

179+
# Custom Plugins
180+
bitnagil-android-application = { id = "bitnagil.android.application", version = "unspecified" }
181+
bitnagil-android-library = { id = "bitnagil.android.library", version = "unspecified" }
182+
bitnagil-android-compose-library = { id = "bitnagil.android.compose.library", version = "unspecified" }
183+
bitnagil-android-hilt = { id = "bitnagil.android.hilt", version = "unspecified" }
184+
bitnagil-kotlin = { id = "bitnagil.kotlin", version = "unspecified" }

0 commit comments

Comments
 (0)