我想将共享gradle文件应用于我的项目settings.gradle
。共享文件位于jar
中,必须在配置阶段下载和提取。这是因为应用了一个必须在配置阶段应用的插件。我发现了这个相关的问题:How to share a common build.gradle via a repository?我在这个答案中描述了我的首选方式:https://stackoverflow.com/a/39228611/987860
但是,这似乎仅适用于build.gradle
。我尝试将buildscript
块移到我的settings.gradle
。
settings.gradle
buildscript {
ext {
dependencyVersion = '0.1.2'
}
repositories {
maven {
credentials {
username 'user'
password 'password'
}
url 'https://my-private-maven-repo.com'
}
}
dependencies {
classpath "my.group:myartifact:$dependencyVersion"
}
dependencies {
def gradleScripts = new File(rootDir, '/build/gradle')
delete gradleScripts
def jars = configurations.classpath.files as List<File>
ant.unjar(src: jars.find { it.name.matches '.*myartifact.*' }, dest: gradleScripts) {
patternset {
include(name:'*.gradle')
}
}
}
}
apply from: new File(rootDir, '/build/gradle/myscript.gradle')
但这导致以下异常:
FAILURE: Build failed with an exception.
* Where:
Settings file 'settings.gradle' line: 24
* What went wrong:
A problem occurred evaluating settings 'journal'.
> Could not get unknown property 'ant' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 0.019 secs
Could not get unknown property 'ant' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
在评估ant
之前,有没有办法在配置阶段使用settings.gradle
?在下载待下载文件之前,我需要下载依赖项并进行extractet。
答案 0 :(得分:0)
这是一种非常不寻常的做事方式。我真的建议你不要做你想做的事情,因为它会让你的构建速度慢得多。您正在删除build/gradle
并在每次构建时提取插件jar的内容。
build.gradle
(或settings.gradle
)中的所有内容都可以放入插件中并以这种方式分发。您已经有一个需要下载的jar,因此将myscript.gradle
转换为插件非常容易粗略转换。
将它放在src/main/groovy/some/package/MyPlugin.groovy
已生成插件jar的项目中:
package some.package
import org.gradle.api.*
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.with {
// contents of script
}
}
}
适用于settings.gradle
的插件:
package some.package
import org.gradle.api.*
class MyPlugin implements Plugin<Settings> {
void apply(Settings settings) {
settings.with {
// contents of script
}
}
}
然后,您只需将依赖项添加到插件中,然后使用apply plugin: some.package.MyPlugin
。
以这种方式开发/分发插件还有很多其他优点。您可以在Gradle Guides中找到有关插件开发的更多信息。
或者,如果您绝对必须保留单独的.gradle
脚本。如果你可以单独服务(在jar之外),你可以这样做:
apply from: "http://example.com/some/url/myscript.gradle"
这样做的缺点是它会在每次构建时下载文件(这在Gradle 4.2中已得到修复)。