mirror of
https://github.com/HighCapable/SweetDependency.git
synced 2025-09-06 02:35:47 +08:00
feat: add enable or disable dependencyResolutionManagement function
This commit is contained in:
@@ -23,6 +23,7 @@ package com.highcapable.sweetdependency.manager
|
|||||||
|
|
||||||
import com.highcapable.sweetdependency.document.PreferencesDocument
|
import com.highcapable.sweetdependency.document.PreferencesDocument
|
||||||
import com.highcapable.sweetdependency.document.RepositoryDocument
|
import com.highcapable.sweetdependency.document.RepositoryDocument
|
||||||
|
import com.highcapable.sweetdependency.document.factory.RepositoryList
|
||||||
import com.highcapable.sweetdependency.exception.SweetDependencyUnresolvedException
|
import com.highcapable.sweetdependency.exception.SweetDependencyUnresolvedException
|
||||||
import com.highcapable.sweetdependency.gradle.helper.GradleHelper
|
import com.highcapable.sweetdependency.gradle.helper.GradleHelper
|
||||||
import com.highcapable.sweetdependency.manager.const.AdditionalRepositories
|
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.noBlank
|
||||||
import com.highcapable.sweetdependency.utils.noEmpty
|
import com.highcapable.sweetdependency.utils.noEmpty
|
||||||
import com.highcapable.sweetdependency.utils.toFile
|
import com.highcapable.sweetdependency.utils.toFile
|
||||||
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.dsl.RepositoryHandler
|
import org.gradle.api.artifacts.dsl.RepositoryHandler
|
||||||
import org.gradle.api.artifacts.repositories.ArtifactRepository
|
import org.gradle.api.artifacts.repositories.ArtifactRepository
|
||||||
import org.gradle.api.artifacts.repositories.AuthenticationSupported
|
import org.gradle.api.artifacts.repositories.AuthenticationSupported
|
||||||
@@ -46,32 +48,27 @@ import org.gradle.api.initialization.resolve.RepositoriesMode as GradleRepositor
|
|||||||
*/
|
*/
|
||||||
internal object RepositoryManager {
|
internal object RepositoryManager {
|
||||||
|
|
||||||
|
/** 当前存储库数组 */
|
||||||
|
private var repositories: RepositoryList = mutableListOf()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前是否使用 [Settings.dependencyResolutionManagement] 管理库依赖
|
||||||
|
* @return [Boolean]
|
||||||
|
*/
|
||||||
|
private val isUseDependencyResolutionManagement get() = SweetDependencyConfigs.configs.isUseDependencyResolutionManagement
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成并应用存储库数组
|
* 生成并应用存储库数组
|
||||||
* @param settings 当前设置
|
* @param settings 当前设置
|
||||||
*/
|
*/
|
||||||
internal fun generateAndApply(settings: Settings) {
|
internal fun generateAndApply(settings: Settings) {
|
||||||
val repositories = SweetDependencyConfigs.document.repositories()
|
repositories = SweetDependencyConfigs.document.repositories()
|
||||||
Repositories.generate(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 {
|
settings.pluginManagement {
|
||||||
this.repositories.clear()
|
this.repositories.clear()
|
||||||
this.repositories.apply(isPlugins = true)
|
this.repositories.apply(isPlugins = true)
|
||||||
}
|
}
|
||||||
settings.dependencyResolutionManagement {
|
if (isUseDependencyResolutionManagement) settings.dependencyResolutionManagement {
|
||||||
this.repositoriesMode.set(when (SweetDependencyConfigs.document.preferences().repositoriesMode) {
|
this.repositoriesMode.set(when (SweetDependencyConfigs.document.preferences().repositoriesMode) {
|
||||||
PreferencesDocument.RepositoriesMode.PREFER_PROJECT -> GradleRepositoriesMode.PREFER_PROJECT
|
PreferencesDocument.RepositoriesMode.PREFER_PROJECT -> GradleRepositoriesMode.PREFER_PROJECT
|
||||||
PreferencesDocument.RepositoriesMode.PREFER_SETTINGS -> GradleRepositoriesMode.PREFER_SETTINGS
|
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]
|
* 应用存储库到 [ArtifactRepository]
|
||||||
* @param document 存储库配置项文档实体
|
* @param document 存储库配置项文档实体
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
package com.highcapable.sweetdependency.plugin.config.proxy
|
package com.highcapable.sweetdependency.plugin.config.proxy
|
||||||
|
|
||||||
import com.highcapable.sweetdependency.SweetDependency
|
import com.highcapable.sweetdependency.SweetDependency
|
||||||
|
import org.gradle.api.initialization.Settings
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [SweetDependency] 配置类接口类
|
* [SweetDependency] 配置类接口类
|
||||||
@@ -44,6 +45,9 @@ internal interface ISweetDependencyConfigs {
|
|||||||
/** [SweetDependency] 的配置文件路径 */
|
/** [SweetDependency] 的配置文件路径 */
|
||||||
val configFilePath: String
|
val configFilePath: String
|
||||||
|
|
||||||
|
/** 是否使用 [Settings.dependencyResolutionManagement] 管理库依赖 */
|
||||||
|
val isUseDependencyResolutionManagement: Boolean
|
||||||
|
|
||||||
/** 是否启用依赖自动装配日志 */
|
/** 是否启用依赖自动装配日志 */
|
||||||
val isEnableDependenciesAutowireLog: Boolean
|
val isEnableDependenciesAutowireLog: Boolean
|
||||||
|
|
||||||
|
@@ -26,6 +26,7 @@ package com.highcapable.sweetdependency.plugin.extension.dsl.configure
|
|||||||
import com.highcapable.sweetdependency.SweetDependency
|
import com.highcapable.sweetdependency.SweetDependency
|
||||||
import com.highcapable.sweetdependency.environment.Environment
|
import com.highcapable.sweetdependency.environment.Environment
|
||||||
import com.highcapable.sweetdependency.plugin.config.proxy.ISweetDependencyConfigs
|
import com.highcapable.sweetdependency.plugin.config.proxy.ISweetDependencyConfigs
|
||||||
|
import org.gradle.api.initialization.Settings
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [SweetDependency] 配置方法体实现类
|
* [SweetDependency] 配置方法体实现类
|
||||||
@@ -54,6 +55,16 @@ open class SweetDependencyConfigureExtension internal constructor() {
|
|||||||
var configFileName = ISweetDependencyConfigs.DEFAULT_CONFIG_FILE_NAME
|
var configFileName = ISweetDependencyConfigs.DEFAULT_CONFIG_FILE_NAME
|
||||||
@JvmName("configFileName") set
|
@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 {
|
internal fun build(): ISweetDependencyConfigs {
|
||||||
val currentEnable = isEnable
|
val currentEnable = isEnable
|
||||||
val currentConfigFilePath = Environment.resourcesDir(configFileName).absolutePath
|
val currentConfigFilePath = Environment.resourcesDir(configFileName).absolutePath
|
||||||
|
val currentUseDependencyResolutionManagement = isUseDependencyResolutionManagement
|
||||||
val currentEnableDependenciesAutowireLog = isEnableDependenciesAutowireLog
|
val currentEnableDependenciesAutowireLog = isEnableDependenciesAutowireLog
|
||||||
val currentEnableVerboseMode = isEnableVerboseMode
|
val currentEnableVerboseMode = isEnableVerboseMode
|
||||||
return object : ISweetDependencyConfigs {
|
return object : ISweetDependencyConfigs {
|
||||||
override val isEnable get() = currentEnable
|
override val isEnable get() = currentEnable
|
||||||
override val configFilePath get() = currentConfigFilePath
|
override val configFilePath get() = currentConfigFilePath
|
||||||
|
override val isUseDependencyResolutionManagement get() = currentUseDependencyResolutionManagement
|
||||||
override val isEnableDependenciesAutowireLog get() = currentEnableDependenciesAutowireLog
|
override val isEnableDependenciesAutowireLog get() = currentEnableDependenciesAutowireLog
|
||||||
override val isEnableVerboseMode get() = currentEnableVerboseMode
|
override val isEnableVerboseMode get() = currentEnableVerboseMode
|
||||||
}
|
}
|
||||||
|
@@ -81,8 +81,10 @@ internal class SweetDependencyExtensionImpl : BaseExtensionImpl() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onTransaction(transaction: ProjectTransaction) {
|
override fun onTransaction(transaction: ProjectTransaction) {
|
||||||
if (transaction.isRoot) DependencyManager.resolve(transaction.current)
|
if (transaction.isRoot) {
|
||||||
transaction.evaluation { project, isRoot -> if (isRoot) DependencyManager.deploy(project) }
|
RepositoryManager.apply(transaction.current)
|
||||||
|
DependencyManager.resolve(transaction.current)
|
||||||
|
}; transaction.evaluation { project, isRoot -> if (isRoot) DependencyManager.deploy(project) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user