chickenlj closed pull request #1834: Update the method to fetch dubbo version 
from dubboVersion.properties filled by pom.xml
URL: https://github.com/apache/incubator-dubbo/pull/1834
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/dubbo-common/pom.xml b/dubbo-common/pom.xml
index 63b15fbe78..c09aa470a2 100644
--- a/dubbo-common/pom.xml
+++ b/dubbo-common/pom.xml
@@ -70,4 +70,12 @@
             <artifactId>fst</artifactId>
         </dependency>
     </dependencies>
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources/</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
 </project>
\ No newline at end of file
diff --git a/dubbo-common/src/main/java/com/alibaba/dubbo/common/Version.java 
b/dubbo-common/src/main/java/com/alibaba/dubbo/common/Version.java
index 97e3a2173d..09d61eee06 100644
--- a/dubbo-common/src/main/java/com/alibaba/dubbo/common/Version.java
+++ b/dubbo-common/src/main/java/com/alibaba/dubbo/common/Version.java
@@ -19,11 +19,15 @@
 import com.alibaba.dubbo.common.logger.Logger;
 import com.alibaba.dubbo.common.logger.LoggerFactory;
 import com.alibaba.dubbo.common.utils.ClassHelper;
+import com.alibaba.dubbo.common.utils.StringUtils;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.net.URL;
 import java.security.CodeSource;
 import java.util.Enumeration;
 import java.util.HashSet;
+import java.util.Properties;
 import java.util.Set;
 
 /**
@@ -34,6 +38,8 @@
     private static final String DEFAULT_DUBBO_VERSION = "2.0.0";
     private static final Logger logger = 
LoggerFactory.getLogger(Version.class);
     private static final String VERSION = getVersion(Version.class, 
DEFAULT_DUBBO_VERSION);
+    private static final String DUBBO_VERSION_PROPERTIES_PATH = 
"/dubboVersion.properties";
+    private static final String DUBBO_VERSION_KEY = "dubbo.version";
 
     static {
         // check if there's duplicated jar
@@ -47,24 +53,38 @@ public static String getVersion() {
         return VERSION;
     }
 
-
-    private static boolean hasResource(String path) {
+    /**
+     * get version from dubboVersion.properties filled by pom.xml
+     *
+     * @return
+     */
+    private static String getVersionFromConfigFile() {
+        String version = null;
         try {
-            return Version.class.getClassLoader().getResource(path) != null;
-        } catch (Throwable t) {
-            return false;
+            InputStream inputStream = 
Version.class.getResourceAsStream(DUBBO_VERSION_PROPERTIES_PATH);
+            Properties properties = new Properties();
+            properties.load(inputStream);
+            version = properties.getProperty(DUBBO_VERSION_KEY);
+        } catch (IOException e) {
+            logger.error("return version error " + e.getMessage(), e);
         }
+        return version;
     }
 
     public static String getVersion(Class<?> cls, String defaultVersion) {
         try {
-            // find version info from MANIFEST.MF first
-            String version = cls.getPackage().getImplementationVersion();
-            if (version == null || version.length() == 0) {
-                version = cls.getPackage().getSpecificationVersion();
+            // find version info from dubboVersion.properties
+            String version = getVersionFromConfigFile();
+            if (StringUtils.isNotEmpty(version)) {
+                return version;
             }
-            if (version == null || version.length() == 0) {
-                // guess version fro jar file name if nothing's found from 
MANIFEST.MF
+            // find version info from MANIFEST.MF first
+            version = cls.getPackage().getImplementationVersion();
+            if (StringUtils.isNotEmpty(version)) {
+                String specificationVersion = 
cls.getPackage().getSpecificationVersion();
+                return StringUtils.isNotEmpty(specificationVersion) ? 
specificationVersion : defaultVersion;
+            } else {
+                // guess version from jar file name if nothing's found from 
from dubboVersion.properties and MANIFEST.MF
                 CodeSource codeSource = 
cls.getProtectionDomain().getCodeSource();
                 if (codeSource == null) {
                     logger.info("No codeSource for class " + cls.getName() + " 
when getVersion, use default version " + defaultVersion);
@@ -89,11 +109,12 @@ public static String getVersion(Class<?> cls, String 
defaultVersion) {
                             }
                         }
                         version = file;
+                        return StringUtils.isNotEmpty(version) ? version : 
defaultVersion;
                     }
                 }
             }
             // return default version if no version info is found
-            return version == null || version.length() == 0 ? defaultVersion : 
version;
+            return defaultVersion;
         } catch (Throwable e) {
             // return default version when any exception is thrown
             logger.error("return default version, ignore exception " + 
e.getMessage(), e);
diff --git a/dubbo-common/src/main/resources/dubboVersion.properties 
b/dubbo-common/src/main/resources/dubboVersion.properties
new file mode 100644
index 0000000000..26d40fe53c
--- /dev/null
+++ b/dubbo-common/src/main/resources/dubboVersion.properties
@@ -0,0 +1 @@
+dubbo.version=${project.version}
\ No newline at end of file
diff --git 
a/dubbo-common/src/test/java/com/alibaba/dubbo/common/VersionTest.java 
b/dubbo-common/src/test/java/com/alibaba/dubbo/common/VersionTest.java
new file mode 100644
index 0000000000..97703de375
--- /dev/null
+++ b/dubbo-common/src/test/java/com/alibaba/dubbo/common/VersionTest.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.alibaba.dubbo.common;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * version test
+ */
+public class VersionTest {
+
+    public static final String DEFAULT_VERSION = "2.0.0";
+    
+    @Test
+    public void testGetVersion() {
+        String version = Version.getVersion();
+        Assert.assertNotNull(version);
+        Assert.assertNotEquals(version, DEFAULT_VERSION);
+    }
+
+    @Test
+    public void testGetClassVersion() {
+        String version = Version.getVersion(this.getClass(), DEFAULT_VERSION);
+        Assert.assertNotNull(version);
+        Assert.assertNotEquals(version, DEFAULT_VERSION);
+    }
+}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to