1.pravega用gradle多子项目方式进行编译。本文实现一个极简demo以便理解。
2.root project是MultiSubProject。下面有两个子项目,SubProj1和SubProj2。SubProj1定义了一个Book类。SubProj2定义了Store类和Main类,其中Main类是运行入口,其中Store类和Main类import了SubProj1的Book类。
3.项目目录结构
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
├── SubProj1
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── brian
│ │ └── demo
│ │ └── gradle
│ │ └── commen
│ │ └── Book.java
│ └── test
└── SubProj2
├── build.gradle
└── src
└── main
└── java
└── com
└── brian
└── demo
└── gradle
└── comm2
├── Main.java
└── Store.java
4 ./setting.gradle文件内容如下
rootProject.name = 'MultiSubProject'
include 'SubProj1', 'SubProj2'
5 ./build.gradle文件内容如下
group 'com.brian.demo.gradle'
//多 subproject 操作
Closure cl = {task -> println "I'm $task.project.name"}
//包括root project在内的所有projects都有hello task
allprojects{
apply plugin: 'java'
sourceCompatibility = 1.8
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
task hello << cl
}
subprojects{
hello << { println "-I'm subproject"}
}
//子项目的依赖性
project(':SubProj2'){
dependencies {
compile project(':SubProj1')
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
6 Book.java内容如下:
package com.brian.demo.gradle.commen;
public class Book {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Book(String name) {
this.name = name;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
'}';
}
}
7.Store.java文件内容如下:
package com.brian.demo.gradle.comm2;
import com.brian.demo.gradle.commen.Book;
public class Store {
private String name;
private Book book;
public Store(String name, Book book) {
this.name = name;
this.book = book;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
@Override
public String toString() {
return "Store{" +
"name='" + name + '\'' +
", book=" + book +
'}';
}
}
8.Main.java文件内容如下:
package com.brian.demo.gradle.comm2;
import com.brian.demo.gradle.commen.Book;
public class Main {
public static void main(String[] args){
System.out.println("hi");
Book book = new Book("world");
Store store = new Store("aStore", book);
System.out.println(book);
System.out.println(store);
}
}
9 SubProj1/build.gradle文件内容如下:
hello.doLast {println "--I'm subproj1 last"}
10 SubProj2/build.gradle文件内容如下:
hello.doLast {println "--I'm subproj2 last"}
11 运行 ./gradlew build即可编译运行