@ -16,6 +16,14 @@
package org.springframework.boot.gradle.plugin ;
import java.io.File ;
import java.io.IOException ;
import java.net.JarURLConnection ;
import java.net.URL ;
import java.net.URLConnection ;
import java.util.jar.Attributes ;
import java.util.jar.JarFile ;
import io.spring.gradle.dependencymanagement.DependencyManagementPlugin ;
import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension ;
import org.gradle.api.Action ;
@ -30,8 +38,7 @@ import org.gradle.api.Project;
* /
final class DependencyManagementPluginAction implements PluginApplicationAction {
private static final String SPRING_BOOT_VERSION = DependencyManagementPluginAction . class
. getPackage ( ) . getImplementationVersion ( ) ;
private static final String SPRING_BOOT_VERSION = determineSpringBootVersion ( ) ;
private static final String SPRING_BOOT_BOM = "org.springframework.boot:spring-boot-dependencies:"
+ SPRING_BOOT_VERSION ;
@ -47,4 +54,32 @@ final class DependencyManagementPluginAction implements PluginApplicationAction
return DependencyManagementPlugin . class ;
}
private static String determineSpringBootVersion ( ) {
String implementationVersion = DependencyManagementPluginAction . class . getPackage ( )
. getImplementationVersion ( ) ;
if ( implementationVersion ! = null ) {
return implementationVersion ;
}
URL codeSourceLocation = DependencyManagementPluginAction . class
. getProtectionDomain ( ) . getCodeSource ( ) . 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 ) ;
}
}