Gradle-user guide-第6章 构建脚本基础(译)

本文详细介绍了Gradle构建的基础概念,包括项目与任务的定义,并通过实例展示了如何使用Gradle命令运行构建脚本,定义任务以及实现任务之间的依赖关系。

第6章 构建脚本基础(6.1-6.5)

6.1. 项目和任务

Gradle里的一切都基于这两个基本概念:项目和任务(projects and tasks

每个Gradle构建都由一个或多个项目构成。一个项目代表什么取决于你想要用Gradle去做什么。举个列子,一个项目可能代表一个Jar或者一个web应用,它也可能代表一个由其他项目生成的jar包组成的ZIP压缩包。项目不必代表准备构建的东西,它可能代表准备完成的事情,如,部署你的应用到生产环境。如果你仍感觉有些模糊也不用担心。Gradle的惯例构建的支持,增加了对项目是什么更加充分的定义。

每个Gradle项目都由一个或多个任务构成。任务代表构建执行的一些原子级别的操作,可能是编译一些classes,创建一个Jar,生成Javadoc,把一些存档(archives)发布到仓库(repository)。

目前,我们将关注在单项目构建中定义一些简单的任务。之后的章节中,我们会关注多项目构建,以及多项目和多任务混合的构建。

 6.2.Hello world

使用gradle命令运行Gradle构建,gradle命令会在当前目录下寻找名为build.gradle的文件,我们称这个文件为构建脚本(buildscript),虽然确切来说,它是一个构建配置脚本(build configuration script)。这个脚本定义了一个项目和它的一些任务。

试着创建下面名为build.gradle的构建脚本。

例子6.1第一个构建脚本

build.gradle

task hello{
    do last{
        println 'hello word!'
    }
}

在命令行里,进入该构建脚本所在目录,通过命令gradle -q hello来执行这个构建脚本。

例子6.2脚本的执行

gradle -qhello命令的输出

> gradle -q hello
Hello world!

这里发生了什么?上面的构建的脚本定义了一个单一的任务,hello,给它添加了一个action,当你运行gradle hello,Gradle执行hello任务,接着就执行你提供的action,这个action是一个简单的包含了一些Groovy代码的闭包。

如果你觉得这些看上去和Ant的目标(targets)很相似,好吧,你是对的。Gradle任务等同于Ant中的目标,但是,你会看到gradle任务是更加强大的。我们使用一个不同于Ant的术语,是因为我们认为任务(task)比目标(target)更加贴切。不过,这里术语的使用和Ant产生了冲突,在Ant中,称命令为任务,如javaccopy,因此当我们说到任务时,总是指的是Gradle里的任务,等价于Ant中的目标,而说到Ant任务时,会明确地说成Ant任务(anttask)。

6.3快捷任务定义

有一种定义任务的简洁方式

例子6.3快捷任务定义

build.gradle

task hello << {
    println 'Hello world!'
}

再次,这定义了一个叫做hello的任务,它是一个可以执行的闭包,在贯穿整个用户手册中,我们使用这种定义任务的方式。

6.4构建脚本代码

Gradle构建脚本向你展示Groovy的所有能力,作为开胃菜,看看这个:

例子6.4Gradle任务中使用Groovy

build.gradle

task upper << {
    String someString = 'mY_nAmE'
    println "Original: " + someString 
    println "Upper case: " + someString.toUpperCase()
}

使用gradle-q upper,你就会看到以下输出:

> gradle -q upper
Original: mY_nAmE
Upper case: MY_NAME
6.5任务依赖
正如你可能已经猜到的,你可以申明任务之间的依赖性。
例子6.6申明任务之间的依赖性

build.gradle

task hello << {
    println 'Hello world!'
}
task intro(dependsOn: hello) << {
    println "I'm Gradle"
}

使用gradle -q intro,你就会看到以下输出:

> gradle -q intro
Hello world!
I'm Gradle
再加入一个依赖之前, 这个依赖的任务不需要提前定义了,来看下面的例子。
build.gradle

task taskX(dependsOn: 'taskY') << {
    println 'taskX'
}
task taskY << {
    println 'taskY'
}

使用gradle -q taskX,输出如下:

> gradle -q taskX
taskY
taskX
taskX taskY的依赖性在taskY定义之前就被申明了,这中定义方式对多项目构建来说是非常重要的。任务依赖性的更多细节将会在15.4中讨论。
注意,当你将要引用的任务还没有定义时,不要使用快捷标记。(参考6.8
内容概要:本文介绍了基于贝叶斯优化的CNN-LSTM混合神经网络在时间序列预测中的应用,并提供了完整的Matlab代码实现。该模型结合了卷积神经网络(CNN)在特征提取方面的优势与长短期记忆网络(LSTM)在处理时序依赖问题上的强大能力,形成一种高效的混合预测架构。通过贝叶斯优化算法自动调参,提升了模型的预测精度与泛化能力,适用于风电、光伏、负荷、交通流等多种复杂非线性系统的预测任务。文中还展示了模型训练流程、参数优化机制及实际预测效果分析,突出其在科研与工程应用中的实用性。; 适合人群:具备一定机器学习基基于贝叶斯优化CNN-LSTM混合神经网络预测(Matlab代码实现)础和Matlab编程经验的高校研究生、科研人员及从事预测建模的工程技术人员,尤其适合关注深度学习与智能优化算法结合应用的研究者。; 使用场景及目标:①解决各类时间序列预测问题,如能源出力预测、电力负荷预测、环境数据预测等;②学习如何将CNN-LSTM模型与贝叶斯优化相结合,提升模型性能;③掌握Matlab环境下深度学习模型搭建与超参数自动优化的技术路线。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注贝叶斯优化模块与混合神经网络结构的设计逻辑,通过调整数据集和参数加深对模型工作机制的理解,同时可将其框架迁移至其他预测场景中验证效果。
A problem occurred configuring project ':com.biz-united.empower.code.saturn'. > Could not resolve all artifacts for configuration ':com.biz-united.empower.code.saturn:classpath'. > Could not find org.gradle:gradle-core:4.2. Searched in the following locations: - file:/Users/jiege/.m2/repository/org/gradle/gradle-core/4.2/gradle-core-4.2.pom - https://maven.aliyun.com/repository/central/org/gradle/gradle-core/4.2/gradle-core-4.2.pom - http://maven.biz-united.com.cn:28080/artifactory/libs-release-local/org/gradle/gradle-core/4.2/gradle-core-4.2.pom - https://repo.maven.apache.org/maven2/org/gradle/gradle-core/4.2/gradle-core-4.2.pom Required by: project :com.biz-united.empower.code.saturn > com.biz-united.empower.saturn:saturn-gradle-plugin:202109 > Could not find org.gradle:gradle-tooling-api:4.2. Searched in the following locations: - file:/Users/jiege/.m2/repository/org/gradle/gradle-tooling-api/4.2/gradle-tooling-api-4.2.pom - https://maven.aliyun.com/repository/central/org/gradle/gradle-tooling-api/4.2/gradle-tooling-api-4.2.pom - http://maven.biz-united.com.cn:28080/artifactory/libs-release-local/org/gradle/gradle-tooling-api/4.2/gradle-tooling-api-4.2.pom - https://repo.maven.apache.org/maven2/org/gradle/gradle-tooling-api/4.2/gradle-tooling-api-4.2.pom Required by: project :com.biz-united.empower.code.saturn > com.biz-united.empower.saturn:saturn-gradle-plugin:202109 Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
09-05
<think> 我们收到了关于Gradle依赖解析问题的具体查询:无法解析`org.gradle:gradle-core:4.2`和`org.gradle:gradle-tooling-api:4.2`。结合之前提供的引用信息,我们可以从以下几个方面进行解决: 1. **检查仓库配置**:确保在build.gradle文件中配置了正确的仓库,因为Gradle需要从仓库中下载依赖。 2. **依赖传递问题**:引用[1]提到依赖传递可能导致问题,但这里我们直接依赖这两个库,所以可能是仓库中没有或者版本不对。 3. **排除冲突依赖**:引用[5]展示了如何排除特定依赖,但这里我们主要是无法解析,可能不是冲突问题。 4. **使用依赖树检查**:引用[4]给出了查看依赖树的命令,我们可以用这个命令检查这两个依赖是否被拉取以及是否存在冲突。 5. **版本兼容性**:注意Gradle插件版本和Gradle版本的兼容性,因为`gradle-core`和`gradle-tooling-api`通常与Gradle发行版相关,一般不直接作为项目依赖。 具体步骤: **第一步:检查仓库配置** 在build.gradle中,确保有jcenter()或mavenCentral()等仓库,因为Gradle官方依赖通常发布在Maven Central或Gradle自己的仓库。尝试添加Gradle插件仓库: ```groovy repositories { mavenCentral() // 或者尝试添加Gradle插件仓库 maven { url "https://plugins.gradle.org/m2/" } } ``` **第二步:验证依赖是否存在** 访问Maven Central(https://search.maven.org/)或Gradle插件门户(https://plugins.gradle.org/)搜索`org.gradle:gradle-core`和`org.gradle:gradle-tooling-api`,查看4.2版本是否存在。注意:`gradle-core`和`gradle-tooling-api`通常不会在公共仓库中以独立构件的形式提供,它们通常内置于Gradle发行版中。如果你是在编写Gradle插件,应该依赖于Gradle API,通常使用`gradleApi()`依赖,而不是直接指定版本。 **第三步:使用正确的依赖方式** 如果你正在开发Gradle插件,应该使用`gradleApi()`依赖,它会自动包含当前Gradle版本的API(包括gradle-core和gradle-tooling-api)。在build.gradle中添加: ```groovy dependencies { implementation gradleApi() } ``` 这样就不需要指定版本,而且可以避免版本不匹配的问题。 **第四步:检查Gradle版本** 确保你使用的Gradle wrapper版本与插件要求的版本兼容。在项目根目录下的`gradle/wrapper/gradle-wrapper.properties`文件中,检查`distributionUrl`,确保它指向一个兼容的Gradle版本(比如4.2以上)。 **第五步:查看依赖树** 如果问题仍然存在,使用引用[4]中的命令查看依赖树: ```bash ./gradlew dependencies --configuration compileClasspath ``` 或者如果你在测试中使用,可以使用`testRuntimeClasspath`。检查是否有其他依赖传递引入了不同版本的`gradle-core`或`gradle-tooling-api`,导致冲突。 **第六步:手动排除冲突(如果存在)** 如果发现冲突,可以使用引用[5]中的排除方法: ```groovy implementation ('some:dependency:version') { exclude group: 'org.gradle', module: 'gradle-core' } ``` 但这种情况较少见。 **第七步:清除缓存** Gradle依赖缓存可能导致问题,尝试清除缓存: ```bash ./gradlew clean build --refresh-dependencies ``` **总结原因**: 通常,在项目中直接声明`org.gradle:gradle-core:4.2`和`org.gradle:gradle-tooling-api:4.2`依赖是不正确的,因为它们不是作为独立构件发布的。正确做法是使用`gradleApi()`来引入当前Gradle版本的API。 因此,解决方案是: 1. 移除对`org.gradle:gradle-core:4.2`和`org.gradle:gradle-tooling-api:4.2`的直接依赖声明。 2. 添加`gradleApi()`依赖。 ```groovy dependencies { implementation gradleApi() // 引入当前Gradle版本的API } ``` 然后同步项目,问题应该解决。 如果以上步骤不能解决,请检查网络连接、仓库地址是否正确,以及是否有公司内部的代理设置问题。 §§相关问题§§ 1. 如何正确配置Gradle插件开发环境的依赖? 2. 如何解决Gradle依赖冲突问题? 3. 如何使用`gradleApi()`和`localGroovy()`在插件开发中? 4. Gradle仓库配置的最佳实践有哪些? </think> ### Gradle项目无法解析`org.gradle:gradle-core:4.2`和`org.gradle:gradle-tooling-api:4.2`的解决方案 #### 问题分析 这两种依赖属于Gradle内部API,通常不直接作为项目依赖声明。无法解析的原因可能有: 1. **仓库缺失**:未配置Gradle官方仓库 2. **版本冲突**:与其他插件或依赖的Gradle版本冲突 3. **依赖传递问题**:间接依赖被其他库覆盖或排除[^1] --- #### 解决步骤 1. **添加官方仓库** 在`build.gradle`的`repositories`块中添加Gradle插件仓库: ```groovy repositories { mavenCentral() maven { url "https://repo.gradle.org/gradle/libs-releases" } // 关键 } ``` 2. **检查依赖范围** 若用于插件开发,改用标准API依赖: ```groovy dependencies { implementation gradleApi() // 替代gradle-core implementation "org.gradle:gradle-tooling-api:${gradle.gradleVersion}" } ``` 3. **验证版本兼容性** 在`gradle.properties`中显式声明Gradle版本: ```properties gradleVersion=4.2 ``` 4. **排查依赖冲突** 使用命令检查依赖树: ```bash ./gradlew dependencies --configuration compileClasspath | grep 'gradle-core\|tooling-api' ``` 若发现版本冲突,按引用[5]方法排除冲突依赖: ```groovy implementation ('com.example:library:1.0') { exclude group: 'org.gradle', module: 'gradle-core' } ``` 5. **清理缓存** 删除Gradle缓存目录(默认在`~/.gradle/caches`),或执行: ```bash ./gradlew clean build --refresh-dependencies ``` --- #### 注意事项 - `gradle-core`通常内置于Gradle发行版,**不建议**直接声明依赖 - 开发Gradle插件时优先使用`gradleApi()`引入API[^1][^2] - 检查构建脚本中是否错误覆盖了`dependencyResolutionManagement`配置
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值