apply plugin: ‘java’
apply plugin: ‘idea’
apply plugin: ‘io.spring.dependency-management’
// 编译相关参数
compileJava {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
options.encoding = ‘UTF-8’
options.compilerArgs = [
‘-Xlint:all’, ‘-Xlint:-processing’
]
}
// Copy LICENSE
tasks.withType(Jar) {
from(project.rootDir) {
include ‘LICENSE’
into ‘META-INF’
}
}
// 生成jar文件时,MANIFEST.MF的内容如下
jar {
manifest {
attributes(
‘Created-By’: “ S y s t e m . p r o p e r t i e s [ ′ j a v a . v e r s i o n ′ ] ( {System.properties['java.version']} ( System.properties[′java.version′]({System.properties[‘java.vendor’]} ${System.properties[‘java.vm.version’]})”.toString(),
‘Built-By’: ‘travis’,
‘Build-Date’: buildDate,
‘Build-Time’: buildTime,
‘Built-OS’: “${System.properties[‘os.name’]}”,
‘Specification-Title’: project.name,
‘Specification-Version’: project.version,
‘Specification-Vendor’: ‘Will Zhao’,
‘Implementation-Title’: project.name,
‘Implementation-Version’: project.version,
‘Implementation-Vendor’: ‘Will Zhao’
)
}
}
// 仓库
repositories {
// 本地
mavenLocal()
// 如果有私服就在此配置,如果没有请注释掉
maven {
url ‘http://192.168.50.43:8081/repository/aliyun-proxy/’
}
// 阿里云
maven {
url ‘http://maven.aliyun.com/nexus/content/groups/public/’
}
// 中央仓库
mavenCentral()
// grandle插件
maven {
url “https://plugins.gradle.org/m2/”
}
}
}
// 类似maven的dependencyManagement,这里将所有jar的版本指定好,子模块在依赖时可以不用指定版本
allprojects { project ->
buildscript {
dependencyManagement {
imports {
mavenBom “org.springframework.boot:spring-boot-starter-parent:${springBootVersion}”
mavenBom “org.junit:junit-bom:5.7.0”
}
dependencies {
dependency ‘org.projectlombok:lombok:1.16.16’
dependency ‘org.apache.commons:commons-lang3:3.11’
dependency ‘commons-collections:commons-collections:3.2.2’
dependency ‘net.devh:grpc-server-spring-boot-starter:2.11.0.RELEASE’
}
}
}
}
- 上述配置中,我使用了自己在局域网搭建的nexus3服务器作为私服,目的是缓存jar库,局域网内的速度还是要比阿里云快一些的,如果您没有搭建此类私服,将此配置删除即可(我这里是http://192.168.50.43:8081/repository/aliyun-proxy/);
- 现在父工程已经设置完成,可以添加子模块了;
新增二方库子模块
-
二方库是常用功能,A系统调用B系统服务时,通常要求B系统提供二方库,里面包含了数据结构和接口定义,这样双方的数据结构和接口都能对齐了,因此咱们来创建一个二方库子模块,里面包含了数据结构和接口;
-
新增Module:
- 新增module时,依旧是选中Gradle、JDK1.8、Java:
- 模块名为democlient:
- 新增的模块内也有build.gradle文件,将里面内容清空后写为以下内容:
// 构建二方库的插件
plugins {
id ‘java-library’
}
// 这里可以指定构建出来的jar的文件名
archivesBaseName = ‘demo-client’
// 子模块自己的依赖
dependencies {
// 使用api,将依赖传递给使用democlient的模块
api ‘org.projectlombok:lombok’
// annotationProcessor不会传递,使用了lombok生成代码的模块,需要自己声明annotationProcessor
annotationProcessor ‘org.projectlombok:lombok’
}
- 给democlient模块增加一个类,其他模块会用到此类:
package com.bolingcavalry.dto;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
@Builder
public class Student {
String name;
int age;
}
- democlient模块编码完成了,试试构建任务,操作如下图:
- 构建完成后生成下图红框中的jar文件:
- 用解压工具解开上图红框中的文件,除了预料之中的class文件,再来检查META-INF/MANIFEST.MF,如下图所示,是咱们在前面的gradle脚本中定制的内容:
新增SpringBoot应用模块
接下来要创建的是一个SpringBoot应用,并且使用了democlient模块中的Student类;
- 新建Gradle模块:
- 基本信息如下:
- 新模块的build.gradle内容如下,有几处要注意的地方稍后会讲到:
plugins {
id ‘org.springframework.boot’
}
// 用了插件org.springframework.boot之后,jar task会失效,可用bootJar取代
bootJar {
archiveBaseName = project.name
archiveVersion = project.version
manifest {
attributes(
‘Created-By’: “ S y s t e m . p r o p e r t i e s [ ′ j a v a . v e r s i o n ′ ] ( {System.properties['java.version']} ( System.properties[′java.version′]({System.properties[‘java.vendor’]} ${System.properties[‘java.vm.version’]})”.toString(),
‘Built-By’: ‘travis’,
‘Build-Date’: buildDate,
‘Build-Time’: buildTime,
‘Built-OS’: “${System.properties[‘os.name’]}”,
‘Specification-Title’: project.name,
‘Specification-Version’: projectVersion,
‘Specification-Vendor’: ‘Will Zhao’,
‘Implementation-Title’: project.name,
‘Implementation-Version’: projectVersion,
‘Implementation-Vendor’: ‘Will Zhao’
)
}
}
tasks.withType(JavaCompile) {
options.encoding = “UTF-8”
}
// 子模块自己的依赖
dependencies {
implementation ‘org.springframework.boot:spring-boot-starter-web’
// 二方库依赖
implementation project(‘:democlient’)
// annotationProcessor不会传递,使用了lombok生成代码的模块,需要自己声明annotationProcessor
annotationProcessor ‘org.projectlombok:lombok’
}
test {
useJUnitPlatform()
}
- 上述脚本中需要有以下四点需要注意:
a. 要使用springboot的插件org.springframework.boot,此处无需指定版本,因为根模块中已通过mavenBom导入了版本依赖关系;
b. jar{…}的配置会失效,如果想设置jar的一些信息,如文件名、manifest等,要使用bootJar配置;
c. 依赖了democlient模块,这是典型的二方库开发和使用方式;
d. 稍后的java代码中会实例化Student对象,此时用到lombok生成的代码,因此要用annotationProcessor依赖lombok库,否则编译会出问题;
- 最后新建一个启动类DemoApplication,用于验证springboot应用能否正常启动,代码中有使用Student类,这是为了验证使用二方库是否正常:
package com.bolingcavalry;
import com.bolingcavalry.dto.Student;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@SpringBootApplication
@RestController
public class DemoApplication {
@RequestMapping(value = “/hello”, method = RequestMethod.GET)
public String hello() {
return "Hello "
-
new Date()
-
“–”
-
new Student(“Tom”, 11);
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 运行应用试试,操作如下图红框:
- 符合预期:
- 再验证打包成jar是否正常,先停掉前面启动的应用,然后操作如下图红框:
- 已生成jar文件:
- 在jar文件所在目录执行命令java -jar webapp-1.0-SNAPSHOT.jar,启动应用正常:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后总结
ActiveMQ+Kafka+RabbitMQ学习笔记PDF
关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
图片转存中…(img-T32Ttb2G-1713380920030)]
[外链图片转存中…(img-rbwScciy-1713380920030)]
[外链图片转存中…(img-74vYzxXu-1713380920030)]
[外链图片转存中…(img-R2weE6G6-1713380920031)]
关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!