Skip to content

Commit a39924f

Browse files
committed
[BOOK-37] chore: build-logic 세팅
1 parent 3d59e16 commit a39924f

19 files changed

Lines changed: 425 additions & 37 deletions

app/build.gradle.kts

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
11
plugins {
2-
alias(libs.plugins.android.application)
3-
alias(libs.plugins.kotlin.android)
4-
alias(libs.plugins.kotlin.compose)
2+
alias(libs.plugins.booket.android.application)
3+
alias(libs.plugins.booket.android.hilt)
4+
alias(libs.plugins.booket.android.application.compose)
55
}
66

77
android {
88
namespace = "com.ninecraft.booket"
9-
compileSdk = 35
10-
11-
defaultConfig {
12-
applicationId = "com.ninecraft.booket"
13-
minSdk = 28
14-
targetSdk = 35
15-
versionCode = 1
16-
versionName = "1.0"
17-
18-
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
19-
}
209

2110
buildTypes {
2211
release {
@@ -27,15 +16,9 @@ android {
2716
)
2817
}
2918
}
30-
compileOptions {
31-
sourceCompatibility = JavaVersion.VERSION_11
32-
targetCompatibility = JavaVersion.VERSION_11
33-
}
34-
kotlinOptions {
35-
jvmTarget = "11"
36-
}
19+
3720
buildFeatures {
38-
compose = true
21+
buildConfig = true
3922
}
4023
}
4124

@@ -45,15 +28,14 @@ dependencies {
4528
implementation(libs.androidx.lifecycle.runtime.ktx)
4629
implementation(libs.androidx.activity.compose)
4730
implementation(platform(libs.androidx.compose.bom))
48-
implementation(libs.androidx.ui)
49-
implementation(libs.androidx.ui.graphics)
50-
implementation(libs.androidx.ui.tooling.preview)
51-
implementation(libs.androidx.material3)
31+
implementation(libs.androidx.compose.ui)
32+
implementation(libs.androidx.compose.ui.graphics)
33+
implementation(libs.androidx.compose.ui.tooling.preview)
34+
implementation(libs.androidx.compose.material3)
5235
testImplementation(libs.junit)
5336
androidTestImplementation(libs.androidx.junit)
54-
androidTestImplementation(libs.androidx.espresso.core)
5537
androidTestImplementation(platform(libs.androidx.compose.bom))
56-
androidTestImplementation(libs.androidx.ui.test.junit4)
57-
debugImplementation(libs.androidx.ui.tooling)
58-
debugImplementation(libs.androidx.ui.test.manifest)
38+
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
39+
debugImplementation(libs.androidx.compose.ui.tooling)
40+
debugImplementation(libs.androidx.compose.ui.test.manifest)
5941
}

build-logic/build.gradle.kts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
@Suppress("DSL_SCOPE_VIOLATION")
2+
3+
plugins {
4+
`kotlin-dsl`
5+
alias(libs.plugins.gradle.dependency.handler.extensions)
6+
}
7+
8+
group = "com.ninecraft.booket.buildlogic"
9+
10+
dependencies {
11+
compileOnly(libs.android.gradle.plugin)
12+
compileOnly(libs.kotlin.gradle.plugin)
13+
implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
14+
}
15+
16+
gradlePlugin {
17+
val conventionPluginClasses = listOf(
18+
"android.application" to "AndroidApplicationConventionPlugin",
19+
"android.application.compose" to "AndroidApplicationComposeConventionPlugin",
20+
"android.library" to "AndroidLibraryConventionPlugin",
21+
"android.library.compose" to "AndroidLibraryComposeConventionPlugin",
22+
"android.feature" to "AndroidFeatureConventionPlugin",
23+
"android.hilt" to "AndroidHiltConventionPlugin",
24+
"jvm-library" to "JvmLibraryConventionPlugin",
25+
"kotlin-library-serialization" to "KotlinLibrarySerializationConventionPlugin",
26+
)
27+
28+
plugins {
29+
conventionPluginClasses.forEach { pluginClass ->
30+
pluginRegister(pluginClass)
31+
}
32+
}
33+
}
34+
35+
java {
36+
toolchain {
37+
languageVersion.set(JavaLanguageVersion.of(17))
38+
}
39+
}
40+
41+
kotlin {
42+
jvmToolchain(17)
43+
}
44+
45+
// Pair<PluginName, ClassName>
46+
fun NamedDomainObjectContainer<PluginDeclaration>.pluginRegister(data: Pair<String, String>) {
47+
val (pluginName, className) = data
48+
register(pluginName) {
49+
id = "booket.$pluginName"
50+
implementationClass = className
51+
}
52+
}

build-logic/settings.gradle.kts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
dependencyResolutionManagement {
2+
repositories {
3+
google()
4+
mavenCentral()
5+
gradlePluginPortal()
6+
}
7+
versionCatalogs {
8+
create("libs") {
9+
from(files("../gradle/libs.versions.toml"))
10+
}
11+
}
12+
}
13+
14+
rootProject.name = "build-logic"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import com.android.build.api.dsl.ApplicationExtension
2+
import com.ninecraft.booket.convention.Plugins
3+
import com.ninecraft.booket.convention.applyPlugins
4+
import com.ninecraft.booket.convention.configureCompose
5+
import org.gradle.api.Plugin
6+
import org.gradle.api.Project
7+
import org.gradle.kotlin.dsl.configure
8+
9+
internal class AndroidApplicationComposeConventionPlugin : Plugin<Project> {
10+
override fun apply(target: Project) {
11+
with(target) {
12+
applyPlugins(
13+
Plugins.ANDROID_APPLICATION,
14+
)
15+
16+
extensions.configure<ApplicationExtension> {
17+
configureCompose(this)
18+
}
19+
}
20+
}
21+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import com.android.build.api.dsl.ApplicationExtension
2+
import com.ninecraft.booket.convention.ApplicationConstants
3+
import com.ninecraft.booket.convention.Plugins
4+
import com.ninecraft.booket.convention.applyPlugins
5+
import com.ninecraft.booket.convention.configureAndroid
6+
import org.gradle.api.Plugin
7+
import org.gradle.api.Project
8+
import org.gradle.kotlin.dsl.configure
9+
10+
internal class AndroidApplicationConventionPlugin : Plugin<Project> {
11+
override fun apply(target: Project) {
12+
with(target) {
13+
applyPlugins(
14+
Plugins.ANDROID_APPLICATION,
15+
Plugins.KOTLIN_ANDROID,
16+
)
17+
18+
extensions.configure<ApplicationExtension> {
19+
configureAndroid(this)
20+
21+
defaultConfig {
22+
targetSdk = ApplicationConstants.targetSdk
23+
versionName = ApplicationConstants.versionName
24+
versionCode = ApplicationConstants.versionCode
25+
}
26+
}
27+
}
28+
}
29+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import com.ninecraft.booket.convention.applyPlugins
2+
import org.gradle.api.Plugin
3+
import org.gradle.api.Project
4+
import org.gradle.kotlin.dsl.dependencies
5+
6+
internal class AndroidFeatureConventionPlugin : Plugin<Project> {
7+
override fun apply(target: Project) {
8+
with(target) {
9+
applyPlugins(
10+
"booket-android-library",
11+
"booket-android-hilt",
12+
"booket-android-library-compose",
13+
)
14+
15+
dependencies {
16+
17+
}
18+
}
19+
}
20+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import com.ninecraft.booket.convention.Plugins
2+
import com.ninecraft.booket.convention.applyPlugins
3+
import com.ninecraft.booket.convention.implementation
4+
import com.ninecraft.booket.convention.ksp
5+
import com.ninecraft.booket.convention.libs
6+
import org.gradle.api.Plugin
7+
import org.gradle.api.Project
8+
import org.gradle.kotlin.dsl.dependencies
9+
10+
internal class AndroidHiltConventionPlugin : Plugin<Project> {
11+
override fun apply(target: Project) {
12+
with(target) {
13+
applyPlugins(
14+
Plugins.HILT,
15+
Plugins.KSP,
16+
)
17+
18+
dependencies {
19+
implementation(libs.hilt.android)
20+
ksp(libs.hilt.compiler)
21+
}
22+
}
23+
}
24+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import com.android.build.gradle.LibraryExtension
2+
import com.ninecraft.booket.convention.Plugins
3+
import com.ninecraft.booket.convention.applyPlugins
4+
import com.ninecraft.booket.convention.configureCompose
5+
import org.gradle.api.Plugin
6+
import org.gradle.api.Project
7+
import org.gradle.kotlin.dsl.configure
8+
9+
class AndroidLibraryComposeConventionPlugin : Plugin<Project> {
10+
override fun apply(target: Project) {
11+
with(target) {
12+
applyPlugins(
13+
Plugins.ANDROID_LIBRARY,
14+
)
15+
16+
extensions.configure<LibraryExtension> {
17+
configureCompose(this)
18+
}
19+
}
20+
}
21+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import com.android.build.gradle.LibraryExtension
2+
import com.ninecraft.booket.convention.Plugins
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import com.ninecraft.booket.convention.applyPlugins
6+
import com.ninecraft.booket.convention.configureAndroid
7+
import org.gradle.kotlin.dsl.configure
8+
9+
internal class AndroidLibraryConventionPlugin : Plugin<Project> {
10+
override fun apply(target: Project) {
11+
with(target) {
12+
applyPlugins(
13+
Plugins.ANDROID_LIBRARY,
14+
Plugins.KOTLIN_ANDROID,
15+
)
16+
17+
extensions.configure<LibraryExtension> {
18+
configureAndroid(this)
19+
}
20+
}
21+
}
22+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import com.ninecraft.booket.convention.ApplicationConstants
2+
import com.ninecraft.booket.convention.Plugins
3+
import com.ninecraft.booket.convention.applyPlugins
4+
import com.ninecraft.booket.convention.implementation
5+
import com.ninecraft.booket.convention.libs
6+
import org.gradle.api.Plugin
7+
import org.gradle.api.Project
8+
import org.gradle.api.plugins.JavaPluginExtension
9+
import org.gradle.kotlin.dsl.configure
10+
import org.gradle.kotlin.dsl.dependencies
11+
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
12+
13+
internal class JvmLibraryConventionPlugin : Plugin<Project> {
14+
override fun apply(target: Project) {
15+
with(target) {
16+
applyPlugins(
17+
Plugins.JAVA_LIBRARY,
18+
Plugins.KOTLIN_JVM,
19+
)
20+
21+
extensions.configure<JavaPluginExtension> {
22+
sourceCompatibility = ApplicationConstants.javaVersion
23+
targetCompatibility = ApplicationConstants.javaVersion
24+
}
25+
26+
extensions.configure<KotlinProjectExtension> {
27+
jvmToolchain(ApplicationConstants.javaVersionInt)
28+
}
29+
30+
dependencies {
31+
implementation(libs.detekt.formatting)
32+
}
33+
}
34+
}
35+
}

0 commit comments

Comments
 (0)