Gradle 将外部插件应用于子项目的子集
我正在使用将一些(但不是所有)子项目部署到两台不同的远程机器上。我想在主构建脚本中配置这些远程设备以避免重复,但无法按照以下方式应用插件:Gradle 将外部插件应用于子项目的子集,gradle,groovy,Gradle,Groovy,我正在使用将一些(但不是所有)子项目部署到两台不同的远程机器上。我想在主构建脚本中配置这些远程设备以避免重复,但无法按照以下方式应用插件: configure([ project(':Subproject1'), project(':Subproject5'), project(':Subproject7') ]) { buildscript { dependencies { classpath 'org.hidetake:gradle-s
configure([
project(':Subproject1'), project(':Subproject5'), project(':Subproject7')
])
{
buildscript {
dependencies {
classpath 'org.hidetake:gradle-ssh-plugin:2.4.2'
}
}
apply plugin: "org.hidetake.ssh"
ssh.settings {
user = getProperty('ssh.username')
identity = file(getProperty('ssh.identity'))
knownHosts = allowAnyHosts
}
remotes {
tomcat {
host = getProperty('ssh.hosts.tomcat')
}
jboss {
host = getProperty('ssh.hosts.jboss')
}
}
}
Gradle失败,未找到id为“org.hidetake.ssh”的插件
当配置闭包的内容应用于每个项目时,一切都很好。我怎样才能优雅地解决这个问题呢?我在这里猜测,因为我没有重现您的问题,但是buildscript块是特殊的,因为它是在对构建文件进行常规groovy解析之前预解析的,我怀疑将它放在像您这样的项目块中是行不通的 您是否尝试过将buildscript块移动到上面脚本中的根级别 编辑1:old gradle论坛发布讨论可以找到 编辑2:添加代码片段以响应注释 要删除重复并仅在一个位置定义存储库引用,可以使用以下模式:
buildscript {
ext.RepositoryConfigurator = {
maven {
credentials.username artifactoryReader
credentials.password artifactoryReaderPwd
url artifactoryReaderUrl
}
jcenter()
mavenCentral()
}
ext.DependencyConfigurator = {
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:1.2"
}
ext.ResolutionConfigurator = {
resolutionStrategy.cacheChangingModulesFor 60, 'minutes'
}
repositories RepositoryConfigurator
dependencies DependencyConfigurator
configurations.classpath ResolutionConfigurator
}
apply plugin: "some.plugin.requiring.above.classpath"
gradle.rootProject {
buildscript {
repositories RepositoryConfigurator
dependencies DependencyConfigurator
configurations.classpath ResolutionConfigurator
}
}
gradle.allprojects {
buildscript {
repositories RepositoryConfigurator
dependencies DependencyConfigurator
configurations.classpath ResolutionConfigurator
}
}
换句话说:由于buildscript块是特殊的且经过预解析的,因此不能使用buildscript块中其他地方定义的内容。但朝另一个方向走是可以的,也就是说,您可以在buildscript块中定义在别处可见的内容。我们可以使用它在buildscript块中定义一次存储库引用,然后在构建文件的其他位置使用该引用
以上内容来自settings.gradle文件,因此可能是完美的,也可能不是完美的,但应该说明这一点 是的,这是可行的,但是将
buildscript
块添加到根文件的顶部需要我也声明存储库-我通过allprojects
这样做,然后被忽略。不管它值多少钱,这里有一个古老的线程,我在gradle论坛上或多或少地问了这个问题。阅读该线程可能会提供一些信息:不幸的是,在解析后,我陷入了无法更改配置的依赖项:classpath。
第12行。事实上,是的,老格拉德尔2.14。啊,我不得不从rootProject和AllProject中删除buildscript.DependencyConfigurator
。。。现在它起作用了