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/
|
||||
/netbeans/
|
||||
/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-desktop/build/
|
||||
/jme3-android-native/build/
|
||||
|
40
build.gradle
40
build.gradle
@ -1,15 +1,16 @@
|
||||
import org.gradle.api.artifacts.*
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:1.1.0'
|
||||
}
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:1.1.0'
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'base'
|
||||
apply from: file('version.gradle')
|
||||
|
||||
// This is applied to all sub projects
|
||||
subprojects {
|
||||
@ -114,7 +115,12 @@ task wrapper(type: Wrapper, description: 'Creates and deploys the Gradle wrapper
|
||||
gradleVersion = '2.2.1'
|
||||
}
|
||||
|
||||
String findNDK() {
|
||||
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')) {
|
||||
@ -127,27 +133,13 @@ String findNDK() {
|
||||
if (System.env.ANDROID_NDK != null) {
|
||||
ndkBuildPath = System.env.ANDROID_NDK + File.separator + ndkBuildFile
|
||||
}
|
||||
|
||||
if (new File(ndkBuildPath).exists()) {
|
||||
return ndkBuildPath
|
||||
} else {
|
||||
return null
|
||||
ndkExists = true
|
||||
ndkCommandPath = ndkBuildPath
|
||||
}
|
||||
}
|
||||
|
||||
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 {
|
||||
// @InputDirectory
|
||||
// def File inputDir
|
||||
|
@ -6,8 +6,8 @@ apply plugin: 'java'
|
||||
apply plugin: 'maven'
|
||||
apply plugin: 'maven-publish'
|
||||
|
||||
group = 'com.jme3'
|
||||
version = jmeVersion + '-' + jmeVersionTag
|
||||
group = 'com.jme3'
|
||||
version = jmePomVersion
|
||||
|
||||
sourceCompatibility = '1.6'
|
||||
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
||||
@ -22,6 +22,11 @@ repositories {
|
||||
dependencies {
|
||||
// Adding dependencies here will add the dependencies to each subproject.
|
||||
testCompile group: 'junit', name: 'junit', version: '4.10'
|
||||
jar {
|
||||
manifest {
|
||||
attributes 'Implementation-Title': 'jMonkeyEngine',
|
||||
'Implementation-Version': version
|
||||
}
|
||||
}
|
||||
|
||||
javadoc {
|
||||
|
@ -12,55 +12,22 @@ sourceSets {
|
||||
}
|
||||
}
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'org.ajoberstar:gradle-git:1.0.0-rc.1'
|
||||
}
|
||||
task updateVersionPropertiesFile << {
|
||||
def verfile = file('src/main/resources/com/jme3/system/version.properties')
|
||||
verfile.text = "# THIS IS AN AUTO-GENERATED FILE..\n" +
|
||||
"# DO NOT MODIFY!\n" +
|
||||
"build.date=${jmeBuildDate}\n" +
|
||||
"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
|
||||
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)
|
||||
compileJava.dependsOn(updateVersionPropertiesFile)
|
||||
|
||||
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