gradle构建多模块项目_Gradle入门:创建多项目构建
gradle構建多模塊項目
盡管我們可以僅使用一個模塊來創建一個運行中的應用程序,但有時將我們的應用程序劃分為多個較小的模塊是比較明智??的。
因為這是一個相當普遍的用例,所以每個自重的構建工具都必須支持它,Gradle也不例外。 如果Gradle項目具有多個模塊,則稱為多項目構建。
這篇博客文章描述了如何使用Gradle創建多項目構建。
讓我們開始看看Gradle構建的需求。
補充閱讀:
如果您不熟悉Gradle, 則應先閱讀以下博客文章,然后再繼續閱讀此博客文章:
- Gradle入門:簡介可幫助您安裝Gradle,描述Gradle構建的基本概念,并描述如何使用Gradle插件向構建中添加功能。
- Gradle入門:我們的第一個Java項目描述了如何使用Gradle創建Java項目并將應用程序打包到可執行jar文件中。
- Gradle入門:依賴性管理介紹了如何管理Gradle項目的依賴性。
我們的Gradle構建要求
我們的示例應用程序具有兩個模塊:
- 核心模塊包含我們應用程序的其他模塊所使用的通用組件。 在我們的例子中,它僅包含一個類: MessageService類返回字符串“ Hello World!”。 該模塊只有一個依賴性:它具有一個使用Junit 4.11的單元測試。
- app模塊包含HelloWorld類,該類啟動我們的應用程序,從MessageService對象獲取消息,并將接收到的消息寫入日志文件。 該模塊具有兩個依賴性:它需要核心模塊,并使用Log4j 1.2.17作為日志記錄庫。
我們的Gradle版本還具有其他兩個要求:
- 我們必須能夠使用Gradle運行我們的應用程序。
- 我們必須能夠創建不使用所謂的“胖罐”方法的可運行二進制分發。
如果您不知道如何使用Gradle運行應用程序并創建可運行的二進制發行版,
您應先閱讀以下博客文章,然后再繼續閱讀此博客文章:
- Gradle入門:創建二進制分發
讓我們繼續前進,了解如何創建滿足我們要求的多項目構建。
創建多項目構建
我們的下一步是創建一個包含兩個子項目的多項目Gradle構建: app和core 。 讓我們從創建Gradle構建的目錄結構開始。
創建目錄結構
因為核心和應用程序模塊使用Java,所以它們都使用Java項目的默認項目布局 。 我們可以按照以下步驟創建正確的目錄結構:
- src / main / java目錄包含核心模塊的源代碼。
- src / test / java目錄包含核心模塊的單元測試。
- src / main / java目錄包含應用程序模塊的源代碼。
- src / main / resources目錄包含應用程序模塊的資源。
現在,我們已經創建了所需的目錄。 下一步是配置Gradle構建。 讓我們從配置多項目構建中包含的項目開始。
配置我們的多項目構建中包含的項目
通過執行以下步驟,我們可以配置包含在多項目構建中的項目:
我們的settings.gradle文件如下所示:
include 'app' include 'core'補充閱讀:
- Gradle用戶指南:56.2設置文件
- Gradle DSL參考:設置
讓我們繼續并配置核心項目。
配置核心項目
我們可以按照以下步驟配置核心項目:
核心項目的build.gradle文件如下所示:
apply plugin: 'java'repositories {mavenCentral() }dependencies {testCompile 'junit:junit:4.11' }補充閱讀:
- Gradle入門:我們的第一個Java項目
- Gradle入門:依賴管理
讓我們繼續并配置應用程序項目。
配置應用程序項目
在配置應用程序項目之前,我們必須快速瀏覽屬于同一多項目構建的此類依賴項的依賴項管理。 這些依賴關系稱為項目依賴關系。
如果我們的多項目構建具有項目A和B,并且項目B的編譯需要項目A,則可以通過將以下依賴項聲明添加到項目B的build.gradle文件中來配置此依賴項:
dependencies {compile project(':A') }補充閱讀:
- Gradle用戶指南:51.4.3。 項目依賴
- Gradle用戶指南:57.7。 項目庫依賴項
現在,我們可以按照以下步驟配置應用程序項目:
- Log4j(版本1.2.17)
- 核心模塊
該應用程序項目的build.gradle文件如下所示:
apply plugin: 'application' apply plugin: 'java'repositories {mavenCentral() }dependencies {compile 'log4j:log4j:1.2.17'compile project(':core') }mainClassName = 'net.petrikainulainen.gradle.client.HelloWorld'task copyLicense {outputs.file new File("$buildDir/LICENSE")doLast {copy {from "LICENSE"into "$buildDir"}} }applicationDistribution.from(copyLicense) {into "" }補充閱讀:
- Gradle入門:創建二進制分發
讓我們繼續并刪除從核心和應用程序項目的構建腳本中找到的重復配置。
刪除重復的配置
當我們配置多項目構建的子項目時,我們向核心和應用項目的構建腳本添加了重復的配置:
- 因為兩個項目都是Java項目,所以它們都應用Java插件。
- 這兩個項目都使用中央Maven 2存儲庫。
換句話說,兩個構建腳本都包含以下配置:
apply plugin: 'java'repositories {mavenCentral() }讓我們將此配置移到我們的根項目的build.gradle文件中。 在執行此操作之前,我們必須學習如何在根項目的build.gradle文件中配置子項目。
如果要將配置添加到名為core的單個子項目中,則必須將以下代碼段添加到根項目的build.gradle文件中:
project(':core') {//Add core specific configuration here }換句話說,如果要將重復的配置移到根項目的構建腳本中,則必須將以下配置添加到其build.gradle文件中:
project(':app') {apply plugin: 'java'repositories {mavenCentral()} }project(':core') {apply plugin: 'java'repositories {mavenCentral()} }這并沒有真正改變我們的處境。 我們的構建腳本中仍然有重復的配置。 唯一的區別是,現在可以從根項目的build.gradle文件中找到重復的配置。 讓我們消除這種重復的配置。
如果要將通用配置添加到根項目的子項目中,則必須將以下代碼段添加到根項目的build.gradle文件中:
subprojects {//Add common configuration here }從根項目的build.gradle文件中刪除重復的配置后,其外觀如下:
subprojects {apply plugin: 'java'repositories {mavenCentral()} } 如果我們擁有多項目構建中所有項目共享的配置,則應將以下代碼段添加到
我們的根項目的build.gradle文件:
補充閱讀:
- Gradle用戶指南:57.1跨項目配置
- Gradle用戶指南:57.2子項目配置
現在,我們可以從子項目的構建腳本中刪除重復的配置。 我們的子項目的新構建腳本如下所示:
core / build.gradle文件如下所示:
dependencies {testCompile 'junit:junit:4.11' }app / build.gradle文件如下所示:
apply plugin: 'application'dependencies {compile 'log4j:log4j:1.2.17'compile project(':core') }mainClassName = 'net.petrikainulainen.gradle.client.HelloWorld'task copyLicense {outputs.file new File("$buildDir/LICENSE")doLast {copy {from "LICENSE"into "$buildDir"}} }applicationDistribution.from(copyLicense) {into "" }現在,我們已經創建了一個多項目Gradle構建。 讓我們找出我們剛剛做了什么。
我們只是做什么?
當我們在多項目構建的根目錄中運行命令gradle projects時,我們看到以下輸出:
> gradle projects :projects------------------------------------------------------------ Root project ------------------------------------------------------------Root project 'multi-project-build' +--- Project ':app' \--- Project ':core'To see a list of the tasks of a project, run gradle <project-path>:tasks For example, try running gradle :app:tasksBUILD SUCCESSFUL如我們所見,此命令列出了根項目的子項目( app和core )。 這意味著我們剛剛創建了一個具有兩個子項目的多項目Gradle構建。
當在多項目構建的根目錄中運行命令gradle任務時,我們看到以下輸出(下面僅顯示了相關部分):
> gradle tasks :tasks------------------------------------------------------------ All tasks runnable from root project ------------------------------------------------------------Application tasks ----------------- distTar - Bundles the project as a JVM application with libs and OS specific scripts. distZip - Bundles the project as a JVM application with libs and OS specific scripts. installApp -Installs the project as a JVM application along with libs and OS specific scripts run - Runs this project as a JVM application如我們所見,我們可以使用Gradle運行應用程序,并創建一個不使用所謂的“胖罐”方法的二進制發行版。 這意味著我們已經滿足了Gradle構建的所有要求。
附加信息:
- Gradle用戶指南:11.6。 獲取有關構建的信息
讓我們繼續前進,找出從這篇博客文章中學到的知識。
摘要
這篇博客文章教會了我們三件事:
- 多項目構建必須在根項目的根目錄中具有settings.gradle文件,因為它指定了多項目構建中包含的項目。
- 如果必須在多項目構建的所有項目中添加通用配置或行為,則應將此配置(使用allprojects )添加到根項目的build.gradle文件中。
- 如果必須在根項目的子項目中添加通用配置或行為,則應將此配置(使用subprojects )添加到根項目的build.gradle文件中。
PS:您可以從Github獲得此博客文章的示例應用程序 。
翻譯自: https://www.javacodegeeks.com/2015/01/getting-started-with-gradle-creating-a-multi-project-build.html
gradle構建多模塊項目
總結
以上是生活随笔為你收集整理的gradle构建多模块项目_Gradle入门:创建多项目构建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux远程服务器文件拷贝到本地(li
- 下一篇: jmeter测试客户端_如何在JMete