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
This commit is contained in:
parent
0d7dea20df
commit
17887b1fb0
2
.gitignore
vendored
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/
|
||||||
|
40
build.gradle
40
build.gradle
@ -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" +
|
||||||
|
"git.tag=${jmeGitTag}\n" +
|
||||||
|
"name.full=${jmeFullName}\n" +
|
||||||
|
"version.number=${jmeVersion}\n" +
|
||||||
|
"version.tag=${jmeVersionTag}"
|
||||||
}
|
}
|
||||||
|
|
||||||
import java.text.SimpleDateFormat
|
compileJava.dependsOn(updateVersionPropertiesFile)
|
||||||
import org.ajoberstar.grgit.*
|
|
||||||
|
|
||||||
task updateVersion << {
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
}
|
}
|
||||||
|
65
jme3-core/src/main/java/com/jme3/system/JmeVersion.java
Normal file
65
jme3-core/src/main/java/com/jme3/system/JmeVersion.java
Normal file
@ -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
|
109
version.gradle
Normal file
109
version.gradle
Normal file
@ -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…
x
Reference in New Issue
Block a user