build: new build version info system

* JmeVersion is no longer autogenerated, instead it pulls info from version.properties
 * Added version.gradle script to generate version info and expose it to other gradle scripts
 * Embed version info inside JAR manifest
 * Refactor NDK finding to use the same way as the version generation
experimental
Kirill Vainer 9 years ago
parent 0d7dea20df
commit 17887b1fb0
  1. 2
      .gitignore
  2. 40
      build.gradle
  3. 9
      common.gradle
  4. 61
      jme3-core/build.gradle
  5. 65
      jme3-core/src/main/java/com/jme3/system/JmeVersion.java
  6. 11
      jme3-core/src/main/resources/com/jme3/system/version.properties
  7. 109
      version.gradle

2
.gitignore vendored

@ -5,7 +5,7 @@
/build/ /build/
/netbeans/ /netbeans/
/jme3-core/build/ /jme3-core/build/
/jme3-core/src/main/java/com/jme3/system/JmeVersion.java /jme3-core/src/main/resources/com/jme3/system/version.properties
/jme3-plugins/build/ /jme3-plugins/build/
/jme3-desktop/build/ /jme3-desktop/build/
/jme3-android-native/build/ /jme3-android-native/build/

@ -1,15 +1,16 @@
import org.gradle.api.artifacts.* import org.gradle.api.artifacts.*
buildscript { buildscript {
repositories { repositories {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:1.1.0' classpath 'com.android.tools.build:gradle:1.1.0'
} }
} }
apply plugin: 'base' apply plugin: 'base'
apply from: file('version.gradle')
// This is applied to all sub projects // This is applied to all sub projects
subprojects { subprojects {
@ -114,7 +115,12 @@ task wrapper(type: Wrapper, description: 'Creates and deploys the Gradle wrapper
gradleVersion = '2.2.1' gradleVersion = '2.2.1'
} }
String findNDK() { ext {
ndkCommandPath = ""
ndkExists = false
}
task configureAndroidNDK {
def ndkBuildFile = "ndk-build" def ndkBuildFile = "ndk-build"
// if windows, use ndk-build.cmd instead // if windows, use ndk-build.cmd instead
if (System.properties['os.name'].toLowerCase().contains('windows')) { if (System.properties['os.name'].toLowerCase().contains('windows')) {
@ -127,27 +133,13 @@ String findNDK() {
if (System.env.ANDROID_NDK != null) { if (System.env.ANDROID_NDK != null) {
ndkBuildPath = System.env.ANDROID_NDK + File.separator + ndkBuildFile ndkBuildPath = System.env.ANDROID_NDK + File.separator + ndkBuildFile
} }
if (new File(ndkBuildPath).exists()) { if (new File(ndkBuildPath).exists()) {
return ndkBuildPath ndkExists = true
} else { ndkCommandPath = ndkBuildPath
return null
} }
} }
boolean checkNdkExists(String ndkCommandPath) {
// String ndkCommandPath = findNDK()
if (ndkCommandPath != null && new File(ndkCommandPath).exists()) {
return true
} else {
return false
}
}
ext {
ndkCommandPath = findNDK()
ndkExists = checkNdkExists(ndkCommandPath)
}
//class IncrementalReverseTask extends DefaultTask { //class IncrementalReverseTask extends DefaultTask {
// @InputDirectory // @InputDirectory
// def File inputDir // def File inputDir

@ -6,8 +6,8 @@ apply plugin: 'java'
apply plugin: 'maven' apply plugin: 'maven'
apply plugin: 'maven-publish' apply plugin: 'maven-publish'
group = 'com.jme3' group = 'com.jme3'
version = jmeVersion + '-' + jmeVersionTag version = jmePomVersion
sourceCompatibility = '1.6' sourceCompatibility = '1.6'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' [compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
@ -22,6 +22,11 @@ repositories {
dependencies { dependencies {
// Adding dependencies here will add the dependencies to each subproject. // Adding dependencies here will add the dependencies to each subproject.
testCompile group: 'junit', name: 'junit', version: '4.10' testCompile group: 'junit', name: 'junit', version: '4.10'
jar {
manifest {
attributes 'Implementation-Title': 'jMonkeyEngine',
'Implementation-Version': version
}
} }
javadoc { javadoc {

@ -12,55 +12,22 @@ sourceSets {
} }
} }
buildscript { task updateVersionPropertiesFile << {
repositories { def verfile = file('src/main/resources/com/jme3/system/version.properties')
mavenCentral() verfile.text = "# THIS IS AN AUTO-GENERATED FILE..\n" +
} "# DO NOT MODIFY!\n" +
dependencies { "build.date=${jmeBuildDate}\n" +
classpath 'org.ajoberstar:gradle-git:1.0.0-rc.1' "git.revision=${jmeRevision}\n" +
} "git.branch=${jmeBranchName}\n" +
} "git.hash=${jmeGitHash}\n" +
"git.hash.short=${jmeShortGitHash}\n" +
import java.text.SimpleDateFormat "git.tag=${jmeGitTag}\n" +
import org.ajoberstar.grgit.* "name.full=${jmeFullName}\n" +
"version.number=${jmeVersion}\n" +
task updateVersion << { "version.tag=${jmeVersionTag}"
def verfile = file('src/main/java/com/jme3/system/JmeVersion.java')
def jmeGitHash
def jmeShortGitHash
def jmeBuildDate
def jmeBranchName
try {
def grgit = Grgit.open(project.file('.').parent)
jmeGitHash = grgit.head().id
jmeShortGitHash = grgit.head().abbreviatedId
jmeBuildDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date())
jmeBranchName = grgit.branch.current.name
} catch (ex) {
// Failed to get repo info
logger.warn("Failed to get repository info: " + ex.message + ". " + \
"Only partial build info will be generated.")
jmeGitHash = ""
jmeShortGitHash = ""
jmeBuildDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date())
jmeBranchName = "unknown"
}
verfile.text = "\npackage com.jme3.system;\n\n" +
"/**\n * THIS IS AN AUTO-GENERATED FILE..\n * DO NOT MODIFY!\n */\n" +
"public class JmeVersion {\n" +
" public static final String BUILD_DATE = \"${jmeBuildDate}\";\n" +
" public static final String BRANCH_NAME = \"${jmeBranchName}\";\n" +
" public static final String GIT_HASH = \"${jmeGitHash}\";\n" +
" public static final String GIT_SHORT_HASH = \"${jmeShortGitHash}\";\n" +
" public static final String FULL_NAME = \"jMonkeyEngine ${jmeVersion} (${jmeVersionTag})\";\n" +
"}\n"
} }
compileJava.dependsOn(updateVersion) compileJava.dependsOn(updateVersionPropertiesFile)
dependencies { dependencies {
} }

@ -0,0 +1,65 @@
/*
* Copyright (c) 2009-2015 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jme3.system;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Pulls in version info from the version.properties file.
*
* @author Kirill Vainer
*/
public class JmeVersion {
private static final Logger logger = Logger.getLogger(JmeVersion.class.getName());
private static final Properties props = new Properties();
static {
try {
props.load(JmeVersion.class.getResourceAsStream("version.properties"));
} catch (IOException ex) {
logger.log(Level.WARNING, "Unable to read version info!", ex);
}
}
public static final String BUILD_DATE = props.getProperty("build.date", "1900-01-01");
public static final String BRANCH_NAME = props.getProperty("git.branch", "unknown");
public static final String GIT_HASH = props.getProperty("git.hash", "");
public static final String GIT_SHORT_HASH = props.getProperty("git.hash.short", "");
public static final String GIT_TAG = props.getProperty("git.tag", "");
public static final String VERSION_NUMBER = props.getProperty("version.number", "");
public static final String VERSION_TAG = props.getProperty("version.tag", "");
public static final String FULL_NAME = props.getProperty("name.full", "jMonkeyEngine (unknown version)");
}

@ -0,0 +1,11 @@
# THIS IS AN AUTO-GENERATED FILE..
# DO NOT MODIFY!
build.date=1900-01-01
git.revision=0
git.branch=unknown
git.hash=
git.hash.short=
git.tag=
name.full=jMonkeyEngine 3.1.0-UNKNOWN
version.number=3.1.0
version.tag=SNAPSHOT

@ -0,0 +1,109 @@
/*
Version Info Examples
=====================
Nightly Build Snapshot
* Full Name: jMonkeyEngine 3.1.0-5124
* POM Version: 3.1.0-SNAPSHOT
* NBM Version: 3.1.0.5124
* NBM UC Suffix: nightly/3.1/plugins
Nightly Build Snapshot (PBRIsComing branch)
* Full Name: jMonkeyEngine 3.1.0-PBRIsComing-5124
* POM Version: 3.1.0-PBRIsComing-SNAPSHOT
* NBM Version: 3.1.0.5124
* NBM UC Suffix: PBRIsComing-nightly/3.1/plugins
Alpha1 Release
* Full Name: jMonkeyEngine 3.1.0-alpha1
* POM Version: 3.1.0-alpha1
* NBM Version: 3.1.0.0
* NBM UC Suffix: alpha1/3.1/plugins
Final Release
* Full Name: jMonkeyEngine 3.1.0
* POM Version: 3.1.0
* NBM Version: 3.1.0.0
* NBM UC Suffix: stable/3.1/plugins
*/
import java.text.SimpleDateFormat
import org.ajoberstar.grgit.*
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.ajoberstar:gradle-git:1.2.0'
}
}
ext {
jmeRevision = 0
jmeGitHash = ""
jmeGitTag = ""
jmeShortGitHash = ""
jmeBuildDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date())
jmeBranchName = "unknown"
jmeFullName = "jMonkeyEngine ${jmeVersion}-UNKNOWN"
jmePomVersion = "unknown"
jmeNbmVersion = "0.0.0.0"
jmeNbmUcSuffix = "unknown"
}
task configureVersionInfo {
try {
def grgit = Grgit.open(project.file('.'))
jmeRevision = grgit.log(includes:['HEAD']).size()
jmeGitHash = grgit.head().id
jmeShortGitHash = grgit.head().abbreviatedId
jmeBranchName = grgit.branch.current.name
jmeGitTag = grgit.describe()
if (jmeGitTag == null) jmeGitTag = ""
jmeFullName = "jMonkeyEngine ${jmeVersion}"
jmePomVersion = jmeVersion
jmeNbmVersion = jmeVersion
if (jmeBranchName != "master") {
jmeFullName += "-${jmeBranchName}"
jmePomVersion += "-${jmeBranchName}"
jmeNbmUcSuffix = "${jmeBranchName}-"
} else {
jmeNbmUcSuffix = ""
}
if (jmeVersionTag == "SNAPSHOT") {
jmeNbmUcSuffix += "nightly"
} else if (jmeVersionTag == "") {
jmeNbmUcSuffix += "stable"
} else {
jmeNbmUcSuffix += jmeVersionTag
}
jmeNbmUcSuffix += "/" + jmeMainVersion + "/plugins"
if (jmeVersionTag == "SNAPSHOT") {
jmeFullName += "-${jmeRevision}"
jmePomVersion += "-SNAPSHOT"
jmeNbmVersion += ".${jmeRevision}"
} else if (jmeVersionTag == "") {
jmeNbmVersion += ".0"
} else {
jmeFullName += "-${jmeVersionTag}"
jmePomVersion += "-${jmeVersionTag}"
jmeNbmVersion += ".0"
}
logger.warn("Full Name: ${jmeFullName}")
logger.warn("POM Version: ${jmePomVersion}")
logger.warn("NBM Version: ${jmeNbmVersion}")
logger.warn("NBM UC Suffix: ${jmeNbmUcSuffix}")
} catch (ex) {
// Failed to get repo info
logger.warn("Failed to get repository info: " + ex.message + ". " + \
"Only partial build info will be generated.")
}
}
Loading…
Cancel
Save