|
@@ -15,10 +15,19 @@
|
|
|
*/
|
|
|
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版本
|
|
|
*
|
|
|
- * @author nieqiurong 2018/11/13.
|
|
|
+ * @author zengzhihong
|
|
|
*/
|
|
|
public class MybatisPlusVersion {
|
|
|
|
|
@@ -26,8 +35,34 @@ public class MybatisPlusVersion {
|
|
|
}
|
|
|
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
}
|