代码之家  ›  专栏  ›  技术社区  ›  GhostCat

如何避免gradle配置代码中的代码重复?

  •  1
  • GhostCat  · 技术社区  · 5 年前

    从我的顶级gradle.build.kts:

    allprojects {  
        repositories {
            maven {
                url = uri(
                    "https://" +
                            getGradleProperty("artifactory-url-prefix") +
                            ".artifactory....whatever/foo/"
                )
    
                credentials() {
                    username = getGradleProperty("id")
                    password = getGradleProperty("apikey")
                }
            }
    
            maven {
                url = uri(
                        "https://" +
                                getGradleProperty("artifactory-url-prefix") +
                                ".artifactory....whatever/bar/"
                )
    
                credentials() {
                    username = getGradleProperty("id")
                    password = getGradleProperty("apikey")
                }
            }
        }
    }
    

    正如您所看到的,存在大量代码重复。我知道如何创建一个帮助器方法来构建URL,但是是否有一种规范的/惯用的方法来“实现”URL credentials()

    0 回复  |  直到 5 年前
        1
  •  1
  •   Simon Jacobs    5 年前

    这将是一个很好的使用 extension function

    // At top of file
    
    import org.gradle.api.artifacts.repositories.MavenArtifactRepository
    
    // Anywhere in file
    
    fun MavenArtifactRepository.addCredentialsToRepository() {
        credentials {
            username = getGradleProperty("id")
            password = getGradleProperty("apikey")
        }
    }
    

    然后你可以做:

    allprojects {  
        repositories {
            maven {
                url = uri(
                    "https://" +
                            getGradleProperty("artifactory-url-prefix") +
                            ".artifactory....whatever/foo/"
                )
    
                addCredentialsToRepository()
            }
    
            maven {
                url = uri(
                        "https://" +
                                getGradleProperty("artifactory-url-prefix") +
                                ".artifactory....whatever/bar/"
                )
    
                addCredentialsToRepository()
            }
        }
    }