From 86e06bab698385d55694c3100c60b6e0f3ce2d38 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Tue, 14 Nov 2023 00:22:46 +0800 Subject: [PATCH] feat: add dependencies autowire debug info --- .../manager/DependencyManager.kt | 23 ++++++++++++++++++- .../manager/maven/MavenParser.kt | 20 ++++++++++------ .../manager/maven/entity/MavenMetadata.kt | 2 ++ .../transaction/RuntimeDebugTransaction.kt | 2 ++ .../config/proxy/ISweetDependencyConfigs.kt | 3 +++ .../SweetDependencyConfigureExtension.kt | 10 ++++++++ 6 files changed, 52 insertions(+), 8 deletions(-) diff --git a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/DependencyManager.kt b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/DependencyManager.kt index 5c878b8..b40beb9 100644 --- a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/DependencyManager.kt +++ b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/DependencyManager.kt @@ -253,7 +253,19 @@ internal object DependencyManager { forEachIndexed { index, entry -> val currentVersionFilterExclusionList = versionFilterExclusionList.depends(currentVersion) val availableVersions = mutableListOf() - poms.add(MavenParser.acquire(dependencyName, entry, currentVersion)) + poms.add(MavenParser.acquire(dependencyName, entry, currentVersion).also { + if (!SweetDependencyConfigs.configs.isDebug) return@also + val isNotFound = it.versions.isEmpty() + logDoneOrWarn("$positionTagName > OBTAIN (${index + 1}/$size) ${dependencyName.description}", isNotFound) + logDoneOrWarn( + """ + - Repository (${entry.nodeName}): ${it.url} + - Last Updated: ${it.lastUpdated} + - Versions: ${it.versions} + - Adopted Versions: ${currentVersionFilterExclusionList.filter(it.versions)} + """.trimIndent(), isNotFound, noTag = true + ) + }) if (index == lastIndex) poms.noEmpty() ?.sortedByDescending { it.lastUpdated } ?.let { if (it.all { e -> e.lastUpdated <= 0L }) it.sortedByDescending { e -> e.versions.size } else it } @@ -333,4 +345,13 @@ internal object DependencyManager { } else -> SLog.info("$positionTagName > UP-TO-DATE ${dependencyName.description} version $currentVersion", SLog.DONE) } + + /** + * 打印完成或警告 Log + * @param msg 消息内容 + * @param isWarn 是否为警告模式 - 默认否 + * @param noTag 无标签 - 默认否 + */ + private fun logDoneOrWarn(msg: String, isWarn: Boolean = false, noTag: Boolean = false) = + if (isWarn) SLog.warn(msg, noTag = noTag) else SLog.info(msg, SLog.DONE, noTag = noTag) } \ No newline at end of file diff --git a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/maven/MavenParser.kt b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/maven/MavenParser.kt index 57ea7b8..83fcb0f 100644 --- a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/maven/MavenParser.kt +++ b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/maven/MavenParser.kt @@ -57,26 +57,32 @@ internal object MavenParser { val isIncludeScope = repo.isIncludeScope(dependencyName.type == DependencyName.Type.PLUGIN) /** 离线模式下不会自动装配、更新在线依赖 */ if (isIncludeScope && GradleHelper.isOfflineMode) return MavenMetadata() + var currentUrl: String return when { - repo.url.isNotBlank() -> "$headerUrlOrPath$METADATA_FILE_NAME".executeUrlBody(repo.credentials.username, repo.credentials.password) - repo.path.isNotBlank() -> "$headerUrlOrPath$METADATA_LOCAL_FILE_NAME".executeFileBody() + repo.url.isNotBlank() -> "$headerUrlOrPath$METADATA_FILE_NAME" + .apply { currentUrl = this } + .executeUrlBody(repo.credentials.username, repo.credentials.password) + repo.path.isNotBlank() -> "$headerUrlOrPath$METADATA_LOCAL_FILE_NAME" + .apply { currentUrl = this } + .executeFileBody() else -> SError.make("Could not resolve this repository \"${repo.nodeName}\"") - }.trim().toMetadata(currentVersion) + }.trim().toMetadata(currentUrl, currentVersion) } /** * 解析 [METADATA_FILE_NAME]、[METADATA_LOCAL_FILE_NAME] 内容到 [MavenMetadata] 实体 + * @param url 当前依赖获取 URL * @param currentVersion 当前依赖版本 * @return [MavenMetadata] */ - private fun String.toMetadata(currentVersion: DependencyVersion) = runCatching { - if (!(contains("")) || !endsWith("")) return@runCatching MavenMetadata() + private fun String.toMetadata(url: String, currentVersion: DependencyVersion) = runCatching { + if (!(contains("")) || !endsWith("")) return@runCatching MavenMetadata(url) DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(InputSource(StringReader(this))).let { document -> val lastUpdated = document.getElementsByTagName("lastUpdated").item(0)?.textContent?.toLongOrNull() ?: 0L val versionNodeList = document.getElementsByTagName("version") val versions = mutableListOf() for (i in 0..versionNodeList.length) versionNodeList.item(i)?.textContent?.also { versions.add(currentVersion.clone(it)) } - MavenMetadata(versions.noEmpty()?.reversed()?.toMutableList() ?: mutableListOf(), lastUpdated) + MavenMetadata(url, versions.noEmpty()?.reversed()?.toMutableList() ?: mutableListOf(), lastUpdated) } - }.getOrNull() ?: MavenMetadata() + }.getOrNull() ?: MavenMetadata(url) } \ No newline at end of file diff --git a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/maven/entity/MavenMetadata.kt b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/maven/entity/MavenMetadata.kt index 55ccf16..b09de9f 100644 --- a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/maven/entity/MavenMetadata.kt +++ b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/maven/entity/MavenMetadata.kt @@ -25,10 +25,12 @@ import com.highcapable.sweetdependency.gradle.entity.DependencyVersion /** * Maven Metadata 实体 + * @param url 依赖获取 URL * @param versions 版本数组 * @param lastUpdated 最后更新时间戳 */ internal data class MavenMetadata( + internal var url: String = "", internal var versions: MutableList = mutableListOf(), internal var lastUpdated: Long = 0L ) \ No newline at end of file diff --git a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/transaction/RuntimeDebugTransaction.kt b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/transaction/RuntimeDebugTransaction.kt index ebb7c6a..ffff40d 100644 --- a/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/transaction/RuntimeDebugTransaction.kt +++ b/sweetdependency-gradle-plugin/src/main/java/com/highcapable/sweetdependency/manager/transaction/RuntimeDebugTransaction.kt @@ -83,6 +83,8 @@ internal object RuntimeDebugTransaction { "Gradle Version" value GradleHelper.version, "Plugin Version" value SweetDependency.VERSION, "Plugin Configuration" to mapOf( + "isEnable" value configs.isEnable, + "isDebug" value configs.isDebug, "configFileName" with "(path) ${configs.configFilePath}" to mapOf( "preferences" to mapOf( "autowire-on-sync-mode" value preferences.autowireOnSyncMode, 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 2ad6dbc..1fe6df1 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 @@ -42,6 +42,9 @@ internal interface ISweetDependencyConfigs { /** 是否启用插件 */ val isEnable: Boolean + /** 是否启用调试模式 */ + val isDebug: Boolean + /** [SweetDependency] 的配置文件路径 */ val configFilePath: String 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 d217654..c34ff65 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 @@ -47,6 +47,14 @@ open class SweetDependencyConfigureExtension internal constructor() { var isEnable = true @JvmName("enable") set + /** + * 是否启用调试模式 + * + * 默认不启用 - 启用后将在自动装配时输出详细的依赖搜索信息 + */ + var isDebug = false + @JvmName("debug") set + /** * [SweetDependency] 配置文件名称 * @@ -87,12 +95,14 @@ open class SweetDependencyConfigureExtension internal constructor() { */ internal fun build(): ISweetDependencyConfigs { val currentEnable = isEnable + val currentDebug = isDebug 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 isDebug get() = currentDebug override val configFilePath get() = currentConfigFilePath override val isUseDependencyResolutionManagement get() = currentUseDependencyResolutionManagement override val isEnableDependenciesAutowireLog get() = currentEnableDependenciesAutowireLog