Gradle开发手册-高级篇之多模块项目创建

article/2025/8/26 12:56:08

        在进阶篇中详细讲解了gradle配置相关的详细内容。但是是基于单module的配置,在实际开发时基本全是多module类型的项目。所以本章我们就系统学习下如何构建多模块项目(父-子)以及相关的task内容。

  1. 基础篇:从概念以及广度上介绍下gradle的核心内容,并构建一个简单的java项目;
  2. 进阶篇:详细讲解Gradle的配置相关内容;
  3. 高级篇:讲述一些高级内容,比如多项目构建、自定义task等;
  4. 实战篇:构建几类常见的java应用,这些代码可以做为模板方便日后使用;
  5. FAQ篇:提供一些常用的命令和问题供查询;

此章也是基于前面的demo项目进行修改来完善的,所以建议同学简单回顾下前两章的内容。

一、创建多模块项目

        这种项目一般也称为父-子架构,父模块负责子模块的管理、公共资源的配置等,没有任何项目源码;子模块有自己的构建脚本以及程序源代码。先回顾下之前项目的结构:

        示例中我们将把gradleLearn做为根项目,gradleDemo做为子模块,为达到此目的需要做以下调整:

  1. 移动settings.gradle.kts文件到gradleLearn根目录下,子模块不需要这个文件;移动或复制gradle.properties文件到gradleLearn根目录下,建议子模块也保留一份gradle.properties文件;
  2. 初始化根项目,在gradleLearn根目录中执行gradle wrapper任务,重新生成gradle-wrapper相关的文件,包括gradlew文件、gradlew.bat、gradle目录;
  3. 删除子模块相关的gradle wrapper配置

1、搭建项目结构文件

        移动settings.gradle.kts和gradle.properties,多项目结构其实只需动这一个主要文件即可,把它移动根目录下,然后添加如下配置,注意原来的rootProject.name可以改个名字。

rootProject.name = "gradleRoot"include("gradleDemo")

        如果idea插件不更新或是gradleDemo/build.gradle.kts一直报错,可以点击右侧窗口中一的【-】号删除原来的gradleDemo项目:

         再次刷新可以发现Gradle插件如下图所示,显示一棵树状结构:

 2、初始化父模块

        在上面视图中选择gradleRoot项目,然后重新运行build setup | wrapper 任务:


http://www.hkcw.cn/article/WuQcerqvXv.shtml

相关文章

Gradle的版本差异导致无法编译:Could not initialize class com.android.build.gradle.internal.TaskManager

运行项目报错:Could not initialize class com.android.build.gradle.internal.TaskManager 我这边的原因是少了SDK的包和JDK版本不对。 我们先区分下gradle version与gradle plugin version。如果对此不了解,经常会由于Gradle的版本号问题造成项目无法编译&#xf…

Gradle版本目录(Version Catalog)

Gradle版本目录(Version Catalog) “版本目录是一份依赖项列表,以依赖坐标表示,用户在构建脚本中声明依赖项时可以从中选择。” 我们可以使用版本目录将所有依赖项声明及其版本号保存在单个位置。这样,我们可以轻松地在模块和项目之间共享依…

android开发之NDK配置开发

1、打开项目后,一次点击Tools>SDK Manager 2、点击SDK Tools标签页 3、选中NDK(Side by Side)和CMake复选框 4、点击OK 此时系统会显示一个对话框,告诉你NDK软件包占用了多少磁盘空间 5、点击OK 6、安装完成后,点击…

如何在没有计算机的情况下将联系人从 iPhone 传输到安卓

如果您正在考虑从 iPhone 迁移到Android ,您可能想知道如何在不丢失任何重要信息的情况下转移联系人。您可能还想避免使用电脑进行此过程。幸运的是,有几种方法可以教您如何在不使用电脑的情况下将联系人从 iPhone 迁移到Android ,而且这些方…

如何将数据从 iPhone 传输到 vivo 的 4 种方法

在运行不同操作系统的 iPhone 和 Vivo 之间传输数据时,需要谨慎。廉价或不安全的在线解决方案可能会失败,并使您的个人数据面临风险。避免被“免费”和“快速”服务的承诺所诱惑,因为这可能会危及您的数据。 在本文中,我们整理了…

图片转换之heic转jpg(使用ImageMagick)

缘由:iphone的图库,用jpg拍照保存后内存占比较大,heic格式会微缩不少。问题来了,电脑不能直接小图预览heic。 分析:现在就是解决小图预览的问题(大图用wps可以看) 解决:查找了一些…

Android导入项目时Gradle下载速度慢\超时\失败解决方法

Android导入项目时Gradle下载速度慢\超时\失败解决方法 原因分析: 这是因为Gradle源服务器在国外,下载速度自然很慢 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.3.3-bin.zip 解决方法: 最可靠的方法就是换源 &…

从 iPhone 传输到Android 3 种简单方法

使用 iPhone 多年后,也许您想切换到Android并尝试一些新的东西?不管您是否相信,如果您确实做出了这样的决定,您很可能会遇到将数据从 iPhone 传输到Android的问题。由于手机数据对于当今的人们来说非常重要,因此当您切换到另一部手机时丢失它是不明智的。 在本指南中,您…

Contactile三轴触觉力传感器的滑动与摩擦力计算能力

Contactile三轴触觉力传感器通过先进的技术设计,实现了滑动与摩擦力的精准计算。传感器通过分析滑动与振动信号的关联,动态计算摩擦系数,同时捕捉力、扭矩及初始滑动等多维数据。这种能力为机器人提供了高度灵活的触觉反馈,满足复…

国产分子动力学引擎——GPUMD本地部署教程:专为 NVIDIA GPU 加速设计

一、简介 GPUMD 是一款开源分子动力学模拟软件,由渤海大学樊哲勇教授团队主导开发,2017年首发1.0版本,持续迭代至3.9.4版本,是国内首个完全基于GPU加速的开源分子动力学软件,专为 NVIDIA GPU 加速设计。它使用 CUDA 提…

PostgreSQL 备份与恢复策略

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

2025年渗透测试面试题总结-匿名[校招]高级安全工程师(代码审计安全评估)(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。、 目录 匿名[校招]高级安全工程师(代码审计安全评估) 渗透基础 1. 自我介绍 2. SQL注入写Shell(分数…

Cmake编译glog成功并在QT中测试成功步骤

glog是开源的日志记录系统,下载地址GitHub - google/glog: C implementation of the Google logging module 跟gflags有点相似,编译和测试过程比较周折,所以记录下来具体的编译和测试步骤。 编译环境:WindowsCmakeVs2022Qt5.14.…

【Linux】网络--传输层--深入理解TCP协议

个人主页~ 深入理解TCP协议 一、TCP数据传输问题1、发送数据丢包问题---重传机制(一)客户端数据发送丢包(二)服务器确认应答丢包(三)时间间隔问题 2、三次握手问题---奇数次握手(一)…

深入理解 SQL 的 JOIN 查询:从基础到高级的第一步

在处理数据库时,我们常常需要从多个表中提取数据。比如想知道一个城市的天气情况,同时又想知道这个城市的具体位置。这就需要将 weather 表和 cities 表结合起来查询。这种操作在 SQL 中被称为 JOIN 查询。 现在看下两种表的情况 1.weather 表&#xff…

【无标题】C++23新特性:支持打印volatile指针

文章目录 前言背景与问题C23的解决方案实现原理使用场景硬件开发多线程调试 总结 前言 在C开发中,volatile关键字常用于修饰变量,以确保编译器不会对这些变量进行优化,从而保证程序能够正确地与硬件交互或处理多线程环境下的特殊变量。然而&…

RPG15.轻攻击

上一篇已经制作了装备和卸下武器 接下来开始做战斗系统 1.先添加Tag ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(InputTag_EquipAxe);ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(InputTag_UnEquipAxe); ARPG_GRIVITY_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Play…

20250529-C#知识:继承、密封类、密封方法、重写

C#知识:继承、密封类、密封方法、重写 继承是面向对象的三大特性之一,通过继承能够减少重复代码的编写,有助于提升开发效率。 1、继承 C#不同于C,只支持单继承当子类出现与父类同名的成员时,父类成员被隐藏&#xff0…

第30次CCF计算机软件能力认证-1-重复局面

时间限制: 1.0 秒 空间限制: 512 MiB 下载题目目录(样例文件) 题目背景 国际象棋在对局时,同一局面连续或间断出现3次或3次以上,可由任意一方提出和棋。 题目描述 国际象棋每一个局面可以用大小为 88…

【计算机网络】第2章:应用层—DNS

目录 一、PPT 二、总结 DNS(域名系统)详解 (一)DNS核心概念 (二)DNS查询过程(重点❗) (三)DNS资源记录(RR)类型…