mirror of
https://github.com/HighCapable/SweetDependency.git
synced 2025-09-04 01:35:46 +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.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 存储库配置项文档实体
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
}
|
||||
|
@@ -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) }
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user