Gradle学习之书籍《Build and Test with Gradle》之chapter2:Gradle task任务

30天Flutter冲刺大厂:以项目驱动构建面试知识体系 在跨平台开发领域,Flutter凭借其高性能的渲染引擎和声明式UI框架,已成为构建高质量移动应用的重要技术。其核心原理基于Widget-Element-RenderObject三棵树的高效协同,通过自绘引擎Skia实现流畅的60fps渲染。掌握Flutter不仅意味着能快速构建美观的UI,更代表着对现代前端架构和性能优化有深刻理解,这对于开发复杂业务场景和提升用户体验至关重要。在实际工程实践中,开发者常面临状态管理方案选型、混合开发通信、包体积优化等挑战。本文以一次高强度面试冲刺为背景,通过构建一个《Flu 阅读详情

本文原创作者:http://blog.youkuaiyun.com/minimicall转载需要注明次来源

本文为读书笔记,记录性文章,所以,不会大段大段的阐述。只会一条条的总结。

1.  定义一个任务。

gradle会运行本目录下的脚本build.gradle文件。

内容:

task hello
执行:

micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_1$ gradle hello
:hello UP-TO-DATE

BUILD SUCCESSFUL

Total time: 3.707 secs
micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_1$ gradle tasks
:tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]

Help tasks
----------
dependencies - Displays all dependencies declared in root project 'e2_1'.
dependencyInsight - Displays the insight into a specific dependency in root project 'e2_1'.
help - Displays a help message
projects - Displays the sub-projects of root project 'e2_1'.
properties - Displays the properties of root project 'e2_1'.
tasks - Displays the tasks runnable from root project 'e2_1'.

Other tasks
-----------
hello

To see all tasks and more detail, run with --all.

BUILD SUCCESSFUL

Total time: 2.388 secs

什么东西都没做,只是定义了一个任务。空的。

接下来,定义任务里面实质性的东西。

首先,告诉大家的是,一个gradle build一般经过三个阶段。初始化(initialization),配置(conifguration),执行(execution)。

一个任务包含动作(Task Action)和配置(Task Configuration)。

2. 动作(Task Action)

task hello << {
println 'hello, world'
}
我们用 << 追加符来定义一个task的动作。当然后续你会看到有其他方法。但这个是最方便的。

micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_3$ gradle hello
:hello
hello,world

BUILD SUCCESSFUL

Total time: 4.068 secs
你看,输出了一个hello world

不过,这个追加是可以继续“追加”的。看例子:

task hello
hello << {
print 'hello, '
}
hello << {
println 'world'
}
我们分了两次来定义hello任务的动作。

结果是和第一次是一样的。

3.任务配置(Task Configuration)

看例子吧。


task initializeDatabase
initializeDatabase << { println 'connect to database' }
initializeDatabase << { println 'update database schema' }
initializeDatabase { println 'configuring database connection' }

注意最后一行,没有追加符号的。我们来看一下输出。

micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_6$ gradle initializeDatabase
configuring database connection
:initializeDatabase
comnnet to database
update database schema

BUILD SUCCESSFUL

Total time: 4.056 secs
注意输出,“configuration database connection是在:initializeData这一行之前。

所以,一个任务执行前,实会先被配置的。

配置和动作一样可以“追加”,看例子吧。

task initializeDatabase
initializeDatabase << { println 'connect to database' }
initializeDatabase << { println 'update database schema' }
initializeDatabase { print 'start configuring ' }
initializeDatabase { println 'database connection' }

执行,输出:

micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_8$ gradle initializeDatabase
start configuring
configuring database connection
:initializeDatabase
comnnet to database
update database schema

BUILD SUCCESSFUL

Total time: 3.781 secs
配置,主要是定义一些你在执行动作的时候要用到的变量,数据结构。需要说明的是,在构建工程的过程中,不管你这个任务是否会被执行,但你的配置是每次都会被执行的。所以,需要注意这点。

还是给大家看一下代码吧:

task initializeDatabase
initializeDatabase << { println 'comnnet to database'}
initializeDatabase << { println 'update database schema'}
initializeDatabase { println 'start configuring'}
initializeDatabase { println 'configuring database connection'}

task testConfigure
testConfigure << { println 'test configure action'}
testConfigure { println 'I am the Cofiguration of task testConfigure'}

输出:

micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_8$ gradle initializeDatabase
start configuring
configuring database connection
I am the Cofiguration of task testConfigure
:initializeDatabase
comnnet to database
update database schema

BUILD SUCCESSFUL

Total time: 3.751 secs

4,任务也是个对象

这部分主要是包含四个内容:

1)任务之间的依赖。depensOn

2)doFirst方法。

3)doLast方法。

4)onlyIf方法。

我直接上两个例子。给大家一个直观感受:

task setupDatabaseTests << {
	// This is the task's existing action
	println 'load test data'
}
setupDatabaseTests.doFirst {
	println 'create schema'
}
setupDatabaseTests.doFirst {
	println 'create xxxx'
}
setupDatabaseTests.doLast {
	println 'drop test data'
}
task createSchema << { println 'create database schema'}

task loadTestData(dependsOn: createSchema) << { println 'load test data'}

loadTestData.onlyIf{
	System.properties['load.data'] == 'true'
}

大家运行各自任务来测试即可。我这里贴一个onlyIf和依赖的输出

micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_9$ gradle loadTestData
:createSchema
create database schema
:loadTestData SKIPPED

BUILD SUCCESSFUL

Total time: 3.701 secs
micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_9$ gradle -Dload.data=true loadTestData
:createSchema
create database schema
:loadTestData
load test data

BUILD SUCCESSFUL

DefaultTask的一些属性

didwork
是否成功执行
enable,是否可以被执行,如果被设为false则它本身不执行,它依赖的任务还是会被执行的,除非那个任务也被禁止了。
path,路径。
logger,日志。

task logLevel << {
def levels = ['DEBUG',
'INFO',
'LIFECYCLE',
'QUIET',
'WARN',
'ERROR']
levels.each { level ->
logging.level = level
def logMessage = "SETTING LogLevel=${level}"
logger.error logMessage
logger.error '-' * logMessage.size()
logger.debug 'DEBUG ENABLED'
logger.info 'INFO ENABLED'
logger.lifecycle 'LIFECYCLE ENABLED'
logger.warn 'WARN ENABLED'
logger.quiet 'QUIET ENABLED'
logger.error 'ERROR ENABLED'
println 'THIS IS println OUTPUT'
logger.error ' '
}
}
输出:

$ gradle -b logging.gradle logLevel
16:02:34.883 [ERROR] [org.gradle.api.Task] SETTING LogLevel=DEBUG
16:02:34.902 [ERROR] [org.gradle.api.Task] ----------------------
16:02:34.903 [DEBUG] [org.gradle.api.Task] DEBUG ENABLED
16:02:34.903 [INFO] [org.gradle.api.Task] INFO ENABLED
16:02:34.904 [LIFECYCLE] [org.gradle.api.Task] LIFECYCLE ENABLED
16:02:34.904 [WARN] [org.gradle.api.Task] WARN ENABLED
16:02:34.905 [QUIET] [org.gradle.api.Task] QUIET ENABLED
16:02:34.905 [ERROR] [org.gradle.api.Task] ERROR ENABLED
16:02:34.906 [ERROR] [org.gradle.api.Task]
SETTING LogLevel=INFO
---------------------








gradle入门书 gradle 学习书籍 ,讲得很详细。包括Gradle in Action和Gradle_Beyond_the_Basics两本。 立即下载

相关推荐

gradle 官方文档 中文版

gradle 是最新出的一个项目构建工具,这个是官方文档的中文译本

Android Gradle入门

Gradle是一款非常优秀的构建系统工具,它的DSL基于Groovy实现,可以让你很方便的通过代码控制这些DSL来达到你构建的目的,其构建的大部分功能都是通过插件的方式来实现,所以非常灵活方便,如果内置插件不能满足你的需求你可以自定义自己的插件。

飞雪无情的博客 7286

groovy 学习gradle学习经典手册

网络红文 实战gradle,android,java开发人员的必修课

1.6万字好文!这一次,彻底了解 Gradle 吧!

点击上方 "后端架构师"关注,星标或置顶一起成长后台回复“大礼包”有惊喜礼包!关注订阅号「后端架构师」,收看更多精彩内容每日英文Sometime you just ha...

程序员小乐 1071

文档多模态识别工具对比:MinerU、PaddleOCR、Marker

本文对比了三款文档多模态识别工具:MinerU、PaddleOCR和Marker。MinerU专注于中文文档的端到端解析,支持复杂元素提取和结构化输出,适合中文论文和教材解析。PaddleOCR是通用OCR工具包,支持多语言和全流程任务,适用于发票、车牌等图像OCR。Marker则注重多语言支持和轻量化部署,适合英文论文和技术文档的快速转换。三者在核心技术、中文优化、表格处理、输出格式、部署复杂度和适用语言等方面各有优劣。选型建议根据具体需求:MinerU适合高精度中文解析,PaddleOCR适合定制化OC

朴拙科技的博客 4744

labview设置工业摄像头外部触发

使用labview对海康MV-CA013-GM相机设置外部触发。 一、硬件部分 1、硬件引脚定义 2、触发模式设置 相机的触发模式分为两种,一种是内触发模式、另外一种是外触发模式。 3、接线图 信号线的地要跟给信号的设备共地。信号线给高电平时触发拍照。 二、软件部分 1、创建vision acquisition 2、选择使用的摄像头。 3、选择模式。 4、在Acquisition Control中设置这些选项。 5、设置保存图片路径 设置保存路径和保存图片的格式。点击完成即可 参考:https:/

qq_43493715的博客 5665

Gradle全网最细学习手册(下篇)

掌握多项目构建、自定义插件开发、性能优化,通过完整实战案例成为Gradle专家

CodingPhilosophy的博客 1031

AD936x Evaluation Software 实战配置指南:从寄存器设置到滤波器优化

本文提供AD936x Evaluation Software的实战配置指南,详细解析从工程创建、RF向导与时钟模块配置,到数字滤波器优化、数字接口设置及增益控制的完整流程。重点分享寄存器设置、滤波器系数权衡及PLL稳定技巧等核心要点,帮助开发者高效配置AD9361/AD9363射频芯片,快速应用于SDR、基站等场景。

perl8的博客 697

Gradle全网最细学习手册(上篇)

掌握Gradle核心概念、DSL语法、任务系统,体验比Maven更快更灵活的构建体验

CodingPhilosophy的博客 998

深度理解嵌入(embedding)层

首先从one_hot开始: one_hot的优点:计算方便快捷、表达能力强。 one_hot的缺点:过于稀疏,过于占用资源,尤其是在数据量特别大时;数据之间完全独立。

weixin_44441131的博客 5659

python 编程 安卓脚本_详解基于Android的Appium+Python自动化脚本编写

1.AppiumAppium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试, 它使用WebDriver协议驱动iOS,Android和Windows应用程序。通过Appium,我们可以模拟点击和屏幕的滑动,可以获取元素的id和classname,还可以根据操作生成相关的脚本代码。下面开始Appium的配置。appPackage和APPActivity的获取任意下载一个app解压...

weixin_39523625的博客 2930

Java基础语法学习指南:从零到精通的系统化路径

Java作为面向对象编程语言的代表,其强类型系统和丰富的语法特性构成了企业级开发的基石。理解数据类型体系、变量作用域和运算符原理是掌握Java编程的基础,这些概念直接影响代码的执行效率和内存管理。在实际开发中,从JDK环境配置到集合框架应用,每个环节都需要遵循工程实践规范。特别是随着Java 8引入Lambda表达式和Stream API,以及后续版本的模式匹配等特性,现代Java开发呈现出函数式与面向对象融合的趋势。本指南针对Java SE 17 LTS版本,系统梳理了从基础语法到面向对象核心概念的完整知

weixin_34062469的博客 424

Spring Boot日志可视化实战:5分钟搞定Promtail采集与Grafana查询(避坑指南)

本文详细介绍了如何通过Promtail和Grafana实现Spring Boot日志的可视化查询,提供从日志采集到高效查询的全流程实战指南,重点解决部署中的常见问题。内容包括Logback配置、Promtail日志采集、Grafana的LogQL查询技巧及生产环境优化建议,帮助开发者快速定位和解决日志问题。

weixin_42526015的博客 107

从零构建手机端大模型:SFT、RLHF到量化部署全流程实战

大语言模型(LLM)通过海量无标注文本的预训练,掌握了语言的统计规律和世界知识,形成了强大的基座模型。其核心技术原理在于Transformer架构的自注意力机制,能够有效建模长距离依赖关系。这一技术价值在于,通过后续的指令微调(SFT)和对齐优化(如RLHF),模型可以学会遵循人类指令并符合价值观,从而在对话、创作、编程等多种场景中提供实用价值。特别是在移动端和边缘计算场景下,模型的轻量化部署成为关键需求。本文聚焦于**监督微调(SFT)**和**人类反馈强化学习(RLHF)**这两个核心对齐阶段,结合Lo

weixin_34318272的博客 349

从开源到落地:SimpleBGC 三轴稳像平台全栈技术解析(上)

SimpleBGC是一款开源的稳定云台控制系统,相比专业设备具有显著的价格优势(仅为1/5-1/10),采用模块化设计支持全场景适配。系统包含硬件设计、软件代码和算法三大核心:硬件采用STM32主控和IMU传感器,支持6步换向和FOC电机驱动;软件采用三层架构(驱动层、算法层、应用层),实现姿态解算和PID控制;算法方面提供互补滤波(基础版)和卡尔曼滤波(高端版),可达到±0.5°至±0.1°的稳定精度。该系统适用于无人机航拍、工业检测等多种应用场景,特别适合DIY开发者和中小企业进行定制化开发。

bother3000的博客 3685

大模型风电功率预测:短期,超短期,中长期的完整实现与代码详解

本文全面介绍了基于深度学习大模型的风电功率预测方法,涵盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1周)三种时间尺度。文章详细阐述了数据准备与特征工程,包括数据收集、预处理和可视化分析。针对不同时间尺度,分别介绍了Temporal Fusion Transformer (TFT)、Informer和N-BEATS模型的构建、训练与评估方法,并提供了完整的开源代码实现。此外,文章还探讨了模型部署与生产环境集成,包括模型保存与加载、实时预测API以及模型监控与再训练。最后,文章总结了关键创新

专注AI大模型,软件混淆,授权 1891

Java开发从入门到精通:环境配置与核心概念解析

Java作为面向对象的编程语言,其'一次编写,到处运行'的特性使其成为企业级开发的首选。理解Java运行原理需要从JVM虚拟机机制入手,掌握环境变量配置、基础语法和面向对象特性是开发者的基本功。在实际工程中,合理使用集合框架和并发编程能显著提升系统性能,而Java 8引入的Lambda和Stream API则大大简化了数据处理。对于初学者而言,正确配置JAVA_HOME环境变量和掌握数据类型转换是快速入门的关键,这些基础技能也为后续学习Spring等框架打下坚实基础。

weixin_30587927的博客 382

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Gradle开发手册-进阶篇

在基础篇中了解了Gradle相关的知识同时通过一个例子实战了一下如何构建一个简单的Gradle-java应用。本章会详细讲解下gradle配置相关的详细内容。

编程是一门实践技术 2409

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

关于Gradle的一些好的学习资源

看了Gradle一周左右,看了很多资料,把个人感觉不错的资料总结一下。 Gradle User Guide英文版:(适合细读,查找资料用) 官方的英文版资料。内容和本篇中提到的中文版内容差的还是很多的,可能是因为翻译时候的文章和现在最新版本有所改变吧。 这里还是讲了很多原理性的东西,如果想要理解(不是了解)Gradle的话,还是要看这个。 https://docs.gradle

冲吧,不要停! 2709

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android开发之Gradle,android驱动开发书籍推荐

| 项目 | 价格 | | — | — | | Computer | $1600 | | Phone | $12 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》 开源分享完整内容戳这里 | | Pipe | $1 | 三种构建脚本 Gradle的脚本都是配置型脚本。每一种脚本类型实际上都是某个具体的gradle的API中的类对象的委托,脚本执行对应的其实是其委托的对象的配置。在一个完整的gradle的构建体系中,总共有三种类型的构建脚本,同时也分别对应着三种委托对

m0_64319333的博客 430

Gradle 入门到精通(三)

前言根据我们上一篇的介绍,我们知道了项目的结构以及构建的流程,根据上面的知识,我们知道了构建的规则实际就是我们写在build.gradle的内容。gradle android插件读取这个文件的内容后,最后完成构建工作。在讲解实际内容前,我先提供一个网站给大家,因为gradle android 插件 是通过dsl语言编写的,所以我们需要知道在什么地方获取相应的api。7 build.gradle文件分

小码哥教育Android学院 7078

【Gradle 系列文章:你真的了解 Gradle 吗】一:Gradle 入门

本文为菜鸟窝作者 吴威龙 的连载 Gradle 是什么 Gradle 学习方式以及资料 一个 Android 项目中的文件结构AS 而非 Eclipse 常用的 gradle 文件介绍 module app 里面的 buildgradle gradle 文件夹 distributionUrl 另外四个属性 当然不了解也没关系 各项属性的整体含义 项目全局的 buildgradle gradlepr

Veyron_wu 3299

Gradle从入门到实战 - Groovy基础

前言 Android方向的第一期文章,会专注于Gradle系列,名字叫做『 Gradle从入门到实战』,计划有如下几个课程: Groovy基础 全面理解Gradle 如何创建Gradle插件 分析Android的build tools插件 实战,从0到1完成一款Gradle插件 本篇文章讲解Groovy基础。为什么是Groovy基础呢,因为玩转Gradle并不需要学习Groovy的全部...

singwhatiwanna 4万+

深入理解Android之Gradle

深入理解Android之Gradle 格式更加精美的PDF版请到:https://pan.baidu.com/s/1GfN6F8sOaKFAdz5y1bn3VQ下载 weibo分享失效,请各位到百度云盘下载   Gradle是当前非常“劲爆”得构建工具。本篇文章就是专为讲解Gradle而来。介绍Gradle之前,先说点题外话。 一、题外话 说实话,我在大法工作的时候,就见过Gradle...

Innost的专栏 19万+

11月赠书:Android、Kotlin、Gradle的书都有

大家好,我是D_clock爱吃葱花,此前提到技术视界公众号会进行赠书活动,今天终于可以开始了。从高三至今,和妹纸恋爱将近7年,上周一起回老家摆酒领证,所以这个活动就这样延了几天。首先,非常感谢电子工业出版社博文视点的晓猛老师和奇俏老师,为本次活动提供的支持。本次赠书总共13本(非常尴尬,开发者头条赠送我个人的两本书还没到,后面到了我再另外赠送),到目前为止关注本公号1个月以上或有过至少一次赞赏记录

技术视界 1444

gradle学习

Gradle可以自动化地进行软件构建、测试、发布、部署、软件打包,同时也可以完成项目相关功能如:生成静态网站、生成文档等 环境配置 略 创建gradleWEB项目 勾选web选项,自动创建src目录 填写groupid和artifacId(创建成功为项目名称) 选择修改gradle配置自动导入 使用本地gradle 并指定gradle目录 选择finish创建成功

caoyp22的博客 177
上一篇: Gradle学习之使用java plugin
下一篇: Gradle学习之Eclipse构建Gradle工程
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值