gradle-学习笔记(2)-多项目构建

42次阅读

共计 3475 个字符,预计需要花费 9 分钟才能阅读完成。

记得在 maven 中支持多个子项目的构建方法, 同样的在 gradle 中也会支持多项目的构建方法
还记得在 maven 中如何配置多项目工程吗, 这里回忆一下
首先我们需要一个父元素 pom 文件比如这样
<?xml version=”1.0″ encoding=”UTF-8″?>
<project xmlns=”http://maven.apache.org/POM/4.0.0″
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>

<groupId>com.kyssion</groupId>
<artifactId>maven-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
</project>
而在 gradle 中, 我们并不需要指定父元素的标签, 我们只需要编写好对应的文件夹名称,并且将文件夹名称和对应的目录结构对应清,gradle 就能自动的识别这个子项目
比如我创建这样一个子项目名称是 greeting-library
子项目中的配置未见 build.gradle
plugins {
id ‘groovy’
}

group ‘com.kyssion’
version ‘1.0-SNAPSHOT’

repositories {
mavenCentral()
}

dependencies {
compile ‘org.codehaus.groovy:groovy-all:2.5.6’
testCompile group: ‘junit’, name: ‘junit’, version: ‘4.12’
}
父项目中的 setting.gradle 中添加这样一条配置
include ‘greeting-library’
这样就能使用 greeting-library 目录下的 gradle 子项目了
一个简单的项目
这使用一个简单的项目介绍一下这个如何使用 gradle 实现整合打包
项目结构和模块划分
├── build.gradle
├── greeter
│   ├── build
│   │   ├── classes
│   │   │   └── java
│   │   │   └── main
│   │   │   └── greeter
│   │   │   └── Greeter.class
│   │   ├── distributions
│   │   │   ├── greeter-1.0-SNAPSHOT.tar
│   │   │   └── greeter-1.0-SNAPSHOT.zip
│   │   ├── generated
│   │   │   └── sources
│   │   │   └── annotationProcessor
│   │   │   └── java
│   │   │   └── main
│   │   ├── libs
│   │   │   └── greeter-1.0-SNAPSHOT.jar
│   │   ├── scripts
│   │   │   ├── greeter
│   │   │   └── greeter.bat
│   │   └── tmp
│   │   ├── compileJava
│   │   └── jar
│   │   └── MANIFEST.MF
│   ├── build.gradle
│   └── src
│   ├── main
│   │   ├── java
│   │   │   └── greeter
│   │   │   └── Greeter.java
│   │   └── resources
│   └── test
│   ├── java
│   └── resources
├── greeting-library
│   ├── build
│   │   ├── classes
│   │   │   └── groovy
│   │   │   ├── main
│   │   │   │   └── greeter
│   │   │   │   └── GreetingFormatter.class
│   │   │   └── test
│   │   │   └── greeter
│   │   │   └── GreetingFormatterSpec.class
│   │   ├── generated
│   │   │   └── sources
│   │   │   └── annotationProcessor
│   │   │   └── groovy
│   │   │   ├── main
│   │   │   └── test
│   │   ├── libs
│   │   │   └── greeting-library-1.0-SNAPSHOT.jar
│   │   ├── reports
│   │   │   └── tests
│   │   │   └── test
│   │   │   ├── classes
│   │   │   │   └── greeter.GreetingFormatterSpec.html
│   │   │   ├── css
│   │   │   │   ├── base-style.css
│   │   │   │   └── style.css
│   │   │   ├── index.html
│   │   │   ├── js
│   │   │   │   └── report.js
│   │   │   └── packages
│   │   │   └── greeter.html
│   │   ├── test-results
│   │   │   └── test
│   │   │   ├── binary
│   │   │   │   ├── output.bin
│   │   │   │   ├── output.bin.idx
│   │   │   │   └── results.bin
│   │   │   └── TEST-greeter.GreetingFormatterSpec.xml
│   │   └── tmp
│   │   ├── compileGroovy
│   │   │   └── groovy-java-stubs
│   │   ├── compileTestGroovy
│   │   │   └── groovy-java-stubs
│   │   ├── jar
│   │   │   └── MANIFEST.MF
│   │   └── test
│   │   └── jar_extract_15307722744227685163_tmp
│   ├── build.gradle
│   └── src
│   ├── main
│   │   ├── groovy
│   │   │   └── greeter
│   │   │   └── GreetingFormatter.groovy
│   │   ├── java
│   │   └── resources
│   └── test
│   ├── groovy
│   │   └── greeter
│   │   └── GreetingFormatterSpec.groovy
│   ├── java
│   └── resources
└── settings.gradle
这个项目中划分为根项目 gradle-demo,包项目 greeting-library,core 可运行项目 greeter。
注意:通过上面的例子我们可以得出,在 gradle 中不同的子项目的命名规则是使用文件夹的注意:在 java 项目中,gradle 要求 必须指定项目的 main 函数具体方法见下方
这里针对 gradle 的多语言的编程的目录结构做一下补充,gradle 中源代码同意放置在这样的位置中 src->main/test-> 编程语言名称文件夹 下
plugins {
id ‘java’
id ‘application’
}

group ‘com.kyssion’
version ‘1.0-SNAPSHOT’

sourceCompatibility = 1.8

mainClassName = “greeter.Greeter” // 这一句指定了 main 函数
repositories {
mavenCentral()
}

dependencies {
compile project(‘:greeting-library’)
testCompile group: ‘junit’, name: ‘junit’, version: ‘4.12’
}
总结
在构建 gradle 多模块项目的时候, 一定要注意多模块的之间的引用,模块中 main 函数的编写,父模块的 include

正文完
 0