Рефакторинг Maven блока в Gradle - PullRequest
0 голосов
/ 02 октября 2018

Я работаю над проектом Android, и у меня есть несколько пользовательских репозиториев, использующих одинаковые учетные данные:

repositories {
  maven {
    url "<url1>"
    credentials {
      username = "<username>"
      password = "<password>"
    }
  }

  maven {
    url "<url2>"
    credentials {
      username = "<username>"
      password = "<password>"
    }
  }

}

Есть ли способ определить метод (блок?), Чтобы я мог определитьимя пользователя и пароль один раз и не нужно повторять его каждый раз?Я хотел бы иметь возможность:

repositories {
  customMaven { url "<url1>"}
  customMaven { url "<url2>"}
}

Извинения, если я здесь неправильно использую термины - синтаксис gradle для меня несколько загадка.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Первый ответ, предоставленный @ToYonos, будет работать нормально, но если вы ищете решение, основанное на блоке конфигурации , вы можете использовать метод MavenArtifactRepository maven(Action<? super MavenArtifactRepository> action) из RepositoryHandler class( см. Здесь ), следующим образом:

// a Closure that builds an Action for configuring a MavenArtifactRepository instance
def customMavenRepo = { url ->
    return new Action<MavenArtifactRepository>() {
        void execute(MavenArtifactRepository repo) {
            repo.setUrl(url)
            repo.credentials(new Action<PasswordCredentials>() {
                void execute(PasswordCredentials credentials) {
                    credentials.setUsername("<username>")
                    credentials.setPassword("<password>")
                }
            });
        }
    };
}

// usage
repositories {
    jcenter()
    maven customMavenRepo("http://company.com/repo1")
    maven customMavenRepo("http://company.com/repo2")
    maven customMavenRepo("http://company.com/repo3")
}

РЕДАКТИРОВАТЬ из комментариев ниже: решение будет закрытие будет выглядеть следующим образом.Я думаю, что здесь необходимо использовать метод curry (см. Закрытие каррирования ), но, возможно, есть и другие способы упростить ...

// one closure with URL as parameter
ext.myCustomMavenClosure = { pUrl ->
    url pUrl
    credentials {
        username = "<username>"
        password = "<password>"
    }
}
// helper function to return a "curried" closure
Closure myCustomMaven (url){
    return myCustomMavenClosure.curry(url)
}

repositories {
    // use closure directly
    maven myCustomMavenClosure.curry ("http://mycompany.com/repo1")
    // or use helper method
    maven myCustomMaven("http://mycompany.com/repo2")
}    
0 голосов
/ 02 октября 2018

Gradle - все об этом виде настройки:

repositories {
    ['<url1>', '<url2>'].each { u ->
        maven {
            url u
            credentials {
                username = "<username>"
                password = "<password>"
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...