diff --git a/buildSrc/src/main/groovy/versions/VersionsResourceTasks.groovy b/buildSrc/src/main/groovy/versions/VersionsResourceTasks.groovy new file mode 100644 index 0000000000..6327a935c0 --- /dev/null +++ b/buildSrc/src/main/groovy/versions/VersionsResourceTasks.groovy @@ -0,0 +1,49 @@ +/* + * Copyright 2002-2018 the original author or authors. + * + * Licensed 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 versions + +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction + +/** + * @author Rob Winch + */ +class VersionsResourceTasks extends DefaultTask { + @OutputFile + File versionsFile; + + @Input + Closure> versions; + + void setVersions(Map versions) { + this.versions = { versions }; + } + + void setVersions(Closure> versions) { + this.versions = versions + } + + @TaskAction + void generateVersions() { + versionsFile.parentFile.mkdirs() + versionsFile.createNewFile() + Properties versionsProperties = new Properties() + versionsProperties.putAll(versions.call()) + versionsProperties.store(versionsFile.newWriter(), null) + } +} diff --git a/core/spring-security-core.gradle b/core/spring-security-core.gradle index 8cfb6fa838..042bdd5231 100644 --- a/core/spring-security-core.gradle +++ b/core/spring-security-core.gradle @@ -34,6 +34,17 @@ dependencies { testRuntime 'org.hsqldb:hsqldb' } +task springVersion(type: versions.VersionsResourceTasks) { + versionsFile = file("${buildDir}/versions/spring-security.versions") + versions = { project.dependencyManagement.managedVersions } +} + +tasks.processResources { + into('META-INF') { + from project.tasks.springVersion.outputs + } +} + tasks.jar.from { includeProject.sourceSets.main.output } tasks.sourcesJar.from {includeProject.sourceSets.main.java} diff --git a/core/src/main/java/org/springframework/security/core/SpringSecurityCoreVersion.java b/core/src/main/java/org/springframework/security/core/SpringSecurityCoreVersion.java index 2a5a4a85c6..a8348a5c42 100644 --- a/core/src/main/java/org/springframework/security/core/SpringSecurityCoreVersion.java +++ b/core/src/main/java/org/springframework/security/core/SpringSecurityCoreVersion.java @@ -20,6 +20,9 @@ import org.apache.commons.logging.LogFactory; import org.springframework.core.SpringVersion; +import java.io.IOException; +import java.util.Properties; + /** * Internal class used for checking version compatibility in a deployed application. * @@ -40,7 +43,7 @@ public class SpringSecurityCoreVersion { */ public static final long SERIAL_VERSION_UID = 500L; - static final String MIN_SPRING_VERSION = "5.0.5.RELEASE"; + static final String MIN_SPRING_VERSION = getSpringVersion(); static { performVersionChecks(); @@ -64,6 +67,9 @@ public class SpringSecurityCoreVersion { * @param minSpringVersion */ private static void performVersionChecks(String minSpringVersion) { + if (minSpringVersion == null) { + return; + } // Check Spring Compatibility String springVersion = SpringVersion.getVersion(); String version = getVersion(); @@ -95,4 +101,18 @@ public class SpringSecurityCoreVersion { } return Boolean.getBoolean(DISABLE_CHECKS); } + + /** + * Loads the spring version or null if it cannot be found. + * @return + */ + private static String getSpringVersion() { + Properties properties = new Properties(); + try { + properties.load(SpringSecurityCoreVersion.class.getClassLoader().getResourceAsStream("META-INF/spring-security.versions")); + } catch (IOException e) { + return null; + } + return properties.getProperty("org.springframework:spring-core"); + } }