目录
- 准备工作
- 项目结构
- 构建步骤
- 发布部署
- 附言
1. 准备工作
安装Gradle
安装JDK
安装git for windows
说明:由于本人在unix系统下工作,所以如果你是windows系统,需要安装git for windows,然后使用git bash执行命令,安装工作如果遇到困难,你可以请参考官网指导
2. 项目结构
3. 构建步骤
3.1. 创建项目
- 创建项目文件夹 jc-gradle-multiple-demo
- 进入项目文件夹, 执行命令: gradle init
- 依次选择/输入
2: library
3: Java
1: Groovy
1: Junit 4
jc-gradle-multiple-demo (此处你可以输入你想要的项目名)
jc.gmd (此处你可以输入你想要的包名)
- 不同版本的Gradle 可能略有差异,此处演示采用的是Gradle 5.5.1,如果想了解更多的细节,可以查阅官网指南
- 采用相同的方法在 jc-gradle-multiple-demo 下依次创建: demo-common, demo-db, demo-webservice, 不出意外,你的目录相关应该会如项目结构所示
3.2. 修改 build.gradle 和 settings.gradle
- 清空 demo-common, demo-db, demo-webservice 目录下的 settings.gradle 和 build.gradle
Tips:如果你的机器支持bash命令,可以像这样清空文件内容: echo "" > build.gradle
- 修改 jc-gradle-multiple-demo 目录下的 settings.gradle 如下:
rootProject.name = 'jc-gradle-multiple-demo'
include 'demo-common', 'demo-db', 'demo-webservice'
- 修改 jc-gradle-multiple-demo 目录下的 build.gradle 如下:
plugins {
id 'org.springframework.boot' version '2.2.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
id 'eclipse'
id 'application'
}
allprojects {
apply plugin: 'java'
group = 'jc.gradle.demo'
version = '1.0.0.RELEASE'
repositories {
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/" }
maven { url 'http://repo.spring.io/milestone' }
maven { url 'https://jitpack.io' }
mavenCentral()
}
dependencies {
testImplementation 'junit:junit:4.12'
}
//此处需要修改编译的JDK版本,如:1.8
sourceCompatibility = 12
targetCompatibility = 12
}
subprojects {
}
project(':demo-common') {
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.2.2.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-freemarker', version: '2.2.2.RELEASE'
}
}
project(':demo-db'){
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.2.2.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-freemarker', version: '2.2.2.RELEASE'
compile project(':demo-common')
//如果需要使用数据库,可以在此处添加数据库依赖,以下是Mybatis和Mysql的相关依赖
//compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '2.0.0'
//compile group: 'org.mybatis.generator', name: 'mybatis-generator-core', version: '1.3.1'
//compile group: 'com.alibaba', name: 'druid', version: '0.2'
//compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.44'
//JC的工具类依赖包
compile 'com.github.zerochen2016:jc-common:1.0.0.RELEASE1'
}
//如果采用了Mybatis,此处可以添加如下Groovy段,用于将xml打进jar包
//processResources {
//from('src/main/java') {
// include '**/*.xml'
//}
//}
}
project(':demo-webservice') {
dependencies {
compile project(':demo-db')
}
jar {
manifest {
attributes 'Main-Class': 'jc.gmd.WSApplication'
}
}
application {
mainClassName = 'jc.gmd.ws.WSApplication'
}
}
- 修改 demo-webservice 目录下的 build.gradle 如下:
apply plugin: 'io.spring.dependency-management'
apply plugin: 'eclipse'
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'application'
mainClassName = 'jc.gmd.ws.WSApplication'
sourceCompatibility = 12
repositories {
maven{
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/" }
maven { url 'http://repo.spring.io/milestone' }
maven { url 'https://jitpack.io' }
mavenCentral()
}
buildscript {
repositories {
maven{
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
mavenCentral()
}
dependencies {
classpath 'io.spring.gradle:dependency-management-plugin:1.0.8.RELEASE'
classpath("org.springframework.boot:spring-boot-gradle-plugin:2.2.2.RELEASE")
}
}
- 在 jc-gradle-multiple-demo/demo-webservice/src/main/java/jc/gmd/ws 目录下构建类 WSApplication.java 和TestController.java 分别如下 WSApplication.java
package jc.gmd.ws;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan(basePackages = {
"jc"
})
@EnableScheduling
@EnableAsync
public class WSApplication {
public static void main(String[] args) {
SpringApplication.run(WSApplication.class, args);
}
}
TestController.java
package jc.gmd.ws;
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import jc.common.util.GsonExtension;
@RestController
@RequestMapping("/test")
public class TestController {
@RequestMapping("/api")
public String api() {
Map<String, Object> result = new HashMap<>();
result.put("request success:", true);
result.put("method from demo-common:", new jc.gmd.common.Library().someLibraryMethod());
result.put("method from demo-db:", new jc.gmd.db.Library().someLibraryMethod());
result.put("method from demo-webservice:", new jc.gmd.ws.Library().someLibraryMethod());
return GsonExtension.GsonString(result);
}
}
4. 发布部署
- 在 jc-gradle-multiple-demo 目录下执行:
gradle build
, 然后你会看到根目录和子目录出现相应的build目录 - 进入 demo-webservice/build/libs/ 目录,你会看到 demo-webservice-1.0.0.RELEASE.jar
- 你可以在任意安装有jdk的机器运行jar包
Tips: linux后台运行jar包命令nohup java -jar demo-webservice-1.0.0.RELEASE.jar &
访问:http://IP:8080/test/api
如本地部署访问:http://localhost:8080/test/api
如果你看到返回结果:
{ "request success:": true, "method from demo-common:": true, "method from demo-db:": true, "method from demo-webservice:": true }
表示一切正常
附言
- 转载请注明出处
- 本文的代码,已上传至 https://github.com/zerochen2016/jc-gradle-multiple-demo
- 如果你想了解更多的细节,可以访问SpringBoot官网或者Gradle官网
- 有任何问题和建议,欢迎在github给我提issues或者联系我
- 我的github账号 zerochen2016
- 我的知乎账号 JC-木离