-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathbuild-common.gradle
262 lines (223 loc) · 9.92 KB
/
build-common.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
///////////////////////////////////////////////////////////////////////////////////////////////
// 配置
///////////////////////////////////////////////////////////////////////////////////////////////
// WEB工程通用配置 (根据组别筛选)
configure(subprojects.findAll { it.PROJECT_GROUP == 'web' }) {
apply plugin: 'java' // JAVA应用(只能用implementation依赖方法)
apply plugin: 'org.springframework.boot' // 文档: https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/gradle-plugin/reference/html/
// jdk version
sourceCompatibility = 1.8
targetCompatibility = 1.8
// encoding
[compileJava, compileTestJava, javadoc]*.options*.encoding = "UTF-8"
test {
// For JUnit5: Avoid IDEA reporting "No tests found for given includes" error when executing tests individually
// NOTICE: All subprojects configured with 'useJUnitPlatform()' must depend on Junit5! (Avoid error "Cannot create Launcher without at least one TestEngine")
useJUnitPlatform()
}
// config of bootJar
bootJar {
// main class
mainClass = main_class // 配在web/*/gradle.properties里
// 可选: 生成一个Unix可执行文件(在jar包头部有shell脚本), 文档: https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/html/deployment-install.html
//launchScript {
//properties 'logFilename': 'example-app.log'
//}
}
// WEB工程通用依赖
dependencies {
// // Import BOMs
implementation platform("com.github.shepherdviolet.glacimon:glacimon-bom:$version_glacimon")
// implementation platform(project(':my-bom')) // Project BOM
// implementation enforcedPlatform("com.github.shepherdviolet.glacimon:glacimon-bom:$version_glacimon") // 强制覆盖手动依赖的版本
// Common dependencies
testImplementation "org.springframework.boot:spring-boot-starter-test:$version_spring_boot" // NOTICE: All subprojects configured with 'useJUnitPlatform()' must depend on Junit5! (Avoid error "Cannot create Launcher without at least one TestEngine")
}
}
// 库工程通用配置 (根据组别筛选)
configure(subprojects.findAll { it.PROJECT_GROUP in ['module'] }) {
apply plugin: 'java-library' // JAVA库(能用implementation和api依赖方法)
// jdk version
sourceCompatibility = 1.8
targetCompatibility = 1.8
// encoding
[compileJava, compileTestJava, javadoc]*.options*.encoding = "UTF-8"
test {
// For JUnit5: Avoid IDEA reporting "No tests found for given includes" error when executing tests individually
// NOTICE: All subprojects configured with 'useJUnitPlatform()' must depend on Junit5! (Avoid error "Cannot create Launcher without at least one TestEngine")
useJUnitPlatform()
}
// 库工程通用依赖
dependencies {
// // Import BOMs
api platform("com.github.shepherdviolet.glacimon:glacimon-bom:$version_glacimon")
// api platform(project(':my-bom')) // Project BOM
// api enforcedPlatform("com.github.shepherdviolet.glacimon:glacimon-bom:$version_glacimon") // 强制覆盖手动依赖的版本
// Common dependencies
testImplementation "org.springframework.boot:spring-boot-starter-test:$version_spring_boot" // NOTICE: All subprojects configured with 'useJUnitPlatform()' must depend on Junit5! (Avoid error "Cannot create Launcher without at least one TestEngine")
}
}
// 所有工程通用配置(包括Root工程)
allprojects {
configurations.all {
// 全局排除依赖 (解决安全问题)
exclude group: 'org.apache.logging.log4j' //排除log4j依赖: 存在一堆漏洞, 例如 TB-2021-0134
// 全局指定依赖版本 (解决安全问题)
resolutionStrategy {
force "com.alibaba:fastjson:$version_fastjson" //Fix security issue
force "org.yaml:snakeyaml:$version_snakeyaml" //Fix security issue
// 全局指定某个group的依赖版本
eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'org.springframework') { details.useVersion "$version_spring" } //Fix security issue
}
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
// 示例
///////////////////////////////////////////////////////////////////////////////////////////////
// 示例: 所有工程通用配置(包括Root工程)
//allprojects {
//
// // 示例: 如果子工程的gradle.properties里配了参数"flag", 就执行
// if (project.hasProperty("flag")) {
// ...
// }
//
//}
// 示例: 所有子工程通用配置
//subprojects {
//
//}
// 示例: 部分工程通用配置: 名称筛选
//configure(subprojects.findAll { it.name.startsWith('prefix-') }) {
//
//}
/*
* 示例: 加速
*/
//subprojects {
//
// // 示例: 测试案例随机并发跑(对大工程有益)
// tasks.withType(Test) {
// maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
// // 慎用: 当测试案例非常多而且非常繁重时启用, 每X个测试Fork一个VM出来(注意这个值不可以设置太小, Fork开销很大)
// //forkEvery = 100
// // 可选: 关闭测试报告
// //reports.html.enabled = false
// //reports.junitXml.enabled = false
// }
//
// // 示例: 编译进程Fork(对大工程有益)
// tasks.withType(JavaCompile) {
// options.fork = true
// }
//}
/*
* 示例: 不打包成可执行的fatJar, 打包成一堆原始jar包.
*
* org.springframework.boot插件在识别到有jar任务时, 默认会禁用它, 即不生成工程原始的jar包, 会生成一个可执行的fatJar.
* 通过禁用bootJar, 启用jar, 自定义依赖复制和压缩任务, 可以实现将工程打包成一堆原始jar包+脚本的压缩包.
*
* 参考文档: https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/gradle-plugin/reference/html/
*/
//configure(subprojects.findAll { it.PROJECT_GROUP == 'web' }) {
//
// //插件引入和基本配置这里省略了, 请自行加上
//
// // 启用jar任务
// jar {
// enabled = true
// version project_version
// manifest {
// attributes "Manifest-Version": 1.0, 'Main-Class': main_class // 配在web/*/gradle.properties里
// }
// }
//
// // 禁用bootJar任务
// bootJar {
// enabled = false
// }
//
// // 简单示例: 打包:build时把依赖复制到指定目录下, 如果用这种多jar包的方式, 依赖可以用implementation
// //task copyLibs(type: Copy) {
// //from configurations.runtime
// //into 'build/libs'
// //}
// //build.dependsOn copyLibs
//
// // 高级示例: 打包:将工程jar包/依赖jar包/启动脚本集合打包成一个ZIP
// task cleanTmp(type: Delete, group: 'assembly', dependsOn: build) {
// delete 'build/assembly/tmp/'
// }
// task copyLib(type: Copy, group: 'assembly', dependsOn: cleanTmp) {
// from 'build/libs'
// into "build/assembly/tmp/$project.name/lib"
// }
// task copyLibs(type: Copy, group: 'assembly', dependsOn: cleanTmp) {
// // 新版本Gradle用runtimeClasspath(老版本用runtime?)
// from configurations.runtimeClasspath
// into "build/assembly/tmp/$project.name/lib"
// }
// task copyScripts(type: Copy, group: 'assembly', dependsOn: cleanTmp) {
// from 'src/main/resources/shell'
// into "build/assembly/tmp/$project.name/bin"
// }
// task assembleAll(type: Zip, group: 'assembly', dependsOn: [copyLib, copyScripts, copyLibs]) {
// from 'build/assembly/tmp'
// destinationDir file('build/assembly')
// //archiveBaseName = "$project.name-assembly"
// }
// //task assembleAll(type: Tar, group: 'assembly', dependsOn: [build, copyLib, copyScripts, copyLibs]) {
// //from "build/assembly/tmp"
// //destinationDir file("$rootProject.rootDir/assembly")
// //archiveFileName = "${project.name}-${project.version}.tar.gz"
// //compression = Compression.GZIP
// //}
//
//}
/*
* 示例: 从依赖的JAR包中提取文件
*/
//configure(subprojects.findAll { it.PROJECT_GROUP == 'web' }) {
//
// configurations {
// scriptJar
// }
//
// dependencies {
// // 可选: 如果需要BOM, 则需要专门为scriptJar引入
// //scriptJar platform("com.github.shepherdviolet.glacimon:glacimon-bom:$version_glacimon")
// // 文件所在JAR包
// scriptJar ("com.github.shepherdviolet.glacimon:glacijava-common:$version_glacimon") { transitive = false }
// }
//
// task copyScriptsFromJar(type: Copy) {
// // 备注: 如果开启多线程编译(org.gradle.parallel), 这里会有个警告, 因多线程对配置同时操作导致, 可以忽略
// from zipTree(configurations.scriptJar.singleFile).matching {
// // 匹配路径和文件名
// include 'com/github/shepherdviolet/glacimon/java/misc/**'
// }
// // 注意, 脚本会复制到build/assembly/script/com/github/shepherdviolet/glacimon/java/misc下, 暂时没找到办法改路径, 只能再用一个COPY任务
// into 'build/assembly/script'
// }
//
//}
/*
* 示例: 将其他模块编译出来的jar复制到本模块jar包中
*/
//configure(subprojects.findAll { it.PROJECT_GROUP == 'web' }) {
//
// task copyJarFromAnotherModule(type: Copy) {
// // 从A模块复制编译出来的jar
// from "../module-a/build/libs/name-${project_version}.jar"
// // 复制到本模块jar包的META-INF/LIBS目录中 (build/resources/main目录下的文件在后续'jar'任务时会被打包)
// into 'build/resources/main/META-INF/LIBS/'
// // 本任务依赖A模块的'jar'任务
// dependsOn rootProject.subprojects.find { it.name == 'module-a' }.tasks.getByName('jar')
// }
//
// // 本模块的'jar'任务依赖copyJarFromAnotherModule任务
// jar.dependsOn copyJarFromAnotherModule
//
//}