build.gradle 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509
  1. //ant.importBuild 'build.xml'
  2. import groovy.xml.MarkupBuilder
  3. import java.util.zip.ZipFile
  4. if (!hasProperty('mainClass')) {
  5. ext.mainClass = ''
  6. }
  7. repositories {
  8. jcenter {
  9. url "http://jcenter.bintray.com/"
  10. }
  11. maven {
  12. url "http://updates.jmonkeyengine.org/maven/"
  13. }
  14. maven {
  15. url 'http://nifty-gui.sourceforge.net/nifty-maven-repo/'
  16. }
  17. }
  18. ext.jmeFullVersion = "3.1.0-alpha2"
  19. ext.jmeNbmRevision = 0
  20. configurations {
  21. corelibs
  22. optlibs
  23. testdatalibs
  24. examplelibs
  25. }
  26. dependencies {
  27. corelibs dep("org.jmonkeyengine:jme3-core:$jmeFullVersion",true,true)
  28. corelibs dep("org.jmonkeyengine:jme3-desktop:$jmeFullVersion", true, true)
  29. corelibs dep("org.jmonkeyengine:jme3-lwjgl:$jmeFullVersion", true, true)
  30. corelibs dep("org.jmonkeyengine:jme3-effects:$jmeFullVersion", true, true)
  31. corelibs dep("org.jmonkeyengine:jme3-blender:$jmeFullVersion", true, true)
  32. corelibs dep("org.jmonkeyengine:jme3-jbullet:$jmeFullVersion", true, true)
  33. corelibs dep("org.jmonkeyengine:jme3-jogg:$jmeFullVersion", true, true)
  34. corelibs dep("org.jmonkeyengine:jme3-networking:$jmeFullVersion", true, true)
  35. corelibs dep("org.jmonkeyengine:jme3-niftygui:$jmeFullVersion", true, true)
  36. corelibs dep("org.jmonkeyengine:jme3-plugins:$jmeFullVersion", true, true)
  37. corelibs dep("org.jmonkeyengine:jme3-terrain:$jmeFullVersion", true, true)
  38. optlibs dep("org.jmonkeyengine:jme3-bullet:$jmeFullVersion", true, true)
  39. optlibs dep("org.jmonkeyengine:jme3-jogl:$jmeFullVersion", true, true)
  40. optlibs dep("org.jmonkeyengine:jme3-android:$jmeFullVersion", true, true)
  41. optlibs dep("org.jmonkeyengine:jme3-ios:$jmeFullVersion", true, true)
  42. optlibs dep("org.jmonkeyengine:jme3-android-native:$jmeFullVersion", true, true)
  43. optlibs dep("org.jmonkeyengine:jme3-bullet-native:$jmeFullVersion", true, true)
  44. optlibs dep("org.jmonkeyengine:jme3-bullet-native-android:$jmeFullVersion", true, true)
  45. testdatalibs dep("org.jmonkeyengine:jme3-testdata:$jmeFullVersion", false, false)
  46. examplelibs dep("org.jmonkeyengine:jme3-examples:$jmeFullVersion", false, true)
  47. }
  48. def dep(coords, javadoc = false, sources = false) {
  49. def result = [dependencies.create(coords)]
  50. if (javadoc) result << dependencies.create("$coords:javadoc")
  51. if (sources) result << dependencies.create("$coords:sources")
  52. result
  53. }
  54. artifacts {
  55. // jar null
  56. }
  57. task checkPlatformConfig {
  58. description = "Downloads the NetBeans platform base and registers it in the SDK project if needed"
  59. def platformFile = file("nbproject/private/platform-private.properties")
  60. if(!platformFile.exists()){
  61. def netbeansFolder = file("netbeans")
  62. if(!netbeansFolder.exists() || netbeansFolder.list().length == 0){
  63. println "Downloading NetBeans Platform base, this only has to be done once.."
  64. def f = file("netbeans.zip")
  65. new URL(netbeansUrl).withInputStream{ i -> f.withOutputStream{ it << i }}
  66. copy{
  67. from zipTree(f)
  68. into "."
  69. }
  70. f.delete()
  71. }
  72. file("nbproject/private/").mkdirs()
  73. platformFile.createNewFile()
  74. platformFile.write("nbplatform.default.netbeans.dest.dir=${netbeansFolder.absolutePath.replace('\\','/')}\r\n"+\
  75. "nbplatform.default.harness.dir=${netbeansFolder.absolutePath.replace('\\','/')}/harness\r\n")
  76. }
  77. }
  78. task copyBaseLibs(dependsOn:configurations.corelibs) <<{
  79. description "Copies the library files needed to run the SDK to "+
  80. "jme3-core-baselibs and jme3-core-libraries"
  81. // for each dependency in corelibs..
  82. //project.configurations.corelibs.dependencies.each {dep ->
  83. //println(project.configurations.corelibs.dependencies)
  84. project.configurations.corelibs.collect {file ->
  85. // copy built jme3 jar files to jme3-core-baselibs
  86. if (file.name.startsWith("jme3-") && !isSourceOrJavadoc(file.name)){
  87. copy {
  88. from file
  89. into "jme3-core-baselibs/release/modules/ext/"
  90. }
  91. }else if( !isSourceOrJavadoc(file.name)){
  92. copy {
  93. from file
  94. into "jme3-core-libraries/release/modules/ext/"
  95. }
  96. }
  97. }
  98. }
  99. copyBaseLibs.inputs.files configurations.corelibs.resolve()
  100. copyBaseLibs.outputs.dir "jme3-core-baselibs/release/modules/ext/"
  101. copyBaseLibs.outputs.dir "jme3-core-libraries/release/modules/ext/"
  102. def isSourceOrJavadoc(dep){
  103. return isSource(dep) || isJavadoc(dep)
  104. }
  105. def isSource(dep){
  106. return dep.endsWith("-sources.jar")
  107. }
  108. def isJavadoc(dep){
  109. return dep.endsWith("-javadoc.jar")
  110. }
  111. def isJmeDep(dep) {
  112. return dep.startsWith("jme3-")
  113. }
  114. task createBaseXml(dependsOn: configurations.corelibs) <<{
  115. description "Creates the project.xml files for "+
  116. "jme3-core-baselibs and jme3-core-libraries"
  117. def jmeJarFiles = [] // jme3 jar files
  118. def externalJarFiles = [] // external jar files
  119. // collect jar files
  120. project.configurations.corelibs.collect {file ->
  121. // copy built jme3 jar files to jme3-core-baselibs
  122. if (file.name.startsWith("jme3-") && !isSourceOrJavadoc(file.name)){
  123. //collect jme jars
  124. if(!jmeJarFiles.contains(file)){
  125. jmeJarFiles.add(file)
  126. }
  127. }else if( !isSourceOrJavadoc(file.name)){
  128. //collect external jars
  129. externalJarFiles.add(file)
  130. }
  131. }
  132. // collect base packages
  133. def packages = []
  134. jmeJarFiles.each{jarFile ->
  135. ZipFile file = new ZipFile(jarFile)
  136. file.entries().each { entry ->
  137. if(entry.name.endsWith('.class')){
  138. // TODO: "/" works on windows?
  139. def pathPart = entry.name.substring(0,entry.name.lastIndexOf('/'))
  140. def classPath = pathPart.replace('/','.');
  141. if(!packages.contains(classPath)){
  142. packages.add(classPath)
  143. }
  144. }
  145. }
  146. }
  147. // collect library packages
  148. def extPackages = []
  149. externalJarFiles.each{jarFile ->
  150. ZipFile file = new ZipFile(jarFile)
  151. file.entries().each { entry ->
  152. if(entry.name.endsWith('.class')){
  153. // TODO: "/" works on windows?
  154. def pathPart = entry.name.substring(0,entry.name.lastIndexOf('/'))
  155. def classPath = pathPart.replace('/','.');
  156. if(!extPackages.contains(classPath)){
  157. extPackages.add(classPath)
  158. }
  159. }
  160. }
  161. }
  162. def writer = new StringWriter()
  163. def xml = new MarkupBuilder(writer)
  164. xml.mkp.xmlDeclaration(version:'1.0')
  165. xml.project(xmlns:"http://www.netbeans.org/ns/project/1"){
  166. type "org.netbeans.modules.apisupport.project"
  167. configuration {
  168. data(xmlns:"http://www.netbeans.org/ns/nb-module-project/3") {
  169. "code-name-base" "com.jme3.gde.core.baselibs"
  170. "suite-component"{}
  171. "module-dependencies"{
  172. dependency{
  173. "code-name-base" "com.jme3.gde.core.libraries"
  174. "build-prerequisite"{}
  175. "compile-dependency"{}
  176. "run-dependency"{
  177. "release-version" "1"
  178. "specification-version" jmeVersion
  179. }
  180. }
  181. }
  182. "public-packages"{
  183. packages.each{
  184. "package" it
  185. }
  186. }
  187. jmeJarFiles.each{jarFile ->
  188. "class-path-extension"{
  189. "runtime-relative-path" "ext/${jarFile.name}"
  190. "binary-origin" "release/modules/ext/${jarFile.name}"
  191. }
  192. }
  193. }
  194. }
  195. }
  196. // write XML file
  197. File baselibsProjectFile = file("jme3-core-baselibs/nbproject/project.xml");
  198. baselibsProjectFile.write(writer.toString())
  199. def extWriter = new StringWriter()
  200. def extXml = new MarkupBuilder(extWriter)
  201. // extXml.mkp.xmlDeclaration(version:'1.0')
  202. extXml.project(xmlns:"http://www.netbeans.org/ns/project/1"){
  203. type "org.netbeans.modules.apisupport.project"
  204. configuration {
  205. data(xmlns:"http://www.netbeans.org/ns/nb-module-project/3") {
  206. "code-name-base" "com.jme3.gde.core.libraries"
  207. "suite-component"{}
  208. "module-dependencies"{}
  209. "public-packages"{
  210. extPackages.each{
  211. "package" it
  212. }
  213. }
  214. externalJarFiles.each{jarFile ->
  215. "class-path-extension"{
  216. "runtime-relative-path" "ext/${jarFile.name}"
  217. "binary-origin" "release/modules/ext/${jarFile.name}"
  218. }
  219. }
  220. }
  221. }
  222. }
  223. // write XML file
  224. File librariesProjectFile = file("jme3-core-libraries/nbproject/project.xml");
  225. librariesProjectFile.write(extWriter.toString())
  226. }
  227. createBaseXml.inputs.files configurations.corelibs.resolve()
  228. createBaseXml.outputs.file "jme3-core-baselibs/nbproject/project.xml"
  229. createBaseXml.outputs.file "jme3-core-libraries/nbproject/project.xml"
  230. task copyProjectLibs(dependsOn: [configurations.corelibs, configurations.testdatalibs]) <<{
  231. description "Copies the jar files needed to supply the J2SE Libraries in the "+
  232. "SDK to jme3-project-baselibs and jme3-project-libraries"
  233. // for each dependency in corelibs and optlibs..
  234. def deps = []
  235. deps.addAll(project.configurations.corelibs.files)
  236. deps.addAll(project.configurations.optlibs.files)
  237. deps.each {dep ->
  238. // copy jme3 jar files, sources and javadocs to jme3-project-baselibs
  239. if(isSource(dep.name)){
  240. copy {
  241. from dep
  242. into "jme3-project-baselibs/release/libs/"
  243. }
  244. } else if(isJavadoc(dep.name)){
  245. copy {
  246. from dep
  247. into "jme3-project-baselibs/release/libs/"
  248. }
  249. } else if(isJmeDep(dep.name)){
  250. copy {
  251. from dep
  252. into "jme3-project-baselibs/release/libs/"
  253. }
  254. }else{
  255. copy {
  256. from dep
  257. into "jme3-project-libraries/release/libs/"
  258. }
  259. }
  260. }
  261. project.configurations.testdatalibs.files.each {dep ->
  262. // copy jme3 test data to jme3-project-testdata
  263. if(isJmeDep(dep.name)){
  264. copy {
  265. from dep
  266. into "jme3-project-testdata/release/libs/"
  267. rename ("jme3-testdata(.*)", "jme3-testdata.jar")
  268. }
  269. }
  270. }
  271. }
  272. copyProjectLibs.inputs.files configurations.corelibs.resolve()
  273. copyProjectLibs.inputs.files configurations.optlibs.resolve()
  274. copyProjectLibs.inputs.files configurations.testdatalibs.resolve()
  275. copyProjectLibs.outputs.dir "jme3-project-baselibs/release/libs/"
  276. copyProjectLibs.outputs.dir "jme3-project-libraries/release/libs/"
  277. copyProjectLibs.outputs.dir "jme3-project-testdata/release/libs/"
  278. // workaround method to add a tag with the name "name" and "file" to an XML MarkupBuilder
  279. def makeName(builder, nameR) { builder.name nameR }
  280. def makeFile(builder, nameR) { builder.file(name:nameR, url:nameR) }
  281. task createProjectXml(dependsOn: configurations.corelibs) <<{
  282. description "Creates needed J2SE library and layer XML files in jme3-project-baselibs"
  283. def eol = System.properties.'line.separator'
  284. def j2seLibraries = [] // created J2SE library descriptors
  285. // for each dependency in corelibs..
  286. def deps = []
  287. deps.addAll(project.configurations.corelibs.dependencies)
  288. deps.addAll(project.configurations.optlibs.dependencies)
  289. deps.each {dep ->
  290. def jmeJarFiles = [] // jme3 jar files
  291. def jmeSourceFiles = [] // jme3 sources
  292. def jmeJavadocFiles = [] // jme3 javadoc
  293. def externalJarFiles = [] // external jar files
  294. if(j2seLibraries.contains(dep.name+".xml")){
  295. return;
  296. }
  297. j2seLibraries.add(dep.name+".xml")
  298. project.configurations.corelibs.files{ d -> return d.name == dep.name}.each{ file ->
  299. if(isSource(file.name)){
  300. if(!jmeSourceFiles.contains(file.name)){
  301. jmeSourceFiles.add(file.name)
  302. }
  303. } else if(isJavadoc(file.name)){
  304. if(!jmeJavadocFiles.contains(file.name)){
  305. jmeJavadocFiles.add(file.name)
  306. }
  307. } else if(isJmeDep(file.name)){
  308. if(!jmeJarFiles.contains(file.name)){
  309. jmeJarFiles.add(file.name)
  310. }
  311. }else{
  312. if(!externalJarFiles.contains(file.name)){
  313. externalJarFiles.add(file.name)
  314. }
  315. }
  316. }
  317. project.configurations.optlibs.files{ d -> return d.name == dep.name}.each{ file ->
  318. if(isSource(file.name)){
  319. if(!jmeSourceFiles.contains(file.name)){
  320. jmeSourceFiles.add(file.name)
  321. }
  322. } else if(isJavadoc(file.name)){
  323. if(!jmeJavadocFiles.contains(file.name)){
  324. jmeJavadocFiles.add(file.name)
  325. }
  326. } else if(isJmeDep(file.name)){
  327. if(!jmeJarFiles.contains(file.name)){
  328. jmeJarFiles.add(file.name)
  329. }
  330. }else{
  331. if(!externalJarFiles.contains(file.name)){
  332. externalJarFiles.add(file.name)
  333. }
  334. }
  335. }
  336. // create J2SE library descriptor xml file
  337. def libraryWriter = new StringWriter()
  338. def libraryXml = new MarkupBuilder(libraryWriter)
  339. // xml.mkp.xmlDeclaration(version:'1.0')
  340. libraryWriter << '<?xml version="1.0" encoding="UTF-8"?>' << eol
  341. libraryWriter << '<!DOCTYPE library PUBLIC "-//NetBeans//DTD Library Declaration 1.0//EN" "http://www.netbeans.org/dtds/library-declaration-1_0.dtd">' << eol
  342. libraryXml.library(version:"1.0", encoding: "UTF-8"){
  343. makeName(libraryXml, "${dep.name}")
  344. type "j2se"
  345. "localizing-bundle" "com.jme3.gde.project.baselibs.Bundle"
  346. volume{
  347. type "classpath"
  348. resource "jar:nbinst://com.jme3.gde.project.baselibs/libs/${jmeJarFiles[0]}!/"
  349. externalJarFiles.each{jar ->
  350. resource "jar:nbinst://com.jme3.gde.project.libraries/libs/${jar}!/"
  351. }
  352. }
  353. volume{
  354. type "src"
  355. jmeSourceFiles.each{jar ->
  356. resource "jar:nbinst://com.jme3.gde.project.baselibs/libs/${jar}!/"
  357. }
  358. }
  359. volume{
  360. type "javadoc"
  361. jmeJavadocFiles.each{jar ->
  362. resource "jar:nbinst://com.jme3.gde.project.baselibs/libs/${jar}!/"
  363. }
  364. }
  365. }
  366. // write XML file
  367. File libraryXmlFile = file("jme3-project-baselibs/src/com/jme3/gde/project/baselibs/${dep.name}.xml");
  368. libraryXmlFile.write(libraryWriter.toString())
  369. }
  370. // create layer.xml file with entries of library xml files
  371. def layerWriter = new StringWriter()
  372. def layerXml = new MarkupBuilder(layerWriter)
  373. // layerXml.mkp.xmlDeclaration(version:'1.0')
  374. layerWriter << '<?xml version="1.0" encoding="UTF-8"?>' << eol
  375. layerWriter << '<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN" "http://www.netbeans.org/dtds/filesystem-1_1.dtd">' << eol
  376. layerXml.filesystem{
  377. folder(name:"org-netbeans-api-project-libraries"){
  378. folder(name:"Libraries"){
  379. j2seLibraries.each{lib ->
  380. makeFile(layerXml, lib)
  381. }
  382. }
  383. }
  384. }
  385. File layerXmlFile = file("jme3-project-baselibs/src/com/jme3/gde/project/baselibs/layer.xml");
  386. layerXmlFile.write(layerWriter.toString())
  387. }
  388. createProjectXml.inputs.files configurations.corelibs.resolve()
  389. createProjectXml.inputs.files configurations.optlibs.resolve()
  390. createProjectXml.outputs.dir "jme3-project-baselibs/src/com/jme3/gde/project/baselibs/"
  391. task copyTestSources <<{
  392. project.configurations.examplelibs.files.each{dep ->
  393. if(isSource(dep.name)){
  394. copy{
  395. from {
  396. zipTree(dep)
  397. }
  398. into "JME3TestsTemplate/src/"
  399. }
  400. copy{
  401. from {
  402. zipTree(dep)
  403. }
  404. into "JME3TestsTemplateAndroid/src/"
  405. }
  406. }
  407. }
  408. }
  409. copyTestSources.inputs.files project.configurations.examplelibs
  410. copyTestSources.outputs.dir "JME3TestsTemplate/src/"
  411. copyTestSources.outputs.dir "JME3TestsTemplateAndroid/src/"
  412. ant.properties['plugins.version'] = jmeVersion
  413. ant.properties['app.version']= jmeFullVersion
  414. ant.properties['nbm.revision']= jmeNbmRevision
  415. task buildSdk(dependsOn: [copyBaseLibs, copyProjectLibs, createProjectXml, createBaseXml, copyTestSources]) <<{
  416. ant.propertyfile(file: "nbproject/project.properties") {
  417. entry( key: "plugins.version", value: "${jmeVersion}")
  418. entry( key: "app.version", value: "${jmeFullVersion}")
  419. entry( key: "nbm.revision", value: "${jmeNbmRevision}")
  420. }
  421. ant.ant(dir: ".", antfile: "build.xml", target: "build")
  422. }
  423. buildSdk.inputs.files configurations.corelibs.resolve()
  424. buildSdk.inputs.files configurations.optlibs.resolve()
  425. file('.').eachDir{
  426. if(it.name.startsWith("jme3-") && it.isDirectory()){
  427. buildSdk.inputs.dir it
  428. }
  429. }
  430. buildSdk.outputs.dir "build"
  431. task cleanSdk() <<{
  432. ant.ant(dir: ".", antfile: "build.xml", target: "clean")
  433. file("jme3-core-baselibs/release/").deleteDir()
  434. file("jme3-core-libraries/release/").deleteDir()
  435. file("jme3-project-baselibs/release/").deleteDir()
  436. file("jme3-project-libraries/release/").deleteDir()
  437. file("jme3-project-testdata/release/").deleteDir()
  438. file("JME3TestsTemplate/src/jme3test/").deleteDir()
  439. file("JME3TestsTemplateAndroid/src/jme3test/").deleteDir()
  440. }
  441. //jar.dependsOn(buildSdk)
  442. //clean.dependsOn(cleanSdk)