Parcourir la source

fix: gitee #I26BNJ

zengzhihong il y a 4 ans
Parent
commit
d49277f462

+ 1 - 0
build.gradle

@@ -116,6 +116,7 @@ subprojects {
     jar {
     jar {
         afterEvaluate {
         afterEvaluate {
             manifest {
             manifest {
+                attributes 'Implementation-Title': archiveBaseName
                 attributes 'Implementation-Version': archiveVersion
                 attributes 'Implementation-Version': archiveVersion
                 attributes 'Built-Gradle': gradle.gradleVersion
                 attributes 'Built-Gradle': gradle.gradleVersion
                 attributes 'Bundle-DocURL': 'https://mybatis.plus/'
                 attributes 'Bundle-DocURL': 'https://mybatis.plus/'

+ 38 - 3
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisPlusVersion.java

@@ -15,10 +15,19 @@
  */
  */
 package com.baomidou.mybatisplus.core;
 package com.baomidou.mybatisplus.core;
 
 
+import java.io.File;
+import java.io.IOException;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.CodeSource;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+
 /**
 /**
  * 获取Mybatis-Plus版本
  * 获取Mybatis-Plus版本
  *
  *
- * @author nieqiurong 2018/11/13.
+ * @author zengzhihong
  */
  */
 public class MybatisPlusVersion {
 public class MybatisPlusVersion {
 
 
@@ -26,8 +35,34 @@ public class MybatisPlusVersion {
     }
     }
 
 
     public static String getVersion() {
     public static String getVersion() {
-        Package pkg = MybatisPlusVersion.class.getPackage();
-        return (pkg != null ? pkg.getImplementationVersion() : null);
+        return determineSpringBootVersion();
+    }
+
+    private static String determineSpringBootVersion() {
+        final Package pkg = MybatisPlusVersion.class.getPackage();
+        if (pkg != null && pkg.getImplementationVersion() != null) {
+            return pkg.getImplementationVersion();
+        }
+        CodeSource codeSource = MybatisPlusVersion.class.getProtectionDomain().getCodeSource();
+        if (codeSource == null) {
+            return null;
+        }
+        URL codeSourceLocation = codeSource.getLocation();
+        try {
+            URLConnection connection = codeSourceLocation.openConnection();
+            if (connection instanceof JarURLConnection) {
+                return getImplementationVersion(((JarURLConnection) connection).getJarFile());
+            }
+            try (JarFile jarFile = new JarFile(new File(codeSourceLocation.toURI()))) {
+                return getImplementationVersion(jarFile);
+            }
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+
+    private static String getImplementationVersion(JarFile jarFile) throws IOException {
+        return jarFile.getManifest().getMainAttributes().getValue(Attributes.Name.IMPLEMENTATION_VERSION);
     }
     }
 
 
 }
 }