diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/entity/ProjectDescriptor.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/entity/ProjectDescriptor.kt index ca435dc..25cbb44 100644 --- a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/entity/ProjectDescriptor.kt +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/entity/ProjectDescriptor.kt @@ -43,11 +43,12 @@ internal class ProjectDescriptor private constructor() { * @return [ProjectDescriptor] */ internal fun create(settings: Settings, name: String = "") = ProjectDescriptor().also { - val isRootProject = name.isBlank() || name == settings.rootProject.name + val isRootProject = name.isBlank() || name.lowercase() == settings.rootProject.name.lowercase() + val subProjectNotice = "if this is a sub-project, please set it like \":$name\"" it.type = Type.SETTINGS it.name = name.noBlank() ?: settings.rootProject.name - it.currentDir = (if (isRootProject) settings.rootProject else settings.findProject(":$name"))?.projectDir - ?: SError.make("Project \"$name\" not found") + it.currentDir = (if (isRootProject) settings.rootProject else settings.findProject(name))?.projectDir + ?: SError.make("Project \"$name\" not found${if (name.startsWith(":").not()) ", $subProjectNotice" else ""}") it.rootDir = settings.rootDir it.homeDir = settings.gradle.gradleUserHomeDir } @@ -59,7 +60,7 @@ internal class ProjectDescriptor private constructor() { */ internal fun create(project: Project) = ProjectDescriptor().also { it.type = Type.PROJECT - it.name = project.fullName + it.name = project.fullName() it.currentDir = project.projectDir it.rootDir = project.rootDir it.homeDir = project.gradle.gradleUserHomeDir diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/GradleProjectFactory.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/GradleProjectFactory.kt index 7c5fa43..6ef81dd 100644 --- a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/GradleProjectFactory.kt +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/gradle/factory/GradleProjectFactory.kt @@ -29,23 +29,23 @@ import org.gradle.kotlin.dsl.repositories /** * 获取指定项目的完整名称 + * @param isUseColon 是否在子项目前使用冒号 - 默认是 * @return [String] */ -internal val Project.fullName - get(): String { - val baseNames = mutableListOf() +internal fun Project.fullName(isUseColon: Boolean = true): String { + val isRoot = this == rootProject + val baseNames = mutableListOf() - /** - * 递归子项目 - * @param project 当前项目 - */ - fun fetchChild(project: Project) { - project.parent?.also { if (it != it.rootProject) fetchChild(it) } - baseNames.add(project.name) - } - fetchChild(project = this) - return buildString { baseNames.onEach { append(":$it") }.clear() }.drop(1) - } + /** + * 递归子项目 + * @param project 当前项目 + */ + fun fetchChild(project: Project) { + project.parent?.also { if (it != it.rootProject) fetchChild(it) } + baseNames.add(project.name) + }; fetchChild(project = this) + return buildString { baseNames.onEach { append(":$it") }.clear() }.let { if (isUseColon && isRoot.not()) it else it.drop(1) } +} /** * 向构建脚本添加自定义依赖 diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/factory/SweetPropertyConfigsFactory.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/factory/SweetPropertyConfigsFactory.kt index ac123a8..9d97a5e 100644 --- a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/factory/SweetPropertyConfigsFactory.kt +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/config/factory/SweetPropertyConfigsFactory.kt @@ -33,7 +33,7 @@ import org.gradle.api.Project * @param project 当前项目 * @return [ISweetPropertyConfigs.ISubConfigs] */ -internal fun ISweetPropertyConfigs.with(project: Project) = projects[project.fullName] ?: global +internal fun ISweetPropertyConfigs.with(project: Project) = projects[project.fullName()] ?: global /** * 创建 [ISweetPropertyConfigs.ISubConfigs] 实例 diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/dsl/configure/SweetPropertyConfigureExtension.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/dsl/configure/SweetPropertyConfigureExtension.kt index 0d3e864..fe75c60 100644 --- a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/dsl/configure/SweetPropertyConfigureExtension.kt +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/extension/dsl/configure/SweetPropertyConfigureExtension.kt @@ -92,14 +92,23 @@ open class SweetPropertyConfigureExtension internal constructor() { * 配置根项目 * @param action 配置方法体 */ - fun rootProject(action: Action) = project(ROOT_PROJECT_TAG, action) + fun rootProject(action: Action) = configureProject(ROOT_PROJECT_TAG, action, isLowercase = false) /** * 配置指定项目 * @param name 项目完整名称 * @param action 配置方法体 */ - fun project(name: String, action: Action) = action.execute(SubConfigureExtension().also { projectConfigures[name] = it }) + fun project(name: String, action: Action) = configureProject(name, action) + + /** + * 配置项目 + * @param name 项目完整名称 + * @param action 配置方法体 + * @param isLowercase 是否转换 [name] 为小写 - 默认是 + */ + private fun configureProject(name: String, action: Action, isLowercase: Boolean = true) = + action.execute(SubConfigureExtension().also { projectConfigures[if (isLowercase) name.lowercase() else name] = it }) /** * 子配置方法体实现类 @@ -483,14 +492,14 @@ open class SweetPropertyConfigureExtension internal constructor() { val currentGlobal = globalConfigure.create() val currentProjects = mutableMapOf() val rootName = settings.rootProject.name - if (projectConfigures.containsKey(rootName)) + if (projectConfigures.containsKey(rootName.lowercase())) SError.make("This name \"$rootName\" is a root project, please use rootProject function to configure it, not project(\"$rootName\")") if (projectConfigures.containsKey(ROOT_PROJECT_TAG)) { - projectConfigures[rootName] = projectConfigures[ROOT_PROJECT_TAG] ?: SError.make("Internal error") + projectConfigures[rootName.lowercase()] = projectConfigures[ROOT_PROJECT_TAG] ?: SError.make("Internal error") projectConfigures.remove(ROOT_PROJECT_TAG) } projectConfigures.forEach { (name, subConfigure) -> - name.checkingStartWithLetter(description = "Project") + name.replaceFirst(":", "").checkingStartWithLetter(description = "Project") subConfigure.checkingNames() currentProjects[name] = subConfigure.create(name, globalConfigure) }; return object : ISweetPropertyConfigs { diff --git a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/helper/PropertiesDeployHelper.kt b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/helper/PropertiesDeployHelper.kt index 8478153..1d3a664 100644 --- a/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/helper/PropertiesDeployHelper.kt +++ b/sweetproperty-gradle-plugin/src/main/java/com/highcapable/sweetproperty/plugin/helper/PropertiesDeployHelper.kt @@ -207,11 +207,11 @@ internal object PropertiesDeployHelper { val outputDir = file(configs.generateDirPath) if (configs.isEnable.not()) return val properties = generatedProperties(configs, ProjectDescriptor.create(project = this)) - if (isConfigsModified.not() && properties == cachedProjectProperties[fullName] && outputDir.isEmpty().not()) { + if (isConfigsModified.not() && properties == cachedProjectProperties[fullName()] && outputDir.isEmpty().not()) { if (configs.isEnable) configureSourceSets(project = this) return }; outputDir.apply { if (exists()) deleteRecursively() } - cachedProjectProperties[fullName] = properties + cachedProjectProperties[fullName()] = properties val packageName = generatedPackageName(configs, project = this) val className = generatedClassName(configs, project = this) sourcesGenerator.build(configs, properties, packageName, className).writeTo(outputDir) @@ -323,7 +323,7 @@ internal object PropertiesDeployHelper { val packageName = configs.packageName.noBlank() ?: project.namespace() ?: project.group.toString().noBlank() - ?: "$DEFAULT_PACKAGE_NAME.${project.fullName.replace(":", "").flatted()}" + ?: "$DEFAULT_PACKAGE_NAME.${project.fullName(isUseColon = false).replace(":", "").flatted()}" return "$packageName.generated" } @@ -335,7 +335,7 @@ internal object PropertiesDeployHelper { */ private fun generatedClassName(configs: ISweetPropertyConfigs.ISourcesCodeGenerateConfigs, project: Project): String { val className = configs.className.noBlank() - ?: project.fullName.replace(":", "_").uppercamelcase().noBlank() + ?: project.fullName(isUseColon = false).replace(":", "_").uppercamelcase().noBlank() ?: "Undefined" return "${className.uppercamelcase()}Properties" }