import java.nio.file.Files; import java.nio.file.StandardCopyOption; buildscript { repositories { mavenCentral() google() maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath libs.android.build.gradle classpath libs.gradle.retrolambda classpath libs.spotbugs.gradle.plugin } } allprojects { repositories { mavenCentral() google() } tasks.withType(Jar) { duplicatesStrategy = 'include' } } // Set the license for IDEs that understand this ext.license = file("$rootDir/source-file-header-template.txt") apply plugin: 'base' apply plugin: 'com.github.spotbugs' apply from: file('version.gradle') apply plugin: 'me.tatarka.retrolambda' // This is applied to all sub projects subprojects { if(!project.name.equals('jme3-android-examples')) { apply from: rootProject.file('common.gradle') } else { apply from: rootProject.file('common-android-app.gradle') } if (!project.name.endsWith("-native") && enableSpotBugs != "false" ) { apply plugin: 'com.github.spotbugs' // Currently we only warn about issues and try to fix them as we go, but those aren't mission critical. spotbugs { ignoreFailures = true toolVersion = '4.8.6' } tasks.withType(com.github.spotbugs.snom.SpotBugsTask ) { reports { html.enabled = !project.hasProperty("xml-reports") xml.enabled = project.hasProperty("xml-reports") } } } } task run(dependsOn: ':jme3-examples:run') { description = 'Run the jME3 examples' } defaultTasks 'run' task libDist(dependsOn: subprojects.build, description: 'Builds and copies the engine binaries, sources and javadoc to build/libDist') { doLast { File libFolder = mkdir("$buildDir/libDist/lib") File sourceFolder = mkdir("$buildDir/libDist/sources") File javadocFolder = mkdir("$buildDir/libDist/javadoc") subprojects.each {project -> if(!project.hasProperty('mainClassName')){ project.tasks.withType(Jar).each {archiveTask -> String classifier = archiveTask.archiveClassifier.get() String ext = archiveTask.archiveExtension.get() if (classifier == "sources") { copy { from archiveTask.archivePath into sourceFolder rename {project.name + '-' + classifier + '.' + ext} } } else if (classifier == "javadoc") { copy { from archiveTask.archivePath into javadocFolder rename {project.name + '-' + classifier + '.' + ext} } } else{ copy { from archiveTask.archivePath into libFolder rename {project.name + '.' + ext} } } } } } } } task createZipDistribution(type:Zip,dependsOn:["dist","libDist"], description:"Package the nightly zip distribution"){ archiveFileName = provider { "jME" + jmeFullVersion + ".zip" } into("/") { from {"./dist"} } into("/sources") { from {"$buildDir/libDist/sources"} } } task copyLibs(type: Copy){ // description 'Copies the engine dependencies to build/libDist' from { subprojects*.configurations*.implementation*.copyRecursive({ !(it instanceof ProjectDependency); })*.resolve() } into "$buildDir/libDist/lib-ext" //buildDir.path + '/' + libsDirName + '/lib' } task dist(dependsOn: [':jme3-examples:dist', 'mergedJavadoc']){ description 'Creates a jME3 examples distribution with all jme3 binaries, sources, javadoc and external libraries under ./dist' } def mergedJavadocSubprojects = [ ":jme3-android", ":jme3-core", ":jme3-desktop", ":jme3-effects", ":jme3-ios", ":jme3-jbullet", ":jme3-jogg", ":jme3-lwjgl", ":jme3-lwjgl3", ":jme3-networking", ":jme3-niftygui", ":jme3-plugins", ":jme3-terrain", ":jme3-vr" ] task mergedJavadoc(type: Javadoc, description: 'Creates Javadoc from all the projects.') { title = 'jMonkeyEngine3' destinationDir = mkdir("dist/javadoc") options.encoding = 'UTF-8' // Allows Javadoc to be generated on Java 8 despite doclint errors. if (JavaVersion.current().isJava8Compatible()) { options.addStringOption('Xdoclint:none', '-quiet') } options.overview = file("javadoc-overview.html") source = mergedJavadocSubprojects.collect { project(it).sourceSets.main.allJava } classpath = files(mergedJavadocSubprojects.collect { project(it).sourceSets.main.compileClasspath }) } clean.dependsOn('cleanMergedJavadoc') task cleanMergedJavadoc(type: Delete) { delete file('dist/javadoc') } task mergedSource(type: Copy){ } ext { ndkCommandPath = "" ndkExists = false } task configureAndroidNDK { def ndkBuildFile = "ndk-build" // if windows, use ndk-build.cmd instead if (System.properties['os.name'].toLowerCase().contains('windows')) { ndkBuildFile = "ndk-build.cmd" } // ndkPath is defined in the root project gradle.properties file String ndkBuildPath = ndkPath + File.separator + ndkBuildFile //Use the environment variable for the NDK location if defined if (System.env.ANDROID_NDK != null) { ndkBuildPath = System.env.ANDROID_NDK + File.separator + ndkBuildFile } if (new File(ndkBuildPath).exists()) { ndkExists = true ndkCommandPath = ndkBuildPath } } gradle.rootProject.ext.set("usePrebuildNatives", buildNativeProjects!="true"); if (skipPrebuildLibraries != "true" && buildNativeProjects != "true") { String rootPath = rootProject.projectDir.absolutePath Properties nativesSnapshotProp = new Properties() File nativesSnapshotPropF = new File("${rootPath}/natives-snapshot.properties"); if (nativesSnapshotPropF.exists()) { nativesSnapshotPropF.withInputStream { nativesSnapshotProp.load(it) } String nativesSnapshot = nativesSnapshotProp.getProperty("natives.snapshot"); String nativesUrl = PREBUILD_NATIVES_URL.replace('${natives.snapshot}', nativesSnapshot) println "Use natives snapshot: " + nativesUrl String nativesZipFile = "${rootPath}" + File.separator + "build" + File.separator + nativesSnapshot + "-natives.zip" String nativesPath = "${rootPath}" + File.separator + "build" + File.separator + "native" task getNativesZipFile { outputs.file nativesZipFile doFirst { File target = file(nativesZipFile); println("Download natives from " + nativesUrl + " to " + nativesZipFile); target.getParentFile().mkdirs(); ant.get(src: nativesUrl, dest: target); } } task extractPrebuiltNatives { inputs.file nativesZipFile outputs.dir nativesPath dependsOn getNativesZipFile doFirst { for (File src : zipTree(nativesZipFile)) { String srcRel = src.getAbsolutePath().substring((int) (nativesZipFile.length() + 1)); srcRel = srcRel.substring(srcRel.indexOf(File.separator) + 1); File dest = new File(nativesPath + File.separator + srcRel); boolean doCopy = !(dest.exists() && dest.lastModified() > src.lastModified()) if (doCopy) { println("Copy " + src + " " + dest); dest.getParentFile().mkdirs(); Files.copy(src.toPath(), dest.toPath(), StandardCopyOption.REPLACE_EXISTING); } } } } assemble.dependsOn extractPrebuiltNatives } } retrolambda { javaVersion JavaVersion.VERSION_1_7 incremental true jvmArgs '-noverify' }