diff --git a/core-api/build.gradle b/core-api/build.gradle index 43e80254d..749269c70 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -1,7 +1,3 @@ -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 @@ -16,16 +12,8 @@ dependencies { provided group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jacksonVersion, optional } -apply plugin: 'de.fuerstenau.buildconfig' -apply plugin: 'maven-publish' - -buildConfig { - appName = 'core-api' - version = rootProject.version +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 } - -sourceSets { - main { - java.srcDir "${buildDir}/gen/buildconfig/src/main/" - } -} \ No newline at end of file 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 2df733a17..3f85edbff 100644 --- a/core-api/src/main/java/com/optimizely/ab/Optimizely.java +++ b/core-api/src/main/java/com/optimizely/ab/Optimizely.java @@ -33,6 +33,7 @@ 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; @@ -695,7 +696,7 @@ public Optimizely build() throws ConfigParseException { } if (clientVersion == null) { - clientVersion = BuildConfig.VERSION; + clientVersion = BuildVersionInfo.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 new file mode 100644 index 000000000..9d4778797 --- /dev/null +++ b/core-api/src/main/java/com/optimizely/ab/event/internal/BuildVersionInfo.java @@ -0,0 +1,58 @@ +/** + * + * Copyright 2016, Optimizely and contributors + * + * 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() { } +} \ No newline at end of file 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 1171a723a..86100597d 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,7 +16,6 @@ */ 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; @@ -52,7 +51,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-" + BuildConfig.VERSION; + private static final String BUILD_VERSION = "java-sdk-" + BuildVersionInfo.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 e60c81cdf..72d46425f 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,7 +16,6 @@ */ 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; @@ -64,7 +63,7 @@ public class EventBuilderV2 extends EventBuilder { private Serializer serializer; public EventBuilderV2() { - this(ClientEngine.JAVA_SDK, BuildConfig.VERSION); + this(ClientEngine.JAVA_SDK, BuildVersionInfo.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 8b763641a..b18bc7fb9 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.BuildConfig; +import com.optimizely.ab.event.internal.BuildVersionInfo; public class Event { @@ -39,7 +39,7 @@ public String getClientEngineValue() { } String clientEngine = ClientEngine.JAVA_SDK.getClientEngineValue(); - String clientVersion = BuildConfig.VERSION; + String clientVersion = BuildVersionInfo.VERSION; public String getClientEngine() { return clientEngine; diff --git a/core-api/src/main/resources/.gitignore b/core-api/src/main/resources/.gitignore index 8b1378917..c3d5bee1f 100644 --- a/core-api/src/main/resources/.gitignore +++ b/core-api/src/main/resources/.gitignore @@ -1 +1 @@ - +optimizely-build-version \ No newline at end of file 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 bbba8883c..2a1700f4a 100644 --- a/core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java +++ b/core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java @@ -22,6 +22,7 @@ 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; @@ -142,7 +143,7 @@ public void withDefaultClientVersion() throws Exception { Optimizely optimizelyClient = Optimizely.builder(validConfigJsonV2(), mockEventHandler) .build(); - assertThat(((EventBuilderV2)optimizelyClient.eventBuilder).clientVersion, is(BuildConfig.VERSION)); + assertThat(((EventBuilderV2)optimizelyClient.eventBuilder).clientVersion, is(BuildVersionInfo.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 05497905d..43027ae70 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,7 +18,6 @@ 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; @@ -98,7 +97,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(BuildConfig.VERSION)); + assertThat(impression.getClientVersion(), is(BuildVersionInfo.VERSION)); } /** @@ -211,7 +210,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(BuildConfig.VERSION)); + assertThat(conversion.getClientVersion(), is(BuildVersionInfo.VERSION)); } /** diff --git a/gradle/license.gradle b/gradle/license.gradle index 7e5b07479..7ae4e4bf3 100644 --- a/gradle/license.gradle +++ b/gradle/license.gradle @@ -2,8 +2,7 @@ subprojects { apply plugin: 'license' license { header rootProject.file('gradle/HEADER') - excludes(['**/*.properties', '**/*.txt', '**/*.conf', '**/*.xml', '**/*.json', '**/LogbackVerifier.java', - '**/BuildConfig.java']) + excludes(['**/*.properties', '**/*.txt', '**/*.conf', '**/*.xml', '**/*.json', '**/LogbackVerifier.java']) ext.year = '2016' // year that the project was created } }