forked from peterpilgrim/javaee7-developer-handbook
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.gradle
209 lines (187 loc) · 6.9 KB
/
build.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
/*******************************************************************************
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2013,2014 by Peter Pilgrim, Addiscombe, Surrey, XeNoNiQUe UK
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU GPL v3.0
* which accompanies this distribution, and is available at:
* http://www.gnu.org/licenses/gpl-3.0.txt
*
* Developers:
* Peter Pilgrim -- design, development and implementation
* -- Blog: http://www.xenonique.co.uk/blog/
* -- Twitter: @peter_pilgrim
*
* Contributors:
*
*******************************************************************************/
// Packt Publishing and Peter A. Pilgrim present the
// ================================================================================
// J A V A E E 7 D E V E L O P E R H A N D B O O K
// ================================================================================
//
// This Gradle build is the root and does compile any software explicitly
//
apply plugin: 'maven'
apply plugin: 'eclipse'
apply plugin: 'idea'
// Define equivalent Maven GAV coordinates.
group = 'je7hb.root'
archivesBaseName = 'jeh7hb-root'
version = '0.98'
repositories {
mavenLocal()
mavenCentral()
maven {
url 'https://maven.java.net/content/groups/promoted'
}
maven {
url 'http://repository.jboss.org/nexus/content/groups/public'
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.0'
}
task myZip(type: Zip) {
description = "Creates a ZIP distribution of the `${archivesBaseName}' project."
from '.'
def targetName = "7942-${archivesBaseName}-sources-${version}.zip"
println "Creating targetName=${targetName}"
archiveName "${targetName}"
include '**/src/**'
include '**/*.xml'
include '**/*.gradle'
include '**/*.txt'
exclude '**/.gradle/**'
exclude '**/build/**'
exclude '**/out/**'
exclude '**/target/**'
exclude '**/ch08-olde/**'
/*
exclude {
details ->
details.file.name.equals('.gradle')
}
*/
}
// This is the root build file
File currentFile = new File(".","build.gradle")
def cleanTaskNames = []
def buildTaskNames = []
def installTaskNames = []
def stubTaskNames = []
def cleanBuildTaskNames = []
def cleanInstallTaskNames = []
// Build dynamic task names for each sub project, ensure we avoid
// recursion by excluding the root build file.
new File(".").eachFileRecurse{ file ->
if ( file.isFile() && "build.gradle".equals(file.name)
&& !file.equals(currentFile)) {
String stubTaskName = file.getParentFile().getName()
String cleanTaskName = "clean_"+stubTaskName
String buildTaskName = "build_"+stubTaskName
String installTaskName = "install_"+stubTaskName
String ideaTaskName = "idea_"+stubTaskName
String cleanBuildTaskName = "clean_build_"+stubTaskName
String cleanInstallTaskName = "clean_install_"+stubTaskName
/* +++ DEBUG+++
println "--+---" + file.getPath()
println " +-- " + file.getParentFile().getPath()
println " +-- " + file.getParentFile().getName()
println " +-->>> " + buildTaskName
*/
cleanTaskNames << cleanTaskName
stubTaskNames << stubTaskName
// Dynamically create GradleBuildType tasks on the fly
task "${cleanTaskName}"(type: GradleBuild) {
description = "Cleans the sub project [${stubTaskName}]"
dir = file.getParentFile().getPath()
tasks = ['clean']
}
task "${ideaTaskName}"(type: GradleBuild) {
description = "Generate IDEA project meta files for the sub project [${stubTaskName}]"
dir = file.getParentFile().getPath()
tasks = ['idea']
}
// We have to block Chapter 11 example JPA Advanced, because these examples
// require a managed application server to already be running.
// Application server: GlassFish 4.0
if (!file.getPath().contains("jpa-criteria") &&
!file.getPath().contains("jpa-entitygraph") &&
!file.getPath().contains("jpa-maps") &&
!file.getPath().contains("jpa-miscellany") &&
!file.getPath().contains("jpa-") &&
!file.getPath().contains("jms-async")) {
// Check *DEBUG*:
// println(file.getPath())
buildTaskNames << buildTaskName
installTaskNames << installTaskName
cleanBuildTaskNames << cleanBuildTaskName
cleanInstallTaskNames << cleanInstallTaskName
task "${buildTaskName}"(type: GradleBuild) {
description = "Builds the sub project [${stubTaskName}]"
dir = file.getParentFile().getPath()
tasks = ['build']
}
task "${installTaskName}"(type: GradleBuild) {
description = "Installs the sub project [${stubTaskName}]"
dir = file.getParentFile().getPath()
tasks = ['build','install']
}
task "${cleanBuildTaskName}"(type: GradleBuild) {
description = "Cleans and builds the sub project [${stubTaskName}]"
dir = file.getParentFile().getPath()
tasks = ['clean', 'build']
}
task "${cleanInstallTaskName}"(type: GradleBuild) {
description = "Cleans and installs the sub project [${stubTaskName}]"
dir = file.getParentFile().getPath()
tasks = ['clean', 'install']
}
}
}
}
task build {
description = "Builds and installs only the initial project (*Embedded GlassFish utility)"
dependsOn 'install_glassfish-embedded'
}
task build_everything {
description = "Build every subproject"
dependsOn build
buildTaskNames.each{ subTask1 ->
dependsOn subTask1
}
println "*NOTE*: For Chapter 11, Advanced Topics with JPA, you require a running Managed Glassfish 4.0.1 server that is connected to MySQL 5.6 server"
}
task install_everything {
description = "Builds and install every subproject"
installTaskNames.each{ subTask1 ->
dependsOn subTask1
}
}
task clean_everything {
description = "Cleans out and reset every subproject"
cleanTaskNames.each{ subTask1 ->
dependsOn subTask1
}
}
task clean_build_everything {
description = "Cleans and builds every subproject"
cleanBuildTaskNames.each{ subTask1 ->
dependsOn subTask1
}
}
task clean_install_everything {
description = "Cleans and installs every subproject"
cleanInstallTaskNames.each{ subTask1 ->
dependsOn subTask1
}
}
task generate_idea_everything {
description = "Create IDEA project files for every subproject"
stubTaskNames.each{ subTask1 ->
dependsOn "idea_${subTask1}"
}
}
// End.