Gradle 和多项目结构

2024-02-26

我试图了解应该如何进行以下项目设置:

┌Top Android Project
│
├── Project 1 - (Pure Java Modules)
│    │
│    ├── Module A1
│    ├── Module B1
│    :
│    └── Module Z1
│  
├── Project 2 - (Android Libraries Modules)
│    │
│    ├── Module A2
│    ├── Module B2
│    :
│    └── Module Z2
│  
└── Module - Actual Android Project

在当前的设置中,每个模块中都有一个 build.gradle,我真正讨厌这个设置的是 build.gradle 的所有内容在模块之间都是重复的。

事实上,我希望其中大多数都有相同的逻辑,'纯Java模块' 都是基础模块,我想将其输出、JavaDoc 和源代码打包,并部署到某个远程存储库(* 默认)。

另一方面,'的一些模块纯Java模块' 我想要第二个议程,例如,除了默认*构建之外,我想部署一个具有特定项目依赖项的 jar 或类似的东西。

在建设的同时实际的Android项目,我希望模块在默认*构建中进行编译,最后为我的所有 Android 项目(数量相当多)配置默认的 build.gradle,并且我不想重复该文件。

=================================================== =============

我想我正在寻找类似 Maven 父 pom 的东西,但由于我不完全理解 Gradle 是如何工作的,所以我向你们开放这个来分享你们的想法......

考虑到复制相同的构建文件(我敢说)是不可接受的,因为我可能想更改所有模块的所有构建逻辑中的某些内容

处理此类设置的最佳方法是什么?


这对于大多数人来说都是很正常的http://www.gradle.org/docs/current/userguide/multi_project_builds.html http://www.gradle.org/docs/current/userguide/multi_project_builds.html页。但是你需要添加

evaluationDependsOn(':project1')
evaluationDependsOn(':project2')

这样 gradle 就会在 module 之前评估project1和project2。在所有包含代码的项目中,您将需要有一个空的 build.gradle 文件。如果需要,这还允许您自定义项目。

Example: https://github.com/ethankhall/AndroidComplexBuild https://github.com/ethankhall/AndroidComplexBuild

在项目的根目录中添加 build.gradle。所以你需要 4 个包含有用信息的东西。

/build.gradle
/settings.gradle
/project1/build.gradle
/project2/build.gradle
/module/build.gradle

在 /build.gradle 中放入

dependencies {
    project(":module")
}

在 /settings.gradle 中放置

include ':module'
include ':project1', ':project1:A1', ':project1:B1', ':project1:Z1'
include ':project2', ':project2:A2', ':project2:B2', ':project2:Z2'

在 /project1/build.gradle 中放入

apply plugin: 'java'

subprojects {
    apply plugin: 'java'

    sourceCompatibility = JavaVersion.VERSION_1_6
    targetCompatibility = JavaVersion.VERSION_1_6

    repositories{
        mavenCentral()
    }   

    //Anything else you would need here that would be shared across all subprojects
}

/project2/build.gradle

buildscript {
    repositories {
        mavenCentral()
    }   

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }   
}

subprojects {
    apply plugin: 'android-library'

    android {
        compileSdkVersion 17
        buildToolsVersion "17.0"
    }   

    sourceCompatibility = JavaVersion.VERSION_1_6
    targetCompatibility = JavaVersion.VERSION_1_6

    repositories{
        mavenCentral()
    }   

    //Anything else you would need here that would be shared across all subprojects
}

在 /module/build.gradle 中放入

buildscript {
    repositories {
        mavenCentral()
    }   

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }   
}

evaluationDependsOn(':project1')
evaluationDependsOn(':project2')

apply plugin: 'android'

android {
    compileSdkVersion 17
    buildToolsVersion "17.0"
}

dependencies {
    compile project(":project1:A1")
    compile project(":project1:B1")
    compile project(":project1:Z1")

    compile project(":project2:A2")
    compile project(":project2:B2")
    compile project(":project2:Z2")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gradle 和多项目结构 的相关文章

  • R 无法解析为变量

    我想修复这个错误 R 无法解析为变量 我查了很多答案 但找不到正确的答案 我尝试了一切 有人可以帮助我吗 我的主要活动是自动创建的 显示错误的是从以下位置开始的三行case R id button1 package de vogella a
  • 在flutter中跟踪背景位置时使用background_locator插件时出现问题

    我正在尝试使用 flutter 跟踪后台位置 为此我正在使用背景定位器 https pub dev packages background locator插入 它的实现方式是注册某些静态回调函数 我声明了一个 File 类型的类变量来在后台
  • android/eclipse 中的网络服务

    我需要通过soap 方法使用android eclipse 的Web 服务 即 我必须提供输入并根据用户输入从网络服务显示适当的结果 如何做到这一点 java类 public class Demo webserviceActivity ex
  • 如何阻止 Android ViewFlipper 循环?

    我将 ViewFlipper 设置为每 5 秒自动翻转一次 省略一些细节 它看起来像这样并且工作正常 ViewFlipper flipper ViewFlipper findViewById R id myflipperid flipper
  • 如何在 Android 中动态添加新的 Android 芯片?

    我有一个名为 Question 的类 其中包含标签的字符串数组 我试图使用 Kotlin 显示 Recyclerview 中的每个问题以及新芯片中的每个标签 这些芯片将包含在一个 ChipGroup 中 我的问题是 如何将数组的每个标签元素
  • 如何使用 Unity 在 Android 设备上以各种宽高比显示游戏的相同部分?

    我从 Libgdx 引擎转向 Unity 是一名初级程序员 我尝试在 Unity 中为 Android 和 iOS 设备制作游戏 但在宽高比 分辨率缩放方面遇到问题 在 Libgdx 中 如果您开发了一些东西 您可以指定 默认 分辨率 并且
  • Kotlin自定义get执行方法调用

    为了提高对 SharedPreferences Editor 调用的可读性 我想使用一个 Kotlin 变量 每次需要新的 SharedPreferences Editor 时都会执行 getSharedPreferences edit 最
  • Android Studio 3.2.1 升级后构建错误

    我正在从 Udacity 构建一个示例项目 到目前为止 一切正常 但升级到 Android Studio 3 2 1 后 我遇到了下面的构建错误 摇篮版本 4 6 项目链接 https github com udacity ud851 Su
  • 是否可以将 BitmapDescriptor 转换为 Bitmap?

    我需要将 BitmapDescriptor 转换为 Bitmap 我可以使用以下代码将位图转换为 BitmapDescriptor BitmapDescriptor bd BitmapDescriptorFactory fromBitmap
  • 相机预览越来越长

    我写了一个用于显示相机的代码 以下是我的布局文件的代码
  • 当键盘出现时滚动布局

    当键盘出现并隐藏工具栏 FrameLayout 时 我的屏幕大小调整到顶部 我只需将聊天项目滚动到顶部并将框架布局保持在顶部 我尝试了谷歌和SO的一些例子 但对我没有任何帮助
  • 如何构建 APK 和应用程序动态加载的单独库

    简短的总结是 如何构建 APK 和单独的库 我指的是某种形式的类集 理想情况下也是资源 例如 JAR AAR 或 DEX 文件 但不将这些库包含在应用程序 相反 应用程序在运行时加载它们 Detail 所以我的主要问题是如何构建这样的应用程
  • Android,在连接wifi的情况下与移动数据通信,无需上网

    我有一个汽车配套应用程序 需要与 WiFi 和移动数据网络进行通信 我的车辆控制单元提供了一个无需互联网访问的 WiFi 网络 它公开了我们可以从应用程序调用的 API 服务 除此之外 我们还需要使用手机移动数据 3G 4G 与另一个可通过
  • RecyclerView:禁用焦点变化引起的滚动

    TL DR我有一个RecyclerView of EditTexts 当用户注意力集中时EditText 1并点击EditText 2 我想EditText 2获得焦点 但我不想要ReyclerView滚动 我怎样才能实现这个目标 我正在尝
  • 多次调用 startService 时实际会发生什么

    我正在打电话startService 多次对同一服务有不同的意图 很明显 任何时候都只存在一个服务实例startCommand 被称为每个startService 我的问题是 调用时有性能影响吗startService 多次 意图会按照调用
  • 应用程序启动时显示徽标几秒钟

    我想在应用程序启动并且菜单可见之前显示徽标几秒钟 当它消失时我也想使用一些 我应该创建一个新活动吗 我可以在布局中设置它吗 为包含您的徽标的初始屏幕定义一个布局 然后将此代码添加到您的活动中 public void onCreate Bun
  • 如何在 EditText 中用逗号分隔数字

    我有一个 EditText 其 inputType 为number 当用户打字时 我想用逗号分隔数字 这是一个小例子 123 将表示为 123 1234 将表示为 1 234 12345 将表示为 12 345 等等 我尝试使用 TextW
  • 当应用程序打开时,应用程序未显示接收 FCM 的通知

    当我从 Firebase 发送推送时 如果应用程序在后台或已关闭 我会收到通知 但当应用程序打开时不会 调试我发现它在 MyMessagingService 中特别是在 onMessageReceived 处停止 所以我猜我的问题在于生成通
  • 来自 Janino 和 Commons-Compiler 的 Spark java.lang.NoSuchMethodError

    我正在构建一个使用 Spark 进行基于随机森林分类的 应用程序 当尝试运行该程序时 我从该行收到异常 StringIndexerModel labelIndexer new StringIndexer setInputCol label
  • Android API 8、10 ContactsContract.Data.HAS_PHONE_NUMBER 没有这样的列

    以下查询在我的设备上运行良好 API 15 它在我运行 API 8 或 API 10 的模拟器中不起作用 这是查询 Cursor contactsCur getContentResolver query ContactsContract D

随机推荐

  • 如何通过服务器端node.js运行CCapture?

    我试着跑CCapture js https github com spite ccapture js via node js基本代码 用于测试 为 global navigator userAgent node js global wind
  • .gitignore 中 a/ 和 a/* 和 a/** 之间的区别?

    这是我的文件夹 a b b1 txt b2 txt a1 txt a2 txt gitignore Firstly 我发现如果我想忽略文件夹 a a and a and a 都可以完成 第二 我想忽略文件夹中的所有内容a除了文件夹b 唯一的
  • Android BLE 扫描与 UUID 过滤器列表混淆

    我正在 Android 移动设备 A 上执行 UUID 过滤扫描 并且有两个测试用例 一个人在另一台 Android 设备 移动设备 b 上使用名为 BLE Scanner 的应用程序来创建具有两个测试服务 每个服务都有自己唯一的 UUID
  • 添加 for 循环可防止 OutOfMemoryError

    当我删除 for 循环时 我得到一个OutOfMemoryError 当我使用 for 循环时 我没有收到任何错误 谁能帮助我理解这种行为 public class JavaMemoryPuzzlePolite private final
  • yii2 拒绝用户登录后端

    我有 yii2 高级模板 应用了 RBAC 迁移 我试图学习 RBAC 并遵循Docs 2 0 http www yiiframework com doc 2 0 guide security authorization html 我是用数
  • Roslyn 加载项目文档失败

    在 Visual Studio Extension VSIX 解决方案中 我使用 Roslyn 从当前解决方案加载特定项目 Project myProject this CurrentComponentModel GetService
  • 如何安装knife-ec2插件?

    OSX 10 9 2 ruby v ruby 2 0 0p247 2013 06 27 revision 41674 universal x86 64 darwin13 knife v Chef 11 10 4 当我跑步时 knife ec
  • 在 Springfox 和 Spring MVC 中配置安全模式和上下文

    我有使用 Spring MVC 实现的简单 REST 服务 我决定用 Springfox 和 Swagger 2 0 来描述它们 一切似乎都很好 直到我开始添加安全模式和上下文 我对某些端点使用 HTTP 基本身份验证 对其他端点使用基于令
  • Python:从字符串中打印特定字符

    如何在Python中打印字符串中的特定字符 我仍在学习 现在正在尝试制作一个类似刽子手的程序 这个想法是 用户输入一个字符 如果它在单词中 则该单词将被打印 所有未发现的字母都为 我并不是在寻求一种方法来使我的整个项目的想法 代码变得更好
  • 在数据框中对因子进行数字重新排序

    我有从 0 到 39 的因数 现在它们的排序方式如下 gt levels items label 1 0 1 10 11 12 13 14 15 16 17 18 19 13 2 20 21 22 23 24 25 26 27 28 29
  • 根据(多个)条件分成组?

    我有一组不同颜色和重量的弹珠 我想根据它们的重量和颜色将它们分成几组 条件是 一组重量不能超过 100 个单位 一组中不同颜色的弹珠不得超过 5 个 一个可重现的例子 marbles lt data frame color sample 1
  • 我可以同时变基和压缩提交吗?

    当我对之前几次提交的更改进行修复时 我总是会连续运行两次 rebase 是否可以一步完成此工作流程 假设我有 4 个新提交 master D C B A Base 我在 B 中发现了一个错误 所以我创建了一个分支并修复它 master D
  • 我可以访问 iPhone 上的钥匙串吗?

    这个问题讨论 iPhone 上的数据加密 https stackoverflow com questions 189925 password encryption in iphone apps使用 crypt 函数 作为替代方案 iPhon
  • 按元组成员映射元组列表

    假设我有一个列表decimal decimal let tup 1M 2M 2M 3M 3M 3M 4M 5M 5M 6M 7M 6M 8M 9M 10M 9M 我需要一个函数 如果可以连接的话 可以将所有值分组在一起 例如 map 100
  • 如何选择 jq 中作为变量提供的键的值?

    如果这是输入 a key 2 another key 100 one more key 4 2 通过提供键的名称作为变量来选择这些键的值的最佳方法是什么 理想情况下 我正在寻找类似的东西 a key as key key 但这会导致语法错误
  • 片段和活动之间的核心区别是什么?哪些代码可以写成fragment?

    我有三个选项卡 每个选项卡三个片段和一个主要活动 我想创建套接字以通过 wifi 网络发送消息 那么我应该在哪里编写代码呢 在那个特定的片段类或主要活动中 当然 您可以在片段中编写任何代码 但您需要注意一些事情 在访问需要上下文的任何内容或
  • 如何为目标计数器设置计数器

    在分页媒体中 CSS 属性target counters http www w3 org TR css3 gcpm the target counter and target counters v可用于包含多个计数器 该规范给出了以下示例
  • Webpack ProvidePlugin 全局变量(找不到模块)

    我对 Webpack 还很陌生 但不明白为什么我的 ProvidePlugin 调用没有按预期工作 我有以下文件 App js var App function getSomething function size module expor
  • 输入二进制而不是十六进制[重复]

    这个问题在这里已经有答案了 可能的重复 我可以在 C 或 C 中使用二进制文字吗 https stackoverflow com questions 2611764 can i use a binary literal in c or c
  • Gradle 和多项目结构

    我试图了解应该如何进行以下项目设置 Top Android Project Project 1 Pure Java Modules Module A1 Module B1 Module Z1 Project 2 Android Librar