Gradle教程

1.简介

在本课程中,我们将学习Gradle ,它是一个构建工具和一个依赖管理系统,与Maven和Ant非常相似,并且是专门为构建基于Java的项目而设计的。

与Maven和Ant构建系统不同,Gradle不使用XML。 它实际上是基于Groovy构建在DSL中的。 与基于XML的其他构建系统相比,基于Groovy的Gradle脚本的最大优势是可以使构建脚本更小,更简洁。 就像Maven构建文件称为pom.xml ,Gradle的配置文件build.gradle惯例也称为build.gradle 。 在本课程中,我们将研究Gradle的核心概念,并建立一个基于Spring Boot的简单项目。 即使您不是Spring Developer,您仍然可以按照定义课程的方式进行操作,这样框架就不会在学习Gradle概念时引入任何障碍。 让我们开始行动吧!

目录

1.简介 2. Gradle核心概念 3.安装Gradle 4.设置示例项目 5.运行摇篮
5.1运行任务 5.2运行多个任务 5.3任务名称缩写 5.4排除任务 5.5安静模式 5.6列出构建脚本中的任务 5.7明确指定构建脚本 5.8指定项目 5.9列出子项目 5.10 Gradle帮助
6.定义和使用Gradle任务
6.1定义Gradle任务 6.2任务执行阶段 6.3任务定义的较短语法
7.始终在安静模式下运行Gradle 8.扩展Java Spring Boot项目
8.1定义控制器 8.2使用Gradle运行项目 8.3试用API
9.摇篮包装 10.蚂蚁vs Maven vs Gradle 11.结论 12.下载源代码

2. Gradle核心概念

Gradle构建系统背后的核心概念可以归纳为三个主要功能。 他们是:

  1. 项目:您要构建的软件
  2. 任务:这些是实际构建项目的动作
  3. 构建脚本:这是包含构建项目的任务的脚本

要了解它们之间的关系,让我们一起研究它们。 因此,一个项目就是您要构建的东西。 任务是构建项目的动作。 具体来说,可能存在编译源代码的任务,从而生成可执行文件,如WAR或JAR文件。 基于Gradle的项目可以包含许多任务以执行以构建项目。

这些任务在构建脚本文件中定义 ,可以由Gradle执行以按指定顺序运行每个任务。 甚至可以使用gradle命令选择特定任务以仅运行指定任务。 这些任务在项目根目录中的build.script文件中定义。 通常,一个项目只有一个构建文件

3.安装Gradle

在开始使用Gradle命令并开始定义Gradle任务之前,我们必须在系统上安装Gradle。 请注意,Gradle需要运行JDK 6或更高版本。 Gradle将使用在系统的PATH环境中找到的Java JDK作为JAVA_HOME 。 如果您想要的Java版本与实际使用的版本不同,只需将JAVA_HOME环境变量指向该Java版本,Gradle将开始使用它。 您可以使用以下简单命令确保在系统上安装了Java:

检查Java版本

java -version

您应该会看到以下内容:

检查java版本

检查java版本

确认Java版本后, 下载要安装的Gradle版本,然后将其解压缩到要安装Gradle的目录中。将Gradle解压缩到安装目录中后,将DIRECTCRY_PATH/bin添加到PATH环境变量中。 添加路径的DIRECTCRY_PATH部分必须是Gradle安装目录的完整路径(而不是“ DIRECTCRY_PATH”作为文本)。 完成此操作后,我们可以使用以下命令以与Java相同的方式检查Gradle版本:

检查Gradle版本

gradle -version

您应该会看到以下内容:

摇篮版本

摇篮版本

即使我们已经安装了Gradle,即使您没有安装Gradle并按照下一节中的描述制作示例项目,也可以按照本课程进行操作。 gradle构建脚本将独立包含在该项目中,并且不需要在系统本身上显式安装Gradle。 那不是很好吗?

4.设置样本项目

在本课中,我们将使用最流行的Web工具之一来制作示例项目,并且不会从命令行执行它,而是使用Spring Initializr 。 只需在浏览器中打开链接并进行浏览即可。 要设置我们的项目,我们使用以下配置:

Spring Initializr配置

Spring Initializr配置

如图所示,我们添加了一个依赖关系,但这并不重要。 解压缩该项目,并在您喜欢的任何文本编辑器中打开存在于项目根目录中的build.gradle文件。 对于此项目,文件将如下所示:

build.gradle

buildscript {ext {springBootVersion = '2.0.1.RELEASE'}repositories {mavenCentral()}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")}
}apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'group = 'com.javacodegeeks.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8repositories {mavenCentral()
}dependencies {compile('org.springframework.boot:spring-boot-starter-web')testCompile('org.springframework.boot:spring-boot-starter-test')
}

在上面的脚本文件中,我们看到在文件中指定了一些插件。 我们使用的第一个插件是Java插件。 该插件提供了一些预定义的配置和任务,使我们能够非常轻松地构建Java项目。 它利用类似Maven的源集在指定项目中查找源代码。

Source-Set定义为一种配置,它通知插件在哪里寻找用于编译和测试任务的源代码。 默认情况下,Java源代码位于src / main / java下 ,而测试包位于src / test / java下 。 除非另有说明,否则将在相同目录中搜索源代码。

除了插件之外,我们还向项目添加了一些依赖项 。 Gradle知道从我们定义的存储库部分中寻找这些依赖项的位置。 我们指定对于任何依赖关系解决方案,Gradle应该引用Maven中央存储库来下载运行项目所需的任何所需JAR。

5.运行摇篮

打开命令行终端,然后切换到项目的根目录。 由于该项目基于Gradle,并且我们也在系统上安装了Gradle,因此我们现在可以运行Gradle。 让我们看看如何做到这一点:

跑步摇篮

gradle

这将在项目根目录中存在的build.gradle文件上运行Gradle。

5.1运行任务

Gradle构建脚本包含一个或多个我们可以执行的任务。 我们可以通过简单地将任务名称放在gradle命令之后来在项目上执行任务:

运行单个任务

gradle compileCode

上面的命令将触发上述任务,以编译项目代码。 如前所述,由于构建文件中存在适当的Java插件,因此Gradle将能够找到项目的源代码。

5.2运行多个任务

就像我们在上一节中将任务名称放在gradle命令之后执行单个任务一样,我们甚至可以一次执行多个任务以指定顺序执行它们。 让我们看看如何做到这一点:

运行多个任务

gradle clean build

该命令将首先执行clean任务。 该任务完成后,将自动触发install任务。 一旦运行此命令,我们将看到类似以下内容:

执行多项任务

执行多项任务

为了说明这一点,即使您多次提及同一任务,该任务也只会执行一次。 就像下面的命令:

运行多个任务

gradle clean clean

即使多次提到clean任务,它也只会执行一次,不会执行两次。

5.3任务名称缩写

不必键入完整的任务名称即可执行它。 就像,对于clean任务,我们可以这样写:

任务缩写

gradle c

如果名称与其他任务没有冲突,则gradle将查找干净任务并执行。 当我们运行它时,它失败了,因为有多个任务以字符c开始:

任务缩写

任务缩写

该错误清楚地表明可能的候选对象是:“检查”,“类”,“干净”,“组件”。 因此,在这种情况下,我们需要更加具体。 但是,以下命令将正常运行:

任务缩写

gradle cle

这将执行clean任务。 这样,Gradle提供了一种对开发人员友好的方式,即使提供了便利的约定和命令行实用程序,我们也不必手动缩短命令。

5.4排除任务

有些Gradle任务也依赖于其他任务。 因此,当您执行主要任务时,它将触发执行它所依赖的所有任务。 尽管这不会造成任何问题,但是会减慢构建过程。 考虑一种情况,当您想要执行构建任务时。 它也会触发testtestClasses任务,但是您知道test任务将在您测试所有测试用例时成功完成,因此您可能想忽略它以加快过程。 可以使用-x开关来完成,如下所示:

忽略任务

gradle build -x test

5.5安静模式

执行任务时,Gradle将大量消息输出到控制台。 如果您希望执行一些安静的任务,可以使用如图所示的-q开关来安静地执行任务,而不会产生控制台消息:

静音模式

gradle -q compileCode

当您编写脚本以使用自动生成和部署文件或代码管道来部署项目时,安静模式非常有用。 这样,在gradle任务执行过程中不会在日志文件中填充不必要的日志消息。

5.6列出构建脚本中的任务

当我们要列出构建脚本中显示的所有任务时,我们可以简单地运行以下命令:

列出所有任务

gradle tasks

对于我们的项目,我们将看到已经定义了许多任务:

列出所有可用的Gradle任务

列出所有可用的Gradle任务

我们看到与每个任务有关的信息。 这提供了一种便捷的方式,使我们可以获取有关脚本中定义的插件中预定义的每个任务的信息。

5.7明确指定构建脚本

即使Gradle自动在项目的根目录中选择默认的build.gradle文件,但如果您想以其他方式命名该文件,则可以在gradle名称中提供一个名称,以供您选择要用作配置文件的文件借助-b开关:

pom.xml

gradle -b build.gradle build

5.8指定项目

如果要构建的项目包含要以独立模式构建的子项目,则甚至可以使用-p选项指定要执行的项目:

执行子项目

gradle -p subproject-directory build

5.9列出子项目

我们可以用一个简单的命令列出主项目中包含的所有子项目(在该项目的Gradle构建脚本中指定):

列出子项目

gradle projects

当您查看公共项目并想确定项目中包括所有子项目时,此命令非常有用。

5.10 Gradle帮助

如果您需要与任何gradle命令和任务有关的帮助,我们可以运行一个简单的命令来获取有关可以执行的各种任务和命令的信息:

pom.xml

gradle -h

我们将提供Gradle命令的选项的详细列表:

摇篮帮助

摇篮帮助

6.定义和使用Gradle任务

Gradle任务定义了构建项目所需的操作。 没有任务,我们的构建脚本将不会在Gradle执行时构建任何内容。 现在,我们将看到如何在上面已经定义的项目中完成自己的任务。

6.1定义Gradle任务

让我们在build.gradle文件中定义一个新的Gradle Task,如下所示:

build.gradle

task hello { println "Hello, JavaCodeGeeks." 
}

我们可以执行定义为的任务:

运行我们的任务

gradle hello

我们将看到输出为:

在Gradle中运行我们自己的任务

在Gradle中运行我们自己的任务

6.2任务执行阶段

执行Gradle任务时,它将经过两个执行阶段,然后评估结果。 这些阶段是:

  • 第一
  • 持续

在内部,Gradle任务表示为一个对象。 要开始执行第一阶段,我们必须调用已定义的方法之一,将闭包作为参数传递(闭包是匿名函数)。 各自的构建阶段方法是:

  • doFirst()
  • doLast()

让我们看一个有关如何在任务中调用这两个方法的示例:

调用阶段方法

task hellohello.doFirst({println "First method"
});hello.doLast({println "Last method"
});

当我们使用命令执行这些方法时:

运行我们的任务

gradle hello

我们将看到输出为:

在Gradle中运行我们自己的任务

运行分阶段任务

如前所述,我们首先定义了一个名为hello的任务。 接下来,我们定义并调用doFirst()方法,并传递一个闭包作为包含打印语句的参数。 类似地定义了下一个方法doLast() ,该方法本质上执行相同的操作。 运行任务时,我们可以看到这两个方法以相同的顺序被调用。

6.3任务定义的较短语法

使用Groovy,优化代码的可能性比其他语言要高得多。 我们在上一节中编写的分阶段任务定义中也可以做到这一点。 这是我们可以对定义的代码执行的改进:

  • 如果带有方法调用的代码行以新行结尾,则无需在每个方法定义的末尾使用分号。
  • 由于闭包是匿名函数,因此我们不需要闭包中存在的语句周围的括号。

通过这些优化,我们的代码将如下所示:

调用阶段方法

task hellohello.doFirst{println "First method"
}hello.doLast{println "Last method"
}

当然,此执行阶段的输出将与之前相同。 您通常会在Gradle官方文档和其他Gradle教程中经常看到较短的语法,因为它更加直接和简洁。

7.始终在安静模式下运行Gradle

开始构建后,当前无法在安静模式下运行Gradle。 我们可以找到当前值,但是在执行任何代码时它是只读的。

的LogLevel可以通过由它的脚本gradle这个对象来访问startParamater

获取Gradle日志级别

LogLevel level = gradle.startParameter.logLevel
println "Current logging level: $level"

如果我们想让日志记录不总是发送到控制台,则可以使用Gradle的内置记录器:

仅在INFO上打印

project.logger.info("This gets printed only if caller uses --info flag on command line.")

然后,对于我们的事件,我们希望控制台记录器使用lifecycle级别:

消息总是打印

project.logger.lifecycle('my message that will always print')

8.扩展Java Spring Boot项目

在本节中,我们将在所建立的项目中添加少量Java代码,并了解如何使用项目本身随附的构建脚本和Gradle包装器来运行它。 如果在您喜欢的IDE中打开项目,您将看到它仅包含一个带有以下代码的类:

JcgGradleTutorialApplication.java

package com.javacodegeeks.example.JCGGradleTutorial;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class JcgGradleTutorialApplication {public static void main(String[] args) {SpringApplication.run(JcgGradleTutorialApplication.class, args);}
}

我们将在下一部分中修改此类,以使其成为成熟的Spring Boot项目。

8.1定义控制器

我们将在上面定义的类中进行小的修改,以将其转变为成熟的Spring Boot控制器类,以便我们也向其中定义API。 这是我们将使用的代码:

JcgGradleTutorialApplication.java

package com.javacodegeeks.example.JCGGradleTutorial;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class JcgGradleTutorialApplication {public static void main(String[] args) {SpringApplication.run(JcgGradleTutorialApplication.class, args);}@RequestMapping(value = "")public String helloWorld() {return "Hello Java Geek!";}
}

现在,控制器已准备就绪,我们可以继续运行项目。 另外,为了更深入地了解Sprint Boot项目和Controllers的工作方式,请阅读Spring Boot Tutorial 。

8.2使用Gradle运行项目

我们下载的项目带有Gradle包装器。 该包装器包含Gradle脚本,即使没有在我们运行项目的系统中安装Gradle,也可以使用这些脚本来运行项目。 我们可以使用以下命令运行项目:

运行项目

./gradlew spring-boot:run

请注意,在运行项目之前,请删除我们定义的任务,因为它可能会更改其他任务,并且您可能无法运行该项目。 完成此操作后,我们可以尝试下一节中刚刚制作的API。

8.3试用API

项目启动并运行后,请访问以下URL:

项目网址

localhost:8080

我们将看到以下消息:

运行项目

运行项目

优秀的! 使用一个命令,我们就能用几行代码运行定义的完整Spring引导项目。

9.摇篮包装

为了轻松执行项目,Gradle还提供了包装器,这样我们就不必在安装和运行基于Gradle构建系统构建的项目的每台机器上都安装Gradle。 就像我们上面定义的项目一样,它包含一些文件,这些文件是适用于各种操作系统的Gradle包装器,例如:

  • gradlew是执行Gradle任务的Shell脚本文件
  • gradlew.bat 文件是执行Gradle任务的Windows批处理脚本
  • ./gradle是一个目录,其中包含Gradle包装器JAR和一个属性文件,指示我们正在使用的版本和其他配置。 这个明确的版本定义确保对Gradle的任何更新都不会破坏该项目

要使用Gradle包装文件运行项目,如果使用Linux / OSX,则运行gradlew文件;如果使用Windows OS,则运行gradlew.bat文件。 Gradle包装器提供的另一个advantageGradle是,如果要切换到较新版本的Gradle,只需更改gradle-wrapper.properties的条目。

10.蚂蚁vs Maven vs Gradle

整个行业使用的三种最受欢迎​​的构建系统是Ant,Maven和Gradle。 在比较这些系统时,每个系统各有优缺点。 让我们对这些系统中的每一个进行快速检查,以查看电源所在。

蚂蚁于2000年发布,易于学习和实施。 它遵循XML脚本格式,但明显的缺点是XML本质上是分层的,因此不适合过程编程方法。 此外,即使项目相对较小,带有Ant的XML文件也往往会变大。

Maven于2004年问世,它对ANT进行了重大改进,但它继续为其脚本使用XML格式。 增加的最大优点是能够通过网络下载所需的依赖项 。 社区感到,目标目标的自定义仍然很困难,并且当同一库以不同版本多次下载时,依赖项管理不能很好地处理冲突

Gradle于2012年发布,当Google将其用作Android OS的默认构建工具时,它获得了很大的吸引力。 Gradle不使用XML。 相反,它具有基于Groovy(JVM语言之一)的自己的DSL。 结果,Gradle构建脚本往往比为Ant或Maven编写的脚本更短,更清晰。 由于其自身的依赖关系解析引擎的存在以及多年来的巨大改进,其构建变得比Maven和Ant 更快

11.结论

在本课程中,我们研究了Gradle如何成为用于Java项目的最受欢迎和易于使用的构建系统和依赖性管理系统之一。 Gradle提供的Easy想法仅是为与领域相关的项目专门定义的,这就是为什么它为我们提供了定义构建脚本的强大功能的原因,这些构建脚本尺寸很小,并且可以用很少的Groovy代码行执行很多操作在里面。

我们还将Gradle与其他应对Gradle挑战的构建系统(Maven和Ant)进行了比较。 每个提到的构建系统都有各自的优缺点,但是Gradle脚本的简洁性使其可以在生产级系统上走很长一段路。

12.下载源代码

这是Gradle和Task定义的示例。

下载
您可以在此处下载此示例的完整源代码: JCG-Gradle-Tutorial

翻译自: https://www.javacodegeeks.com/2018/05/gradle-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【定时同步系列6】Gardener误差检测算法原理

关注公号【逆向通信猿】更精彩!!! 引言 离散时间符号定时同步方法 如下图所示为比较常用的一种符号定时同步的离散时间方法,通常由三个基本单元组成离散时间锁相环,分别为:定时误差检测器(TED)、环路滤波器和插值控制。其中,插值器和TED作用相当于鉴相器,插值控制相…

glassfish_RIP GlassFish –感谢所有的鱼。

glassfish我们都听说过。 昨天,JavaEE和GlassFish的官方路线图更新已发布 。 从标题开始,整个帖子基本上是关于一件事的:今天我们知道的GlassFish Server已从完整的产品转为玩具产品。 从太阳到Oracle的漫长道路 从一开始,GlassF…

【定时同步系列7】位(符号)定时同步之模1插值控制和递归插值控制原理

关注公号【逆向通信猿】更精彩!!! 引言 本节主要讨论符号定时同步结构中的插值控制模块,如下图所示,插值控制模块的目的是为内插器提供第 k k k个基点索引 m ( k ) m(k)

活性GWT

介绍 在过去的4到5年中,反应式编程的普及程度得到了极大的提高。 这可以告诉我们,反应性应用程序的用例现在比以往任何时候都有效。 后端系统上的压力增加了,因此需要用最少的资源来处理这种压力。 响应式编程被认为是在减少资源消耗的同时提…

【数字信号处理】卷积和乘法系列3之测不准原理

关注公号【逆向通信猿】更精彩!!! 声明:底部的小广告标签并不是博主所加!! Heisenberg测不准原理 信息在时域中的扩展(尖峰之间的距离)与其在频域中的对应扩展之间的这种关系是Heisenberg不确定性原理的一个例子。时域中的扩展(方差)乘以频域中的扩展具有不能被突破的…

【数字信号处理】卷积和乘法系列3之傅里叶变换对II

关注公号【逆向通信猿】更精彩!!! 声明:底部的小广告标签并不是博主所加!! 采样 傅里叶变换对(FT)很重要的原因是,如果有一个连续时间 (CT) 信号,则可以通过将信号乘以梳状函数来对其进行采样,产生的样本将只是尖峰处的值。采样过程产生离散时间 (DT) 信号,因为采…

使用密钥加密码加密_创建基于密码的加密密钥

使用密钥加密码加密本文讨论了创建基于密码的加密PBE密钥。 首先提醒您以前的要点–通常,在实际操作中,应将PBE密钥用作主密钥,该主密钥仅用于解锁工作密钥。 这具有三个主要优点: 您可以有多个密码,例如&#xff0c…

【定时同步系列8】QPSK基带调制+Gardener定时误差检测+解调误码率曲线之MATLAB并行仿真姊妹篇一

结果预览 误码率曲线 关于反馈型定时同步技术的原理已经陆陆续续讨论了好久了,涉及的各个细节内容较多,且不容易理解,整个流程框图如下所示: 符号定时同步的离散时间方法(异步) 其中, interpolator模块在博客: 【定时同步系列5】Farrow内插器结构原理和MATLAB实现 TED模…

【定时同步系列9】QPSK基带调制+Gardener定时误差检测+解调误码率曲线之MATLAB并行仿真姊妹篇二

关注公号【逆向通信猿】更精彩!!! 上一篇主要对Gardener定时算法进行了MATLAB仿真,其中插值控制字 W ( n ) W(n) W(n)作为环路滤波器的输出,采用迭代的方式进行更新,这也是《数字调制解调技术的MATLAB与FPGA实现》书中代码所采用的的方法! 对于这一点,此次采用另一种…

VS下一种很好的远线程注入的dll调试方法

一、Detorus-master的编译 下载源代码 https://github.com/microsoft/detours 用管理员身份启动 x64 Native Tools Command Prompt for VS 2017 或 x86 Native Tools Command Prompt for VS 2017 用cd命令进入到Detours-master目录下,分别运行以下命令: call "D:\Pr…

eclipse 隐藏项目_前5个有用的隐藏Eclipse功能

eclipse 隐藏项目Eclipse是野兽。 仅凭其力量才能超越其神秘感的设备。 有人将其称为连续体跨功能器 。 其他人则称它为透湿器 。 是的,它是如此之大,需要花费数年才能掌握。 然后,您的经理出现并告诉您:我们正在使用NetBeans。 …

vs2017+qt5.12 未将对象应用设置到对象的实例问题 -解决方法

环境:Win7 VS2017 Qt5.12 使用VS2017的 Qt VS Tools 打开Qt Example下的pro文件时出现如下错误提示: 在这里插入图片描述 查看.qmake.stash 文件如下: 在这里插入图片描述 QMAKE_CXX.QMAKE_MSC_VER 1200 这个配置是问题的根源 经过一天的艰…

使用Spring Security和OAuth 2.0保护Spring微服务架构

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 每个开发人员都希望能够更快,更有效地进行构建以支持规模。 使用Spring构…

Matlab库函数firrcos、rcosfir、rcosine和rcosdesign区别之根升余弦滤波器系数推导详解

一、根升余弦(Square root raised cosine)滤波器系数求解推导 h ( t ) = 4 R cos ⁡ ( ( 1 + R ) π t / T ) + sin

一种使用setdll+HOOK钩子技术+dll为MFC程序ProtocalTool等老旧程序打补丁的思路(含源码)

一、引言 由于工作原因,需要使用一个很老旧的软件,没有源代码,该软件在XP系统下运行正常,但是需要登录,且在win10系统下使用时IP控件运行不正常,只能输入每个数字只能输入2位数,还有一些其他问题,比如给软件添加一些编辑框,或者对软件进行 下面简单梳理一下解决这些…

访存优化_Hibernate事实:多级访存

访存优化在多个级别上检索根实体及其子关联是很常见的。 在我们的示例中,我们需要使用其树,分支和叶子加载森林,并且我们将尝试查看Hibernate在三种集合类型上的表现:集合,索引列表和包。 这是我们的类层次结构的样子…

基于ARM的字符串拷贝实验(嵌入式系统)

基于ARM的字符串拷贝实验 一,实验目的 1.掌握ARM汇编指令LDR、STR和B等的使用方法,完成较为复杂的存储区访问和程序分支,学会使用条件码。 2.掌握完整的ARM汇编程序结构,具备初步的程序编写能力。 3.掌握ADS1.2集成开发环境的工程建立、编译参数设置、程序编译和调试等…

用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件

对于将在Synology RS815 NAS上检查备份文件的Spring Boot应用程序,我们希望能够轻松测试此NAS上存储的文件,而不必复制存储在其上的7TB。 理想情况下,我们希望创建相同的文件结构以在Spring开发配置文件中使用Web应用程序,并在J…

根据当天日期计算下一天日期

在日常编程中,经常需要根据当前计算相邻的下一个日期,以下就是这个小算法,直接上代码 // 判断是否是闰年 BOOL IsBissextileYear(int year) {if((((year%4==0) && (year%100)

利用根升余弦滤波器和整数倍内插的多相结构生成含采样频偏的过采样信号

多相表示在多抽样率信号处理中是一种基本方法,使用它可以在实现整数倍和分数倍抽取和内插时提高计算效率。 目前我能想到的应用是信号的成型滤波,需要内插,然后与低通滤波器(成型时为过采样的(根)升余弦波形)进行卷积,这个过程如果直接去计算的话,会有很多多余的乘法操作…