From 0c0fa570e7881695ca3c87fe55d952592974b99d Mon Sep 17 00:00:00 2001 From: Vignesh Raja Date: Thu, 22 Dec 2016 11:14:32 -0800 Subject: [PATCH] Add generated BuildConfig class containing version instead of using a resource file --- build.gradle | 2 +- core-api/build.gradle | 36 +++++++----- .../java/com/optimizely/ab/Optimizely.java | 3 +- .../ab/event/internal/BuildVersionInfo.java | 58 ------------------- .../ab/event/internal/EventBuilderV1.java | 3 +- .../ab/event/internal/EventBuilderV2.java | 3 +- .../ab/event/internal/payload/Event.java | 4 +- core-api/src/main/resources/.gitignore | 2 +- .../optimizely/ab/OptimizelyBuilderTest.java | 3 +- .../ab/event/internal/EventBuilderV2Test.java | 5 +- gradle/license.gradle | 3 +- 11 files changed, 38 insertions(+), 84 deletions(-) delete mode 100644 core-api/src/main/java/com/optimizely/ab/event/internal/BuildVersionInfo.java diff --git a/build.gradle b/build.gradle index e5d26de8d..80e4977b4 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ buildscript { plugins { id 'net.researchgate.release' version '2.2.1' id 'nebula.optional-base' version '3.0.3' - id "me.champeau.gradle.jmh" version "0.3.1" + id 'me.champeau.gradle.jmh' version '0.3.1' } allprojects { diff --git a/core-api/build.gradle b/core-api/build.gradle index 0ae215a8c..b83a55a92 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -1,3 +1,16 @@ +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6' + } +} + +plugins { + id 'de.fuerstenau.buildconfig' version '1.1.7' +} + dependencies { compile group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: jacksonVersion @@ -12,24 +25,21 @@ dependencies { provided group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jacksonVersion, optional } -task build << { - // add the build version information into a file that'll go into the distribution - ext.buildVersion = new File(projectDir, "src/main/resources/optimizely-build-version") - buildVersion.text = version +apply plugin: 'com.jfrog.bintray' +apply plugin: 'de.fuerstenau.buildconfig' +apply plugin: 'maven-publish' + +buildConfig { + appName = 'core-api' + version = rootProject.version } -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6' +sourceSets { + main { + java.srcDir "${buildDir}/gen/buildconfig/src/main/" } } -apply plugin: 'com.jfrog.bintray' -apply plugin: 'maven-publish' - publishing { publications { mavenJava(MavenPublication) { diff --git a/core-api/src/main/java/com/optimizely/ab/Optimizely.java b/core-api/src/main/java/com/optimizely/ab/Optimizely.java index 6fb6ea277..2b7ef2478 100644 --- a/core-api/src/main/java/com/optimizely/ab/Optimizely.java +++ b/core-api/src/main/java/com/optimizely/ab/Optimizely.java @@ -33,7 +33,6 @@ import com.optimizely.ab.error.RaiseExceptionErrorHandler; import com.optimizely.ab.event.EventHandler; import com.optimizely.ab.event.LogEvent; -import com.optimizely.ab.event.internal.BuildVersionInfo; import com.optimizely.ab.event.internal.EventBuilder; import com.optimizely.ab.event.internal.EventBuilderV1; import com.optimizely.ab.event.internal.EventBuilderV2; @@ -693,7 +692,7 @@ public Optimizely build() throws ConfigParseException { } if (clientVersion == null) { - clientVersion = BuildVersionInfo.VERSION; + clientVersion = BuildConfig.VERSION; } if (eventBuilder == null) { diff --git a/core-api/src/main/java/com/optimizely/ab/event/internal/BuildVersionInfo.java b/core-api/src/main/java/com/optimizely/ab/event/internal/BuildVersionInfo.java deleted file mode 100644 index b53e6fc74..000000000 --- a/core-api/src/main/java/com/optimizely/ab/event/internal/BuildVersionInfo.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * - * Copyright 2016, Optimizely - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.optimizely.ab.event.internal; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.nio.charset.Charset; - -import javax.annotation.concurrent.Immutable; - -/** - * Helper class to retrieve the SDK version information. - */ -@Immutable -public final class BuildVersionInfo { - - private static final Logger logger = LoggerFactory.getLogger(BuildVersionInfo.class); - - public final static String VERSION = readVersionNumber(); - private static String readVersionNumber() { - BufferedReader bufferedReader = - new BufferedReader( - new InputStreamReader(BuildVersionInfo.class.getResourceAsStream("/optimizely-build-version"), - Charset.forName("UTF-8"))); - try { - return bufferedReader.readLine(); - } catch (IOException e) { - logger.error("unable to read version number"); - return "unknown"; - } finally { - try { - bufferedReader.close(); - } catch (IOException e) { - logger.error("unable to close reader cleanly"); - } - } - } - - private BuildVersionInfo() { } -} diff --git a/core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV1.java b/core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV1.java index ab6540ed2..beff26c5e 100644 --- a/core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV1.java +++ b/core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV1.java @@ -16,6 +16,7 @@ */ package com.optimizely.ab.event.internal; +import com.optimizely.ab.BuildConfig; import com.optimizely.ab.event.LogEvent; import com.optimizely.ab.internal.ProjectValidationUtils; import com.optimizely.ab.bucketing.Bucketer; @@ -51,7 +52,7 @@ public class EventBuilderV1 extends EventBuilder { // offline conversion parameter names and prefixes private static final String ACCOUNT_ID_PARAM = "d"; - private static final String BUILD_VERSION = "java-sdk-" + BuildVersionInfo.VERSION; + private static final String BUILD_VERSION = "java-sdk-" + BuildConfig.VERSION; private static final String EMPTY_BODY = ""; private static final String EXPERIMENT_PARAM_PREFIX = "x"; private static final String GOAL_ID_PARAM = "g"; diff --git a/core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV2.java b/core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV2.java index 69837df83..3c12408f4 100644 --- a/core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV2.java +++ b/core-api/src/main/java/com/optimizely/ab/event/internal/EventBuilderV2.java @@ -16,6 +16,7 @@ */ package com.optimizely.ab.event.internal; +import com.optimizely.ab.BuildConfig; import com.optimizely.ab.annotations.VisibleForTesting; import com.optimizely.ab.bucketing.Bucketer; import com.optimizely.ab.config.Attribute; @@ -63,7 +64,7 @@ public class EventBuilderV2 extends EventBuilder { private Serializer serializer; public EventBuilderV2() { - this(ClientEngine.JAVA_SDK, BuildVersionInfo.VERSION); + this(ClientEngine.JAVA_SDK, BuildConfig.VERSION); } public EventBuilderV2(ClientEngine clientEngine, String clientVersion) { diff --git a/core-api/src/main/java/com/optimizely/ab/event/internal/payload/Event.java b/core-api/src/main/java/com/optimizely/ab/event/internal/payload/Event.java index ea7627685..336119111 100644 --- a/core-api/src/main/java/com/optimizely/ab/event/internal/payload/Event.java +++ b/core-api/src/main/java/com/optimizely/ab/event/internal/payload/Event.java @@ -18,7 +18,7 @@ import com.fasterxml.jackson.annotation.JsonValue; -import com.optimizely.ab.event.internal.BuildVersionInfo; +import com.optimizely.ab.BuildConfig; public class Event { @@ -39,7 +39,7 @@ public String getClientEngineValue() { } String clientEngine = ClientEngine.JAVA_SDK.getClientEngineValue(); - String clientVersion = BuildVersionInfo.VERSION; + String clientVersion = BuildConfig.VERSION; public String getClientEngine() { return clientEngine; diff --git a/core-api/src/main/resources/.gitignore b/core-api/src/main/resources/.gitignore index 11592f9ac..8b1378917 100644 --- a/core-api/src/main/resources/.gitignore +++ b/core-api/src/main/resources/.gitignore @@ -1 +1 @@ -optimizely-build-version + diff --git a/core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java b/core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java index 59a5ffefb..8cc30a4ea 100644 --- a/core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java +++ b/core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java @@ -22,7 +22,6 @@ import com.optimizely.ab.error.ErrorHandler; import com.optimizely.ab.error.NoOpErrorHandler; import com.optimizely.ab.event.EventHandler; -import com.optimizely.ab.event.internal.BuildVersionInfo; import com.optimizely.ab.event.internal.EventBuilderV2; import com.optimizely.ab.event.internal.payload.Event.ClientEngine; @@ -143,7 +142,7 @@ public void withDefaultClientVersion() throws Exception { Optimizely optimizelyClient = Optimizely.builder(validConfigJsonV2(), mockEventHandler) .build(); - assertThat(((EventBuilderV2)optimizelyClient.eventBuilder).clientVersion, is(BuildVersionInfo.VERSION)); + assertThat(((EventBuilderV2)optimizelyClient.eventBuilder).clientVersion, is(BuildConfig.VERSION)); } @Test diff --git a/core-api/src/test/java/com/optimizely/ab/event/internal/EventBuilderV2Test.java b/core-api/src/test/java/com/optimizely/ab/event/internal/EventBuilderV2Test.java index 1c507bec7..547993656 100644 --- a/core-api/src/test/java/com/optimizely/ab/event/internal/EventBuilderV2Test.java +++ b/core-api/src/test/java/com/optimizely/ab/event/internal/EventBuilderV2Test.java @@ -18,6 +18,7 @@ import com.google.gson.Gson; +import com.optimizely.ab.BuildConfig; import com.optimizely.ab.bucketing.Bucketer; import com.optimizely.ab.event.LogEvent; import com.optimizely.ab.config.Attribute; @@ -97,7 +98,7 @@ public void createImpressionEvent() throws Exception { assertThat(impression.getAccountId(), is(projectConfig.getAccountId())); assertThat(impression.getUserFeatures(), is(expectedUserFeatures)); assertThat(impression.getClientEngine(), is(ClientEngine.JAVA_SDK.getClientEngineValue())); - assertThat(impression.getClientVersion(), is(BuildVersionInfo.VERSION)); + assertThat(impression.getClientVersion(), is(BuildConfig.VERSION)); } /** @@ -210,7 +211,7 @@ public void createConversionEvent() throws Exception { assertFalse(conversion.getIsGlobalHoldback()); assertThat(conversion.getAnonymizeIP(), is(projectConfig.getAnonymizeIP())); assertThat(conversion.getClientEngine(), is(ClientEngine.JAVA_SDK.getClientEngineValue())); - assertThat(conversion.getClientVersion(), is(BuildVersionInfo.VERSION)); + assertThat(conversion.getClientVersion(), is(BuildConfig.VERSION)); } /** diff --git a/gradle/license.gradle b/gradle/license.gradle index 05abd3edd..0f1383296 100644 --- a/gradle/license.gradle +++ b/gradle/license.gradle @@ -2,7 +2,8 @@ subprojects { apply plugin: 'license' license { header rootProject.file('gradle/HEADER') - excludes(['**/*.properties', '**/*.txt', '**/*.conf', '**/*.xml', '**/*.json', '**/LogbackVerifier.java']) + excludes(['**/*.properties', '**/*.txt', '**/*.conf', '**/*.xml', '**/*.json', '**/LogbackVerifier.java', + '**/BuildConfig.java']) ext.year = Calendar.getInstance().get(Calendar.YEAR) } }