Skip to content

Commit bda25f5

Browse files
committed
JVMCBC-1652 Read library version from version.properties
instead of JAR manifest. Motivation ---------- When the client library is shaded, its JAR manifest may be discarded or corrupted. In this scenario, reading the version from a dedicated class path resource is more reliable. A secondary benefit: unlike the manifest-based solution, reading a class path resource does not require building a JAR. Modifications ------------- Define a `src/main/resources-filtered` resource directory in the parent POM. Add a `version.properties` resource to each project that requires version introspection. Change-Id: I73e39587934028a614cf543ed7fe0235e8395383 Reviewed-on: https://review.couchbase.org/c/couchbase-jvm-clients/+/228834 Tested-by: Build Bot <[email protected]> Reviewed-by: Michael Reiche <[email protected]>
1 parent 4aebe69 commit bda25f5

File tree

8 files changed

+47
-6
lines changed

8 files changed

+47
-6
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
version=${project.version}
2+
gitHash=${buildNumber}

core-io/src/main/java/com/couchbase/client/core/env/VersionAndGitHash.java

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,19 @@
1717
package com.couchbase.client.core.env;
1818

1919
import com.couchbase.client.core.annotation.Stability;
20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
22+
23+
import java.io.IOException;
24+
import java.io.InputStream;
25+
import java.util.Properties;
2026

2127
import static java.util.Objects.requireNonNull;
2228

2329
@Stability.Internal
2430
public class VersionAndGitHash {
31+
private static final Logger log = LoggerFactory.getLogger(VersionAndGitHash.class);
32+
2533
private final String version;
2634
private final String gitHash;
2735

@@ -46,13 +54,24 @@ public String toString() {
4654
}
4755

4856
public static VersionAndGitHash from(Class<?> classInSamePackageAsVersionMetadata) {
49-
String value = classInSamePackageAsVersionMetadata.getPackage().getImplementationVersion();
50-
if (value == null) {
57+
String resourceName = "version.properties";
58+
try (InputStream is = classInSamePackageAsVersionMetadata.getResourceAsStream(resourceName)) {
59+
if (is == null) {
60+
log.warn("Resource '{}' not found in package {}", resourceName, classInSamePackageAsVersionMetadata.getPackage());
61+
return UNKNOWN;
62+
}
63+
Properties properties = new Properties();
64+
properties.load(is);
65+
String version = properties.getProperty("version");
66+
String gitHash = properties.getProperty("gitHash");
67+
68+
return new VersionAndGitHash(
69+
version == null ? "0.0.0" : version,
70+
gitHash == null ? "" : gitHash
71+
);
72+
} catch (IOException e) {
73+
log.warn("Failed to load '{}' from {}", resourceName, classInSamePackageAsVersionMetadata, e);
5174
return UNKNOWN;
5275
}
53-
String[] components = value.split("\\+", 2);
54-
return components.length == 1
55-
? new VersionAndGitHash(value, "")
56-
: new VersionAndGitHash(components[0], components[1]);
5776
}
5877
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
version=${project.version}
2+
gitHash=${buildNumber}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
version=${project.version}
2+
gitHash=${buildNumber}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
version=${project.version}
2+
gitHash=${buildNumber}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
version=${project.version}
2+
gitHash=${buildNumber}

pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,16 @@
200200
</modules>
201201

202202
<build>
203+
<resources>
204+
<resource>
205+
<directory>src/main/resources-filtered</directory>
206+
<filtering>true</filtering>
207+
</resource>
208+
<resource>
209+
<directory>src/main/resources</directory>
210+
</resource>
211+
</resources>
212+
203213
<pluginManagement>
204214
<plugins>
205215
<!-- Declare flatten in pluginManagement so modules that also use shade plugin
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
version=${project.version}
2+
gitHash=${buildNumber}

0 commit comments

Comments
 (0)