Gradle小知识点

subprojects 和 allprojects 的区别,

先给出结论:

allprojects是对所有project的配置,包括Root Project;

而subprojects是对所有Child Project的配置。

新建一个test_gradle的文件夹,在文件夹里新建build.gradle和settings.gradle文件,

另外再新建两个文件夹,名字分别为app lib,
在settings.gradle中写入:

include ':app',':lib'

在build.gradle中写入:

allprojects {tasks.create('hello') {doLast {task ->print "project name is $task.project.name \n"}}
}

测试一下allprojects的范围,打开控制台,并切换到新建的根目录,执行gradle -q hello命令,执行结果:

bogon:test_gradle mq$ gradle -q hello
project name is test_gradle 
project name is app 
project name is lib 

再来测试下subprojects的作用域,打开build.gradle继续写入:

allprojects {tasks.create('hello') {doLast {task ->print "project name is $task.project.name \n"}}}subprojects {hello << {print "here is subprojects \n"}}
 

可以看到我们在下面新加了subprojects,并通过之前建的task任务hello输出了一段字符串,继续执行命令gradle -q hello,执行结果:

bogon:test_gradle mq$ gradle -q hello
project name is test_gradle project name is app 
here is subprojects project name is lib 
here is subprojects 

可以看到只有只有根目录下面没有subprojects中task的输出,这也印证了我们上面的结论:

allprojects是对所有project的配置,包括Root Project;

而subprojects是对所有Child Project的配置。

进入Child Project目录下,新建一个build.gradle文件,写入:

hello.doLast {print " —— I'm the app project \n"
}

继续执行命令gradle -q hello,执行结果:

bogon:test_gradle mq$ gradle -q hello
project name is test_gradle project name is app 
here is subprojects —— I'm the app project project name is lib 
here is subprojects 

可以看到task(hello)遍历顺序是:allprojects > subprojects > Child Project

在rootProject下的build.gradle中,buildscript的repositories和allprojects的repositories有什么区别?如下:

//build.gradle
buildscript {repositories {jcenter()google()maven {url 'https://maven.google.com/'name 'Google'}}dependencies {classpath 'com.android.tools.build:gradle:2.3.3'}
}allprojects {repositories {jcenter()google()maven {url "http://maven.xxxxxxxx/xxxxx"}}
}

1、buildscript里是gradle脚本执行所需依赖,如上所示对应的是maven库和插件 。

2、allprojects里是项目本身需要的依赖,

比如代码中某个类是打包到maven私有库中的,那么在allprojects—>repositories中需要配置maven私有库,而不是buildscript中,不然找不到。

gradle获取打包电脑IP

在安卓开发时,本地同时跑了中台,由于每天重连wifi分配的局域网IP都会变化,这导致打包调试时总是需要改IP地址,通过gradle脚本自动获取本机IP,然后动态流入到对应的参数链接中,之后就不用再去改代码了

此处以项目为例:首先在build.gradle中定义获取IP的方法

static def getIP() {InetAddress result = null;Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();while (interfaces.hasMoreElements()) {Enumeration<InetAddress> addresses = interfaces.nextElement().getInetAddresses();while (addresses.hasMoreElements()) {InetAddress address = addresses.nextElement();if (!address.isLoopbackAddress()) {if (address.isSiteLocalAddress()) {return address.getHostAddress();} else if (result == null) {result = address;}}}}return (result != null ? result : InetAddress.getLocalHost()).getHostAddress();
}

然后调用方法获取IP,流入到BuildConfig或者是渠道信息中,此处以BuildConfig为例

android {……defaultConfig {……buildConfigField("String", "IPAddress", "\"http://" + getIP() + ":8080/Service/\"")}
}

此时IPAddress被注入到BuildConfig的静态变量中,在项目的网络配置NetworkConfig中使用

static {switch (BuildConfig.FLAVOR) {case "local":{BASE_URL = BuildConfig.IPAddress;YUNWEI_URL = YUNWEI_URL_TEST;UPDATE_URL = UPDATE_URL_TEST;break;}case "dev":……case "check": ……}
}

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

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

相关文章

文件上传时报413错误

原因&#xff1a;nginx上传文件大小有限制&#xff0c;如果不配置nginx上传文件大小&#xff0c;则上传时会出现 413 (Request Entity Too Large) 异常&#xff08;请求实体过大&#xff09; 解决方案&#xff1a;1、打开nginx主配置文件nginx.conf&#xff0c;找到http{ }&…

go语言(三)----函数

1、函数单变量返回 package mainimport "fmt"func fool(a string,b int) int {fmt.Println("a ",a)fmt.Println("b ",b)c : 100return c}func main() {c : fool("abc",555)fmt.Println("c ",c)}2、函数多变量返回 pack…

PCA富集方法及聚类方法的生物学差异(自备)

对于解析肿瘤中的通路富集情况&#xff0c;我们可以使用PCA方法和聚类方法来评估基因表达谱。下面是对这两种方法的解释以及它们在生物学上的意义。 1. PCA方法&#xff1a; PCA&#xff08;Principal Component Analysis&#xff0c;主成分分析&#xff09;是一种降维技术&…

Shopee商品接口协议

Shopee是一家在线购物平台&#xff0c;提供多种商品的购买和销售服务。它成立于2015年&#xff0c;总部位于新加坡&#xff0c;目前已在东南亚地区和台湾等地开展业务。Shopee主要提供电子产品、家居用品、时尚服装、美妆产品等各类商品&#xff0c;用户可以通过Shopee的手机应…

【知识---c++中的条件运算符说明及使用】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言条件运算符&#xff08;ternary operator&#xff09;案例总结 前言 max_ind[k * OUTPUT_W j] 100 ? expect[k * OUTPUT_W j] 0 : expect[k * OUTPUT_W …

Pillow 报错module ‘PIL.Image’ has no attribute ‘LINEAR’

错误解决笔记。 原文链接&#xff1a;https://blog.csdn.net/qq_42773230/article/details/132736107 在运行代码期间&#xff0c;遇到了module ‘PIL.Image’ has no attribute ‘LINEAR’&#xff0c; 我安装的Pillow-10.0.2 解决办法&#xff1a;卸载Pillow pip uninst…

表的增删改查CURD(基础)

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;MySql&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 新增&#xff08;Create&#xff09; 全列插入 指定列…

Mybatis框架:入门

目录 一、前言 二、Mybatis基础 1. 下载和安装MyBatis 1.1 下载MyBatis 1.2 解压文件 2. 配置MyBatis的数据源 2.1 引入数据库驱动 2.2 配置数据源信息 3. 配置MyBatis的核心配置文件 3.1 指定映射文件路径 3.2 创建映射文件 三、MyBatis注解编程 1. 注解编程的基…

高校教务系统登录页面JS分析——河北地质大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密码加…

鹅厂有料有趣的程序员交流圈重磅官宣!加入立享福利

号外&#xff01;腾讯云开发者社区重磅上线海量社群&#xff0c;覆盖开发者技术学习交流、工作成长、生活分享等多元场景需求&#xff0c;用最新鲜的内容&#xff0c;最好玩的互动&#xff0c;与你一起共创最有料有趣的技术人交流圈&#xff5e; 最有料有趣交流圈在这里你可以畅…

最近我发现一个好用的al绘画网站,给大家推荐一下

https://geekai.world/auth?typeregister&inviteMTMzNTE 注册时可以填写我的邀请码&#xff1a; MTMzNTE 有惊喜谢谢了&#xff1b;

Git学习笔记(第5章):Git团队协作机制

目录 5.1 团队内协作 5.2 跨团队协作 Git进行版本控制都是在本地库操作的。若想使用Git进行团队协作&#xff0c;就必须借助代码托管中心。 5.1 团队内协作 问题引入&#xff1a;成员1&#xff08;大佬&#xff09;利用Git在宿主机上初始化本地库&#xff0c;完成代码的整体…

thinkphp+vue+mysql大学生心理健康测试分析系统g4i4o

学生心里测试分析系统由管理员和学生、教师交互构成。学生对于本系统的使用&#xff0c;学生可以通过系统注册、登录&#xff0c;修改个人信息&#xff0c;查看交流区、心理测试卷、新闻资讯等功能。 教师对于本系统的使用&#xff0c;教师可以通过系统注册、登录&#xff0c;修…

TS 学习笔录(持续更新中)

TS学习笔录 1、TS 数据类型有哪些&#xff1f;2、元组是什么&#xff1f;3、union&#xff08;联合类型&#xff09;& Literal&#xff08;字面量类型&#xff09;?4、any 和 unknown 的区别&#xff1f;5、Object 对象类型&#xff1f;6、type 、interface 、 class 之间…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷6

某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenStack搭建企业内部私有云平台&#xff0c;开源Kubernetes搭建云原生服务平台&#xff0c;选…

人工智能之卷积神经网络(CNN)

前言&#xff1a;今天我们重点探讨一下卷积神经网络(CNN)算法。 _ 20世纪60年代&#xff0c;Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性&#xff0c;继而提出了卷积神经网络CNN&#xff08;Convo…

【MySQL】权限管理和访问控制

权限管理和访问控制 1、MySQL如何控制用户对数据库的访问&#xff1f; MySQL服务器通过权限表来控制用户对数据库的访问&#xff0c;权限表存放在MySQL数据库中。MySQL数据库系统根据这些权限表的内容来为每个用户赋予权限。其中有user表、db表、table_priv表、column_priv表…

大模型学习与实践笔记(九)

一、LMDeply方式部署 使用 LMDeploy 以本地对话方式部署 InternLM-Chat-7B 模型&#xff0c;生成 300 字的小故事 2.api 方式部署 运行 结果&#xff1a; 显存占用&#xff1a; 二、报错与解决方案 在使用命令&#xff0c;对lmdeploy 进行源码安装是时&#xff0c;报错 1.源…

枚举类型缝缝补补

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 1.关键字enum的定义 enum是C语言中的一个关键字&#xff0c;enum叫枚举数据类型&#…

提示词工程: 大语言模型的Embedding(嵌入和Fine-tuning(微调)

本文是针对这篇文章&#xff08;https://www.promptengineering.org/master-prompt-engineering-llm-embedding-and-fine-tuning/&#xff09;的中文翻译&#xff0c;用以详细介绍Embedding&#xff08;语义嵌入&#xff09;和Fine Tuning&#xff08;微调&#xff09;的概念和…