feat: add enable or disable dependencyResolutionManagement function

This commit is contained in:
2023-11-13 22:52:07 +08:00
parent d896554421
commit d697a59c26
4 changed files with 61 additions and 18 deletions

View File

@@ -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 存储库配置项文档实体

View File

@@ -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

View File

@@ -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
}

View File

@@ -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) }
}
/**