From d697a59c267bb65290a8634e550e135da4dba64b Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Mon, 13 Nov 2023 22:52:07 +0800 Subject: [PATCH] feat: add enable or disable dependencyResolutionManagement function --- .../manager/RepositoryManager.kt | 56 +++++++++++++------ .../config/proxy/ISweetDependencyConfigs.kt | 4 ++ .../SweetDependencyConfigureExtension.kt | 13 +++++ .../impl/SweetDependencyExtensionImpl.kt | 6 +- 4 files changed, 61 insertions(+), 18 deletions(-) diff --git a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/RepositoryManager.kt b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/RepositoryManager.kt index 7ad0698..5888add 100644 --- a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/RepositoryManager.kt +++ b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/RepositoryManager.kt @@ -23,6 +23,7 @@ package com.highcapable.sweetdependency.manager import com.highcapable.sweetdependency.document.PreferencesDocument import com.highcapable.sweetdependency.document.RepositoryDocument +import com.highcapable.sweetdependency.document.factory.RepositoryList import com.highcapable.sweetdependency.exception.SweetDependencyUnresolvedException import com.highcapable.sweetdependency.gradle.helper.GradleHelper import com.highcapable.sweetdependency.manager.const.AdditionalRepositories @@ -33,6 +34,7 @@ import com.highcapable.sweetdependency.utils.debug.SLog import com.highcapable.sweetdependency.utils.noBlank import com.highcapable.sweetdependency.utils.noEmpty import com.highcapable.sweetdependency.utils.toFile +import org.gradle.api.Project import org.gradle.api.artifacts.dsl.RepositoryHandler import org.gradle.api.artifacts.repositories.ArtifactRepository import org.gradle.api.artifacts.repositories.AuthenticationSupported @@ -46,32 +48,27 @@ import org.gradle.api.initialization.resolve.RepositoriesMode as GradleRepositor */ internal object RepositoryManager { + /** 当前存储库数组 */ + private var repositories: RepositoryList = mutableListOf() + + /** + * 当前是否使用 [Settings.dependencyResolutionManagement] 管理库依赖 + * @return [Boolean] + */ + private val isUseDependencyResolutionManagement get() = SweetDependencyConfigs.configs.isUseDependencyResolutionManagement + /** * 生成并应用存储库数组 * @param settings 当前设置 */ internal fun generateAndApply(settings: Settings) { - val repositories = SweetDependencyConfigs.document.repositories() + repositories = SweetDependencyConfigs.document.repositories() Repositories.generate(repositories) - /** - * 应用存储库数组到 Gradle - * @param isPlugins 当前应用类型是否为插件依赖 - */ - fun RepositoryHandler.apply(isPlugins: Boolean) = repositories.forEach { - if (it.isIncludeScope(isPlugins)) when (it.nodeType) { - RepositoryDocument.RepositoryType.GOOGLE -> google { applyToArtifact(it) } - RepositoryDocument.RepositoryType.MAVEN_CENTRAL -> mavenCentral { applyToArtifact(it) } - RepositoryDocument.RepositoryType.MAVEN_LOCAL -> mavenLocal { applyToArtifact(it) } - RepositoryDocument.RepositoryType.MAVEN -> maven { applyToArtifact(it) } - RepositoryDocument.RepositoryType.GRADLE_PLUGIN_PORTAL -> gradlePluginPortal { applyToArtifact(it) } - else -> {} - } - } settings.pluginManagement { this.repositories.clear() this.repositories.apply(isPlugins = true) } - settings.dependencyResolutionManagement { + if (isUseDependencyResolutionManagement) settings.dependencyResolutionManagement { this.repositoriesMode.set(when (SweetDependencyConfigs.document.preferences().repositoriesMode) { PreferencesDocument.RepositoriesMode.PREFER_PROJECT -> GradleRepositoriesMode.PREFER_PROJECT PreferencesDocument.RepositoriesMode.PREFER_SETTINGS -> GradleRepositoriesMode.PREFER_SETTINGS @@ -82,6 +79,33 @@ internal object RepositoryManager { } } + /** + * 应用存储库数组 + * @param rootProject 当前根项目 + */ + internal fun apply(rootProject: Project) { + if (!isUseDependencyResolutionManagement) + rootProject.allprojects { + this.repositories.clear() + this.repositories.apply(isPlugins = false) + } + } + + /** + * 应用存储库数组到 Gradle + * @param isPlugins 当前应用类型是否为插件依赖 + */ + private fun RepositoryHandler.apply(isPlugins: Boolean) = repositories.forEach { + if (it.isIncludeScope(isPlugins)) when (it.nodeType) { + RepositoryDocument.RepositoryType.GOOGLE -> google { applyToArtifact(it) } + RepositoryDocument.RepositoryType.MAVEN_CENTRAL -> mavenCentral { applyToArtifact(it) } + RepositoryDocument.RepositoryType.MAVEN_LOCAL -> mavenLocal { applyToArtifact(it) } + RepositoryDocument.RepositoryType.MAVEN -> maven { applyToArtifact(it) } + RepositoryDocument.RepositoryType.GRADLE_PLUGIN_PORTAL -> gradlePluginPortal { applyToArtifact(it) } + else -> {} + } + } + /** * 应用存储库到 [ArtifactRepository] * @param document 存储库配置项文档实体 diff --git a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/config/proxy/ISweetDependencyConfigs.kt b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/config/proxy/ISweetDependencyConfigs.kt index 8f3d267..2ad6dbc 100644 --- a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/config/proxy/ISweetDependencyConfigs.kt +++ b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/config/proxy/ISweetDependencyConfigs.kt @@ -22,6 +22,7 @@ package com.highcapable.sweetdependency.plugin.config.proxy import com.highcapable.sweetdependency.SweetDependency +import org.gradle.api.initialization.Settings /** * [SweetDependency] 配置类接口类 @@ -44,6 +45,9 @@ internal interface ISweetDependencyConfigs { /** [SweetDependency] 的配置文件路径 */ val configFilePath: String + /** 是否使用 [Settings.dependencyResolutionManagement] 管理库依赖 */ + val isUseDependencyResolutionManagement: Boolean + /** 是否启用依赖自动装配日志 */ val isEnableDependenciesAutowireLog: Boolean diff --git a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/extension/dsl/configure/SweetDependencyConfigureExtension.kt b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/extension/dsl/configure/SweetDependencyConfigureExtension.kt index 2db305e..d217654 100644 --- a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/extension/dsl/configure/SweetDependencyConfigureExtension.kt +++ b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/extension/dsl/configure/SweetDependencyConfigureExtension.kt @@ -26,6 +26,7 @@ package com.highcapable.sweetdependency.plugin.extension.dsl.configure import com.highcapable.sweetdependency.SweetDependency import com.highcapable.sweetdependency.environment.Environment import com.highcapable.sweetdependency.plugin.config.proxy.ISweetDependencyConfigs +import org.gradle.api.initialization.Settings /** * [SweetDependency] 配置方法体实现类 @@ -54,6 +55,16 @@ open class SweetDependencyConfigureExtension internal constructor() { var configFileName = ISweetDependencyConfigs.DEFAULT_CONFIG_FILE_NAME @JvmName("configFileName") set + /** + * 是否使用 [Settings.dependencyResolutionManagement] 管理库依赖 + * + * 此功能默认启用 - 如果你的项目必须存在自定义的 "repositories" 方法块 - 请关闭此功能 + * + * - 注意:关闭后配置文件中的 "repositories-mode" 选项将不再有效 + */ + var isUseDependencyResolutionManagement = true + @JvmName("useDependencyResolutionManagement") set + /** * 是否启用依赖自动装配日志 * @@ -77,11 +88,13 @@ open class SweetDependencyConfigureExtension internal constructor() { internal fun build(): ISweetDependencyConfigs { val currentEnable = isEnable val currentConfigFilePath = Environment.resourcesDir(configFileName).absolutePath + val currentUseDependencyResolutionManagement = isUseDependencyResolutionManagement val currentEnableDependenciesAutowireLog = isEnableDependenciesAutowireLog val currentEnableVerboseMode = isEnableVerboseMode return object : ISweetDependencyConfigs { override val isEnable get() = currentEnable override val configFilePath get() = currentConfigFilePath + override val isUseDependencyResolutionManagement get() = currentUseDependencyResolutionManagement override val isEnableDependenciesAutowireLog get() = currentEnableDependenciesAutowireLog override val isEnableVerboseMode get() = currentEnableVerboseMode } diff --git a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/impl/SweetDependencyExtensionImpl.kt b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/impl/SweetDependencyExtensionImpl.kt index 4c79a60..c1b38b5 100644 --- a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/impl/SweetDependencyExtensionImpl.kt +++ b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/plugin/impl/SweetDependencyExtensionImpl.kt @@ -81,8 +81,10 @@ internal class SweetDependencyExtensionImpl : BaseExtensionImpl() { } override fun onTransaction(transaction: ProjectTransaction) { - if (transaction.isRoot) DependencyManager.resolve(transaction.current) - transaction.evaluation { project, isRoot -> if (isRoot) DependencyManager.deploy(project) } + if (transaction.isRoot) { + RepositoryManager.apply(transaction.current) + DependencyManager.resolve(transaction.current) + }; transaction.evaluation { project, isRoot -> if (isRoot) DependencyManager.deploy(project) } } /**