44// Add -Prelease to the build command to version the jars with release versions
55// (defaults to dev build labeling)
66
7+ // TODO make sure that the timestamps for the jars are correct
8+ // TODO make sure that the yml resources are always updated and correct timestamps
9+ // TODO move resource retrieval to its own task
10+ // TODO move the MSConfig data to settings.gradle
11+ // TODO make sure that builds are fast
12+ // TODO build the spigot server jars automatically as needed
13+ // TODO create task to setup workspace
14+ // TODO make sure the clean task cleans everything properly
15+ // TODO make sure all builds can be cached where possible
16+ // TODO clean up dependency management
17+
718buildscript {
819 repositories {
920 jcenter()
@@ -13,12 +24,14 @@ buildscript {
1324 }
1425 }
1526 dependencies {
16- classpath " com.github.jengelman.gradle.plugins:shadow:2.0.1"
27+ classpath " com.github.jengelman.gradle.plugins:shadow:2.0.3"
28+ classpath ' de.undercouch:gradle-download-task:3.4.2'
1729 }
1830}
1931
2032apply plugin : ' java'
2133apply plugin : ' com.github.johnrengelman.shadow'
34+ apply plugin : ' de.undercouch.download'
2235
2336final String OPTION_DEPLOYMENT_NAMING = ' DeploymentNaming'
2437final String OPTION_RELEASE = ' release'
@@ -96,6 +109,7 @@ def downloadFile(File file, URL url) {
96109 }
97110}
98111
112+ // FIXME this should be setup as a task instead of a method running on configuration time
99113// Ensures resource availability
100114def magicspellsGetResources () {
101115 println ' Running the get resources phase'
@@ -117,25 +131,73 @@ def magicspellsGetResources() {
117131 println ' Finished running the get resources phase'
118132}
119133
120- magicspellsGetResources()
134+ task getResidence (type : Download ) {
135+ dest new File (project. file(project. ext. magicspellsData. libDir), ' Residence.jar' )
136+ src ' http://ltcraft.lt/Residence/download.php?file=Residence4.5.3.0.jar'
137+ overwrite false
138+ }
139+
140+ // FIXME this should not be run at configuration time
141+ // magicspellsGetResources()
142+ task downloadDependencies () {
143+ group = ' Setup'
144+ dependsOn = [
145+ ' getResidence'
146+ ]
147+ doFirst {
148+ magicspellsGetResources()
149+ }
150+ }
121151
152+ // FIXME fix up this task
122153task magicspellsBuildVersion () {
123154 description = ' Assign version suffix in dev build format'
124155 msconfig. versionSuffix = " dev-${ -> msconfig.datestampString} "
125156}
126157
158+ // FIXME fix up this task
127159task magicspellsReleaseVersion () {
128160 description = ' Assign version suffix in release format'
129161 if (project. hasProperty(" ${ OPTION_RELEASE} " )) msconfig. versionSuffix = ' Release'
130162}
131163
164+ Spec<? super File > ymlFilter () {
165+ return new Spec () {
166+ boolean isSatisfiedBy (Object file ) {
167+ if (! (file instanceof File )) return false
168+ return file. getName(). endsWith(" yml" )
169+ }
170+ }
171+ }
172+
132173def magicspellsClean () {
133174 // Delete old working directories
134175 project. delete project. ext. magicspellsData. coreBuildDir, project. ext. magicspellsData. teamsBuildDir, project. ext. magicspellsData. memoryBuildDir, project. ext. magicspellsData. shopBuildDir, project. ext. magicspellsData. townyBuildDir, project. ext. magicspellsData. factionsBuildDir, project. ext. magicspellsData. docDir, project. ext. magicspellsData. distDir
135176 project. file(project. ext. magicspellsData. distDir). mkdir()
136177}
137178
138- magicspellsClean()
179+ project. tasks. getByPath(" clean" ). doFirst({magicspellsClean()})
180+
181+ def cleanYmlFiles () {
182+ def files = project. files(project. ext. magicspellsData. coreBuildDir)
183+ .plus(project. files(project. ext. magicspellsData. teamsBuildDir))
184+ .plus(project. files(project. ext. magicspellsData. memoryBuildDir))
185+ .plus(project. files(project. ext. magicspellsData. shopBuildDir))
186+ .plus(project. files(project. ext. magicspellsData. townyBuildDir))
187+ .plus(project. files(project. ext. magicspellsData. factionsBuildDir))
188+ .filter(project. ymlFilter())
189+ project. delete files
190+ }
191+
192+ def cleanDistFolder () {
193+ project. delete project. ext. magicspellsData. distDir
194+ project. file(project. ext. magicspellsData. distDir). mkdir()
195+ }
196+
197+ // FIXME this should be setup as a task instead of a method running on configuration time
198+ // magicspellsClean()
199+ cleanDistFolder()
200+ cleanYmlFiles()
139201
140202def magicspellsClasspathBase () {
141203 return project. files(" ${ -> project.ext.magicspellsData.libDir}${ File.separator} spigot-1.12.jar" )
@@ -171,8 +233,13 @@ def magicspellsClasspathFactions() {
171233 .plus(project. files(" ${ -> project.ext.magicspellsData.libDir}${ File.separator} Factions.jar" ))
172234}
173235
236+ // FIXME fix up this task
237+ // FIXME do more of this at build time, not config time
174238task magicspellsCoreCompile (type : JavaCompile ) {
175239 description = ' Compile the main MagicSpells java files'
240+ dependsOn = [
241+ ' downloadDependencies'
242+ ]
176243 File buildDir = project. file(msconfig. coreBuildDir)
177244 buildDir. mkdir()
178245 destinationDir = buildDir
@@ -184,6 +251,24 @@ task magicspellsCoreCompile(type: JavaCompile) {
184251 msconfig. stringVersionCore = " ${ msconfig.coreVersion} -${ msconfig.versionSuffix} "
185252}
186253
254+ FileCollection coreYml = null
255+ task updateCoreYmlFiles () {
256+ doFirst {
257+ coreYml = project. files(" ${ msconfig.coreBuildDir} " ). filter(ymlFilter())
258+ }
259+ }
260+
261+ task magicspellsCopyResourcesClean (type : Delete ) {
262+ dependsOn = [
263+ " updateCoreYmlFiles"
264+ ]
265+
266+ doFirst {
267+ setProperty(" delete" , coreYml)
268+ }
269+ }
270+
271+ // FIXME fix up this task
187272task magicspellsCoreCopyResources (type : Copy ) {
188273 description = ' Copy yml resources for MagicSpells'
189274 from(msconfig. coreSrcDir) {
@@ -193,6 +278,7 @@ task magicspellsCoreCopyResources(type: Copy) {
193278 into " ${ msconfig.coreBuildDir} "
194279}
195280
281+ // FIXME do more of this at build time, not config time
196282task magicspellsCoreJar (type : com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar ) {
197283 description = ' Create the main MagicSpells jar'
198284 dependsOn = [
@@ -215,6 +301,7 @@ task magicspellsCoreJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.S
215301 println magicspellsCoreJar. excludes
216302}
217303
304+ // FIXME do more of this at build time, not config time
218305task magicspellsTeamsCompile (type : JavaCompile ) {
219306 description = ' Compile the teams addon'
220307 dependsOn = [
@@ -232,6 +319,7 @@ task magicspellsTeamsCompile(type: JavaCompile) {
232319 sourceCompatibility = msconfig. javaTeamsVersion
233320}
234321
322+ // FIXME fix up this task
235323task magicspellsTeamsCopyResources (type : Copy ) {
236324 description = ' Copy yml resources for MagicSpellsTeams'
237325 from(msconfig. teamsSrcDir) {
@@ -241,6 +329,7 @@ task magicspellsTeamsCopyResources(type: Copy) {
241329 into " ${ msconfig.teamsBuildDir} "
242330}
243331
332+ // FIXME do more of this at build time, not config time
244333task magicspellsTeamsJar (type : Jar ) {
245334 description = ' Create the teams addon jar'
246335 dependsOn = [
@@ -253,6 +342,7 @@ task magicspellsTeamsJar(type: Jar) {
253342 from(" ${ msconfig.teamsBuildDir} " )
254343}
255344
345+ // FIXME do more of this at build time, not config time
256346task magicspellsMemoryCompile (type : JavaCompile ) {
257347 description = ' Compile the memory addon'
258348 dependsOn = [
@@ -279,6 +369,7 @@ task magicspellsMemoryCopyResources(type: Copy) {
279369 into " ${ msconfig.memoryBuildDir} "
280370}
281371
372+ // FIXME do more of this at build time, not config time
282373// Create the memory jar file
283374task magicspellsMemoryJar (type : Jar ) {
284375 description = ' Create the memory addon jar'
@@ -292,6 +383,7 @@ task magicspellsMemoryJar(type: Jar) {
292383 from(" ${ msconfig.memoryBuildDir} " )
293384}
294385
386+ // FIXME do more of this at build time, not config time
295387// Compile shop addon
296388task magicspellsShopCompile (type : JavaCompile ) {
297389 description = ' Compile the shop addon'
@@ -333,6 +425,7 @@ task magicspellsShopJar(type: Jar) {
333425 from(" ${ msconfig.shopBuildDir} " )
334426}
335427
428+ // FIXME do more of this at build time, not config time
336429// Compile towny addon
337430task magicspellsTownyCompile (type : JavaCompile ) {
338431 description = ' Compile the Towny addon'
@@ -428,7 +521,7 @@ task magicspellsZip(type: Zip) {
428521 ' magicspellsTownyJar' ,
429522 ' magicspellsFactionsJar'
430523 ]
431-
524+
432525 File distDir = project. file(msconfig. distDir)
433526
434527 from distDir
0 commit comments