Skip to content

Commit

Permalink
[FEAT] Convention Plugin 설정 개선
Browse files Browse the repository at this point in the history
하드 코딩된 문자열을 이용하는 findVersion, findLibrary 함수를 사용하지 않는 방향으로 리팩토링, 휴먼 에러 방지
  • Loading branch information
easyhooon committed Jan 23, 2024
1 parent 4219fb1 commit 3c05c72
Show file tree
Hide file tree
Showing 13 changed files with 101 additions and 42 deletions.
14 changes: 10 additions & 4 deletions build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,16 @@ kotlin {
}

dependencies {
implementations(
libs.gradle.android,
libs.gradle.kotlin,
)
compileOnly(libs.gradle.android)
compileOnly(libs.gradle.kotlin)

compileOnly(files(libs.javaClass.superclass.protectionDomain.codeSource.location))

// implementations(
// libs.gradle.android,
// libs.gradle.kotlin,
// files(libs.javaClass.superclass.protectionDomain.codeSource.location),
// )
}

// Pair<PluginName, ClassName>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import com.nexters.ilab.android.Plugins
import com.nexters.ilab.android.applyPlugins
import com.nexters.ilab.android.implementation
import com.nexters.ilab.android.libs
import org.gradle.kotlin.dsl.dependencies

Expand All @@ -8,10 +9,9 @@ internal class AndroidApplicationFirebaseConventionPlugin : BuildLogicConvention
applyPlugins(Plugins.GoogleServices, Plugins.FirebaseCrashlytics)

dependencies {
val bom = libs.findLibrary("firebase-bom").get()
add("implementation", platform(bom))
"implementation"(libs.findLibrary("firebase.analytics").get())
"implementation"(libs.findLibrary("firebase.crashlytics").get())
implementation(libs.firebase.bom)
implementation(libs.firebase.analytics)
implementation(libs.firebase.crashlytics)
}
},
)
19 changes: 10 additions & 9 deletions build-logic/src/main/kotlin/AndroidFeatureConventionPlugin.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import com.nexters.ilab.android.applyPlugins
import com.nexters.ilab.android.implementation
import com.nexters.ilab.android.libs
import com.nexters.ilab.android.project
import org.gradle.kotlin.dsl.dependencies

internal class AndroidFeatureConventionPlugin : BuildLogicConventionPlugin(
Expand All @@ -11,16 +13,15 @@ internal class AndroidFeatureConventionPlugin : BuildLogicConventionPlugin(
)

dependencies {
add("implementation", project(":core:common"))
add("implementation", project(":core:designsystem"))
add("implementation", project(":core:domain"))
add("implementation", project(":core:ui"))
add("implementation", project(":feature:navigator"))
implementation(project(path = ":core:common"))
implementation(project(path = ":core:designsystem"))
implementation(project(path = ":core:domain"))
implementation(project(path = ":core:ui"))
implementation(project(path = ":feature:navigator"))

add("implementation", libs.findLibrary("androidx.hilt.navigation.compose").get())

add("implementation", libs.findBundle("androidx.lifecycle").get())
add("implementation", libs.findBundle("orbit").get())
implementation(libs.androidx.hilt.navigation.compose)
implementation(libs.bundles.androidx.lifecycle)
implementation(libs.bundles.orbit)
}
},
)
6 changes: 4 additions & 2 deletions build-logic/src/main/kotlin/AndroidHiltConventionPlugin.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import com.nexters.ilab.android.Plugins
import com.nexters.ilab.android.applyPlugins
import com.nexters.ilab.android.implementation
import com.nexters.ilab.android.ksp
import com.nexters.ilab.android.libs
import org.gradle.kotlin.dsl.dependencies

Expand All @@ -8,8 +10,8 @@ internal class AndroidHiltConventionPlugin : BuildLogicConventionPlugin(
applyPlugins(Plugins.hilt, Plugins.Ksp)

dependencies {
add("implementation", libs.findLibrary("hilt-android").get())
add("ksp", libs.findLibrary("hilt-android-compiler").get())
implementation(libs.hilt.android)
ksp(libs.hilt.android.compiler)
}
},
)
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import com.nexters.ilab.android.Plugins
import com.nexters.ilab.android.applyPlugins
import com.nexters.ilab.android.implementation
import com.nexters.ilab.android.libs
import org.gradle.kotlin.dsl.dependencies

Expand All @@ -8,10 +9,10 @@ internal class AndroidRetrofitConventionPlugin : BuildLogicConventionPlugin(
applyPlugins(Plugins.KotlinxSerialization)

dependencies {
add("implementation", libs.findLibrary("retrofit").get())
add("implementation", libs.findLibrary("retrofit.kotlinx.serialization.converter").get())
add("implementation", libs.findLibrary("okhttp.logging.interceptor").get())
add("implementation", libs.findLibrary("kotlinx.serialization.json").get())
implementation(libs.retrofit)
implementation(libs.retrofit.kotlinx.serialization.converter)
implementation(libs.okhttp.logging.interceptor)
implementation(libs.kotlinx.serialization.json)
}
},
)
5 changes: 3 additions & 2 deletions build-logic/src/main/kotlin/JvmKotlinConventionPlugin.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import com.nexters.ilab.android.ApplicationConfig
import com.nexters.ilab.android.Plugins
import com.nexters.ilab.android.applyPlugins
import com.nexters.ilab.android.detektPlugins
import com.nexters.ilab.android.libs
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.kotlin.dsl.configure
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
import org.gradle.kotlin.dsl.dependencies
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension

internal class JvmKotlinConventionPlugin : BuildLogicConventionPlugin({
applyPlugins(Plugins.JavaLibrary, Plugins.KotlinJvm)
Expand All @@ -20,6 +21,6 @@ internal class JvmKotlinConventionPlugin : BuildLogicConventionPlugin({
}

dependencies {
add("detektPlugins", libs.findLibrary("detekt-formatting").get())
detektPlugins(libs.detekt.formatting)
}
})
5 changes: 3 additions & 2 deletions build-logic/src/main/kotlin/TestKotestConventionPlugin.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import com.nexters.ilab.android.androidExtensions
import com.nexters.ilab.android.isAndroidProject
import com.nexters.ilab.android.libs
import com.nexters.ilab.android.testImplementation
import org.gradle.api.Project
import org.gradle.api.tasks.testing.AbstractTestTask
import org.gradle.api.tasks.testing.Test
Expand All @@ -15,8 +16,8 @@ internal class TestKotestConventionPlugin : BuildLogicConventionPlugin(
{
useTestPlatformForTarget()
dependencies {
add("testImplementation", libs.findLibrary("kotest.runner").get())
add("testImplementation", libs.findLibrary("kotest.assertions").get())
testImplementation(libs.kotest.runner)
testImplementation(libs.kotest.assertion)
}
},
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ internal fun Project.configureAndroid(extension: CommonExtension<*, *, *, *, *>)
}

dependencies {
add("coreLibraryDesugaring", libs.findLibrary("desugar.jdk.libs").get())
add("detektPlugins", libs.findLibrary("detekt-formatting").get())
coreLibraryDesugaring(libs.desugar.jdk.libs)
detektPlugins(libs.detekt.formatting)
}

buildTypes {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package com.nexters.ilab.android

import com.android.build.api.dsl.CommonExtension
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.gradle.kotlin.dsl.dependencies

internal fun Project.configureCompose(extension: CommonExtension<*, *, *, *, *>) {
extension.apply {
Expand All @@ -13,19 +13,17 @@ internal fun Project.configureCompose(extension: CommonExtension<*, *, *, *, *>)
}

composeOptions {
kotlinCompilerExtensionVersion = libs.findVersion("androidx-compose-compiler").get().toString()
kotlinCompilerExtensionVersion = libs.versions.androidx.compose.compiler.get()
}

dependencies {
val bom = libs.findLibrary("androidx-compose-bom").get()
add("implementation", platform(bom))
add("androidTestImplementation", platform(bom))

add("implementation", libs.findLibrary("androidx.compose.material3").get())
add("implementation", libs.findLibrary("androidx.compose.ui").get())
add("implementation", libs.findLibrary("androidx.compose.ui.tooling.preview").get())
add("implementation", libs.findLibrary("androidx.navigation.compose").get())
add("debugImplementation", libs.findLibrary("androidx.compose.ui.tooling").get())
implementation(libs.androidx.compose.bom)
androidTestImplementation(libs.androidx.compose.bom)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.tooling.preview)
debugImplementation(libs.androidx.compose.ui.tooling)
implementation(libs.androidx.navigation.compose)
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.nexters.ilab.android

import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.dsl.DependencyHandler

fun DependencyHandler.implementation(dependencyNotation: Any): Dependency? {
return add("implementation", dependencyNotation)
}

fun DependencyHandler.ksp(dependencyNotation: Any): Dependency? {
return add("ksp", dependencyNotation)
}

fun DependencyHandler.androidTestImplementation(dependencyNotation: Any): Dependency? {
return add("androidTestImplementation", dependencyNotation)
}

fun DependencyHandler.debugImplementation(dependencyNotation: Any): Dependency? {
return add("debugImplementation", dependencyNotation)
}

fun DependencyHandler.testImplementation(dependencyNotation: Any): Dependency? {
return add("testImplementation", dependencyNotation)
}

fun DependencyHandler.coreLibraryDesugaring(dependencyNotation: Any): Dependency? {
return add("coreLibraryDesugaring", dependencyNotation)
}

fun DependencyHandler.detektPlugins(dependencyNotation: Any): Dependency? {
return add("detektPlugins", dependencyNotation)
}

fun DependencyHandler.compileOnly(dependencyNotation: Any): Dependency? {
return add("compileOnly", dependencyNotation)
}

fun DependencyHandler.project(
path: String,
configuration: String? = null,
): Dependency {
return project(
mapOf(
"path" to path,
"configuration" to configuration,
).filterValues { it != null }
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@ package com.nexters.ilab.android
import com.android.build.api.dsl.CommonExtension
import com.android.build.api.dsl.LibraryExtension
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Action
import org.gradle.api.GradleException
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.NamedDomainObjectContainerScope
import org.gradle.kotlin.dsl.getByType
import org.gradle.kotlin.dsl.the

internal val Project.libs
get() = extensions.getByType<VersionCatalogsExtension>().named("libs")
get() = the<LibrariesForLibs>()

internal fun Project.applyPlugins(vararg plugins: String) {
plugins.forEach(pluginManager::apply)
Expand Down

0 comments on commit 3c05c72

Please sign in to comment.