diff --git a/.gitignore b/.gitignore
index 81f392e62b..eee4e3e0d0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,5 +4,6 @@ target/
.settings/
build/
*.log
+*.iml
.gradle/
gradle.properties
diff --git a/acl/acl.gradle b/acl/acl.gradle
index 550a7614d6..c9a4fe8132 100644
--- a/acl/acl.gradle
+++ b/acl/acl.gradle
@@ -5,7 +5,6 @@ dependencies {
"net.sf.ehcache:ehcache:$ehcacheVersion",
"org.springframework:spring-aop:$springVersion",
"org.springframework:spring-context:$springVersion",
- "org.springframework:spring-core:$springVersion",
"org.springframework:spring-tx:$springVersion",
"org.springframework:spring-jdbc:$springVersion"
diff --git a/aspects/aspects.gradle b/aspects/aspects.gradle
new file mode 100644
index 0000000000..3e3ae8fc6c
--- /dev/null
+++ b/aspects/aspects.gradle
@@ -0,0 +1,5 @@
+
+dependencies {
+ compile project(':spring-security-core'),
+ "org.springframework:spring-beans:$springVersion"
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 3a4f2e0c23..020484a4c9 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,3 @@
-import java.util.jar.Manifest
-import org.gradle.api.tasks.bundling.GradleManifest
-
apply id: 'base'
allprojects {
@@ -11,127 +8,28 @@ allprojects {
group = 'org.springframework.security'
repositories {
- mavenRepo name:'Local', urls:'file:///Users/luke/.m2/repository'
+ mavenRepo name:'Local', urls: "file://" + System.properties['user.home'] + "/.m2/repository"
mavenCentral()
-// mavenRepo name:'SpringSource Milestone Repo', urls:'http://repository.springsource.com/maven/bundles/milestone'
+ mavenRepo name: 'SpringSource Milestone Repo', urls: 'http://repository.springsource.com/maven/bundles/milestone'
+ mavenRepo name: 'SpringSource Maven Snapshot Repo', urls: 'http://maven.springframework.org/snapshot/'
+ mavenRepo name: 'SpringSource Enterprise Release', urls: 'http://repository.springsource.com/maven/bundles/release'
+ mavenRepo name: 'SpringSource Enterprise External', urls: 'http://repository.springsource.com/maven/bundles/external'
}
}
-configure(javaProjects()) {
- apply id: 'java'
-
- springVersion = '3.0.1.RELEASE'
- springLdapVersion = '1.3.0.RELEASE'
- ehcacheVersion = '1.6.2'
- aspectjVersion = '1.6.8'
- apacheDsVersion = '1.5.5'
- jstlVersion = '1.1.2'
- jettyVersion = '6.1.22'
-
- configurations {
- bundlor
- provided
- }
-
- dependencies {
- compile 'commons-logging:commons-logging:1.1.1'
-
- testCompile 'junit:junit:4.7',
- 'org.mockito:mockito-core:1.7',
- 'org.jmock:jmock:2.5.1',
- 'org.jmock:jmock-junit4:2.5.1',
- 'org.hamcrest:hamcrest-core:1.1',
- 'org.hamcrest:hamcrest-library:1.1',
- "org.springframework:spring-test:$springVersion"
- bundlor 'com.springsource.bundlor:com.springsource.bundlor.ant:1.0.0.RC1',
- 'com.springsource.bundlor:com.springsource.bundlor:1.0.0.RC1',
- 'com.springsource.bundlor:com.springsource.bundlor.blint:1.0.0.RC1'
- }
-
- sourceSets {
- main {
- compileClasspath = compileClasspath + configurations.provided
- }
- test {
- compileClasspath = compileClasspath + configurations.provided
- runtimeClasspath = runtimeClasspath + configurations.provided
- }
- }
-
- test {
- jvmArgs = ['-ea', '-Xms128m', '-Xmx500m', '-XX:MaxPermSize=128m']
- }
-
- task bundlor (dependsOn: compileJava) << {
- if (!dependsOnTaskDidWork()) {
- return
- }
- ant.taskdef(resource: 'com/springsource/bundlor/ant/antlib.xml', classpath: configurations.bundlor.asPath)
- File template = new File(projectDir, 'template.mf')
- mkdir(buildDir, 'bundlor')
- if (template.exists()) {
- ant.bundlor(inputPath: sourceSets.main.classesDir, outputPath: "$buildDir/bundlor", manifestTemplatePath: template) {
- property(name: 'version', value: "$version")
- property(name: 'spring.version', value: "$springVersion")
- }
- // See GRADLE-395 for support for using an existing manifest
- jar.manifest = new GradleManifest(new Manifest(new File("$buildDir/bundlor/META-INF/MANIFEST.MF").newInputStream()))
- }
- }
-
- jar.dependsOn bundlor
+configure(javaProjects) {
+ apply url: "$rootDir/gradle/javaprojects.gradle"
+ apply url: "$rootDir/gradle/maven.gradle"
}
-configure(javaProjects()) {
- apply id: 'maven'
-
- // Create a source jar for uploading
- task sourceJar(type: Jar) {
- classifier = 'sources'
- from sourceSets.main.java
- }
-
- configurations {
- deployerJars
- }
-
- artifacts {
- archives sourceJar
- }
-
- dependencies {
- deployerJars "org.springframework.build.aws:org.springframework.build.aws.maven:2.0.1.BUILD-SNAPSHOT"
- }
-
- uploadArchives {
- repositories.mavenDeployer {
- configuration = configurations.deployerJars
- if (releaseBuild) {
- // "mavenSyncRepoDir" should be set in properties
- repository(url: mavenSyncRepoDir)
- } else {
- s3credentials = [userName: s3AccessKey, passphrase: s3SecretAccessKey]
- repository(url: "s3://maven.springframework.org/milestone") {
- authentication(s3credentials)
- }
- snapshotRepository(url: "s3://maven.springframework.org/snapshot") {
- authentication(s3credentials)
- }
- }
- }
- }
-
- conf2ScopeMappings.addMapping(1, configurations.provided, "provided")
-}
-
-configure(coreModuleProjects()) {
+configure(coreModuleProjects) {
+ apply url: "$rootDir/gradle/bundlor.gradle"
// Gives better names in structure101 jar diagram
sourceSets.main.classesDir = new File(buildDir, "classes/" + project.name.substring("spring-security".length() + 1))
}
-repositories {
- // Required for ant s3 task
- mavenRepo name: "s2.com release", urls: "http://repository.springsource.com/maven/bundles/release"
+configure (aspectjProjects) {
+ apply url: "$rootDir/gradle/aspectj.gradle"
}
configurations {
@@ -150,12 +48,13 @@ task apidocs(type: Javadoc) {
title = "Spring Security $version API"
optionsFile = file("$buildDir/tmp/javadoc.options")
- source coreModuleProjects().collect { project ->
+ source coreModuleProjects.collect {project ->
project.sourceSets.main.allJava
}
- classpath = files(coreModuleProjects().collect { project ->
- project.sourceSets.main.compileClasspath })
+ classpath = files(coreModuleProjects.collect {project ->
+ project.sourceSets.main.compileClasspath
+ })
}
task apitar(type: Tar, dependsOn: apidocs) {
@@ -174,31 +73,39 @@ task doctar(type: Tar, dependsOn: ':manual:doc') {
}
}
-def username;
-def password;
-
-task login << {
- ant.input("Please enter the ssh username for host '$sshHost'", addproperty: "ssh.username")
- ant.input("Please enter the ssh password '$sshHost'", addproperty: "ssh.password")
- username = ant.properties['ssh.username']
- password = ant.properties['ssh.password']
+task login {
+ // add dynamic properties to login task
+ username = null
+ password = null
+ doFirst {
+ ant {
+ input("Please enter the ssh username for host '$sshHost'", addproperty: "ssh.username")
+ input("Please enter the ssh password '$sshHost'", addproperty: "ssh.password")
+ }
+ username = ant.properties['ssh.username']
+ password = ant.properties['ssh.password']
+ }
}
-task uploadApidocs (dependsOn: login) << {
- ant.scp(file: apitar.archivePath, todir: "$username@$sshHost:$remoteDocsDir", password: password)
- ant.sshexec(host: sshHost, username: username, password: password, command: "cd $remoteDocsDir && tar -xjf ${apitar.archiveName}")
- ant.sshexec(host: sshHost, username: username, password: password, command: "rm $remoteDocsDir/${apitar.archiveName}")
+task uploadApidocs(dependsOn: login) << {
+ ant {
+ scp(file: apitar.archivePath, todir: "$login.username@$sshHost:$remoteDocsDir", password: login.password)
+ sshexec(host: sshHost, username: login.username, password: login.password, command: "cd $remoteDocsDir && tar -xjf ${apitar.archiveName}")
+ sshexec(host: sshHost, username: login.username, password: login.password, command: "rm $remoteDocsDir/${apitar.archiveName}")
+ }
}
-task uploadManual (dependsOn: login) << {
- ant.scp(file: doctar.archivePath, todir: "$username@$sshHost:$remoteDocsDir", password: password)
- ant.sshexec(host: sshHost, username: username, password: password, command: "cd $remoteDocsDir && tar -xjf ${doctar.archiveName}")
- ant.sshexec(host: sshHost, username: username, password: password, command: "rm $remoteDocsDir/${doctar.archiveName}")
+task uploadManual(dependsOn: login) << {
+ ant {
+ scp(file: doctar.archivePath, todir: "$login.username@$sshHost:$remoteDocsDir", password: login.password)
+ sshexec(host: sshHost, username: login.username, password: login.password, command: "cd $remoteDocsDir && tar -xjf ${doctar.archiveName}")
+ sshexec(host: sshHost, username: login.username, password: login.password, command: "rm $remoteDocsDir/${doctar.archiveName}")
+ }
}
-task dist (type: Zip) {
+task dist(type: Zip) {
def zipRootDir = "${project.name}-$version"
- into (zipRootDir) {
+ into(zipRootDir) {
into('docs/apidocs') {
from apidocs.destinationDir
}
@@ -206,61 +113,85 @@ task dist (type: Zip) {
from docsDir
}
into('dist') {
- from coreModuleProjects().collect { project -> project.libsDir }
+ from coreModuleProjects.collect {project -> project.libsDir }
from project(':spring-security-samples-tutorial').libsDir
from project(':spring-security-samples-contacts').libsDir
}
}
}
-dist.dependsOn apidocs, ':manual:doc'
-dist.dependsOn subprojects.collect { "$it.path:assemble" }
-
-dist.doLast {
- ant.checksum(file: archivePath, algorithm: 'SHA1', fileext: '.sha1')
+dist {
+ dependsOn apidocs, ':manual:doc', subprojects.collect { "$it.path:assemble" }
+ doLast {
+ ant.checksum(file: archivePath, algorithm: 'SHA1', fileext: '.sha1')
+ }
}
-task uploadDist << {
- def shaFile = file("${dist.archivePath}.sha1")
- assert dist.archivePath.isFile()
- assert shaFile.isFile()
- ant.taskdef(resource: 'org/springframework/build/aws/ant/antlib.xml', classpath: configurations.antlibs.asPath)
- ant.s3(accessKey: s3AccessKey, secretKey: s3SecretAccessKey) {
- upload(bucketName: 'dist.springframework.org', file: dist.archivePath,
- toFile: releaseType() + "/SEC/${dist.archiveName}", publicRead: 'true') {
- metadata(name: 'project.name', value: 'Spring Security')
- metadata(name: 'release.type', value: releaseType())
- metadata(name: 'bundle.version', value: version)
- metadata(name: 'package.file.name', value: dist.archiveName)
+task uploadDist(type: UploadDist) {
+ archiveFile = dist.archivePath
+ shaFile = "${dist.archivePath}.sha1" as File
+ archiveName = dist.archiveName
+}
+
+def getJavaProjects() {
+ subprojects.findAll {project -> project.name != 'faq' && project.name != 'manual' }
+}
+
+def getSampleProjects() {
+ subprojects.findAll {project -> project.name.startsWith('spring-security-samples') }
+}
+
+def getItestProjects() {
+ subprojects.findAll {project -> project.name.startsWith('itest') }
+}
+
+def getCoreModuleProjects() {
+ javaProjects - sampleProjects - itestProjects - aspectjProjects
+}
+
+def getAspectjProjects() {
+ subprojects.findAll {project -> project.name == 'spring-security-aspects' || project.name == 'spring-security-samples-aspectj'}
+}
+
+class UploadDist extends DefaultTask {
+ @InputFile
+ File shaFile
+
+ @InputFile
+ File archiveFile
+
+ @Input
+ String archiveName
+
+ @InputFiles
+ def classpath
+
+ @TaskAction
+ def upload() {
+ project.ant {
+ taskdef(resource: 'org/springframework/build/aws/ant/antlib.xml', classpath: classpath.asPath)
+ s3(accessKey: project.s3AccessKey, secretKey: project.s3SecretAccessKey) {
+ upload(bucketName: 'dist.springframework.org', file: archiveFile,
+ toFile: releaseType() + "/SEC/${archiveName}", publicRead: 'true') {
+ metadata(name: 'project.name', value: 'Spring Security')
+ metadata(name: 'release.type', value: releaseType())
+ metadata(name: 'bundle.version', value: project.version)
+ metadata(name: 'package.file.name', value: archiveName)
+ }
+ upload(bucketName: 'dist.springframework.org', file: shaFile,
+ toFile: releaseType() + "/SEC/${archiveName}.sha1", publicRead: 'true')
+ }
+ }
+ }
+
+ def releaseType() {
+ if (project.releaseBuild) {
+ 'release'
+ } else if (project.snapshotBuild) {
+ 'snapshot'
+ } else {
+ 'milestone'
}
- upload(bucketName: 'dist.springframework.org', file: shaFile,
- toFile: releaseType() + "/SEC/${dist.archiveName}.sha1", publicRead: 'true')
- }
-}
-
-def javaProjects() {
- subprojects.findAll { project -> project.name != 'faq' && project.name != 'manual' }
-}
-
-def sampleProjects() {
- subprojects.findAll { project -> project.name.startsWith('spring-security-samples') }
-}
-
-def itestProjects() {
- subprojects.findAll { project -> project.name.startsWith('itest') }
-}
-
-def coreModuleProjects() {
- javaProjects() - sampleProjects() - itestProjects()
-}
-
-def releaseType() {
- if (releaseBuild) {
- 'release'
- } else if (snapshotBuild) {
- 'snapshot'
- } else {
- 'milestone'
}
}
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
new file mode 100644
index 0000000000..aee47393c5
--- /dev/null
+++ b/buildSrc/build.gradle
@@ -0,0 +1,32 @@
+apply id: 'groovy'
+
+repositories {
+ mavenRepo name:'localRepo', urls: "file://" + System.properties['user.home'] + "/.m2/repository"
+ mavenCentral()
+ mavenRepo name:'Shibboleth Repo', urls:'http://shibboleth.internet2.edu/downloads/maven2'
+}
+
+dependencies {
+ def fopDeps = [ 'org.apache.xmlgraphics:fop:0.95-1@jar',
+ 'org.apache.xmlgraphics:xmlgraphics-commons:1.3',
+ 'org.apache.xmlgraphics:batik-bridge:1.7@jar',
+ 'org.apache.xmlgraphics:batik-util:1.7@jar',
+ 'org.apache.xmlgraphics:batik-css:1.7@jar',
+ 'org.apache.xmlgraphics:batik-dom:1.7',
+ 'org.apache.xmlgraphics:batik-svg-dom:1.7@jar',
+ 'org.apache.avalon.framework:avalon-framework-api:4.3.1']
+ groovy localGroovy()
+ compile gradleApi(),
+ 'org.apache.xerces:resolver:2.9.1',
+ 'saxon:saxon:6.5.3',
+ 'org.apache.xerces:xercesImpl:2.9.1',
+ fopDeps
+
+ runtime 'net.sf.xslthl:xslthl:2.0.1',
+ 'net.sf.docbook:docbook-xsl:1.75.2:resources@zip'
+}
+
+task ide(type: Copy) {
+ from configurations.runtime
+ into 'ide'
+}
diff --git a/buildSrc/src/main/groovy/docbook/DocbookPlugin.groovy b/buildSrc/src/main/groovy/docbook/DocbookPlugin.groovy
new file mode 100644
index 0000000000..856f467320
--- /dev/null
+++ b/buildSrc/src/main/groovy/docbook/DocbookPlugin.groovy
@@ -0,0 +1,266 @@
+package docbook;
+
+import org.gradle.api.Plugin;
+import org.gradle.api.GradleException;
+import org.gradle.api.DefaultTask;
+import org.gradle.api.Task;
+import org.gradle.api.Project;
+import org.gradle.api.Action;
+import org.gradle.api.tasks.*;
+import org.gradle.api.file.FileCollection;
+
+import org.xml.sax.XMLReader;
+import org.xml.sax.InputSource;
+import org.apache.xml.resolver.CatalogManager;
+import org.apache.xml.resolver.tools.CatalogResolver;
+
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.*;
+import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+import java.io.*;
+import java.util.*;
+import java.util.zip.*;
+import java.net.*;
+
+import org.apache.fop.apps.*;
+
+import com.icl.saxon.TransformerFactoryImpl;
+
+/**
+ * Gradle Docbook plugin implementation.
+ *
+ * Creates three tasks: docbookHtml, docbookHtmlSingle and docbookPdf. Each task takes a single File on
+ * which it operates.
+ */
+class DocbookPlugin implements Plugin {
+ public void use(Project project) {
+ // Add the plugin tasks to the project
+ Task docbookHtml = project.tasks.add('docbookHtml', DocbookHtml.class);
+ docbookHtml.setDescription('Generates chunked docbook html output');
+
+ Task docbookHtmlSingle = project.tasks.add('docbookHtmlSingle', Docbook.class);
+ docbookHtmlSingle.setDescription('Generates single page docbook html output')
+ docbookHtmlSingle.suffix = '-single'
+
+ Task docbookFoPdf = project.tasks.add("docbookFoPdf", DocbookFoPdf.class);
+ docbookFoPdf.setDescription('Generates PDF output');
+ docbookFoPdf.extension = 'fo'
+ }
+}
+
+/**
+ */
+public class Docbook extends DefaultTask {
+
+ @Input
+ String extension = 'html';
+
+ @Input
+ String suffix = '';
+
+ @Input
+ boolean XIncludeAware = true;
+
+ @Input
+ boolean highlightingEnabled = true;
+
+ String admonGraphicsPath;
+
+ @InputDirectory
+ File sourceDirectory = new File(project.getProjectDir(), "src/docbook");
+
+ @Input
+ String sourceFileName;
+
+ @InputFile
+ File stylesheet;
+
+ @OutputDirectory
+ File docsDir = new File(project.getBuildDir(), "docs");
+
+ @TaskAction
+ public final void transform() {
+ SAXParserFactory factory = new org.apache.xerces.jaxp.SAXParserFactoryImpl();
+ factory.setXIncludeAware(XIncludeAware);
+ docsDir.mkdirs();
+
+ File srcFile = new File(sourceDirectory, sourceFileName);
+ String outputFilename = srcFile.getName().substring(0, srcFile.getName().length() - 4) + suffix + '.' + extension;
+
+ File outputFile = new File(getDocsDir(), outputFilename);
+
+ Result result = new StreamResult(outputFile.getAbsolutePath());
+ CatalogResolver resolver = new CatalogResolver(createCatalogManager());
+ InputSource inputSource = new InputSource(srcFile.getAbsolutePath());
+
+ XMLReader reader = factory.newSAXParser().getXMLReader();
+ reader.setEntityResolver(resolver);
+ TransformerFactory transformerFactory = new TransformerFactoryImpl();
+ transformerFactory.setURIResolver(resolver);
+ URL url = stylesheet.toURL();
+ Source source = new StreamSource(url.openStream(), url.toExternalForm());
+ Transformer transformer = transformerFactory.newTransformer(source);
+
+ if (highlightingEnabled) {
+ File highlightingDir = new File(getProject().getBuildDir(), "highlighting");
+ if (!highlightingDir.exists()) {
+ highlightingDir.mkdirs();
+ extractHighlightFiles(highlightingDir);
+ }
+
+ transformer.setParameter("highlight.xslthl.config", new File(highlightingDir, "xslthl-config.xml").toURI().toURL());
+
+ if (admonGraphicsPath != null) {
+ transformer.setParameter("admon.graphics", "1");
+ transformer.setParameter("admon.graphics.path", admonGraphicsPath);
+ }
+ }
+
+ preTransform(transformer, srcFile, outputFile);
+
+ transformer.transform(new SAXSource(reader, inputSource), result);
+
+ postTransform(outputFile);
+ }
+
+ private void extractHighlightFiles(File toDir) {
+ URLClassLoader cl = (URLClassLoader) getClass().getClassLoader();
+ URL[] urls = cl.getURLs();
+ URL docbookZip = null;
+
+ for (URL url : urls) {
+ if (url.toString().contains("docbook-xsl-")) {
+ docbookZip = url;
+ break;
+ }
+ }
+
+ if (docbookZip == null) {
+ throw new GradleException("Docbook zip file not found");
+ }
+
+ ZipFile zipFile = new ZipFile(new File(docbookZip.toURI()));
+
+ Enumeration e = zipFile.entries();
+ while (e.hasMoreElements()) {
+ ZipEntry ze = (ZipEntry) e.nextElement();
+ if (ze.getName().matches(".*/highlighting/.*\\.xml")) {
+ String filename = ze.getName().substring(ze.getName().lastIndexOf("/highlighting/") + 14);
+ copyFile(zipFile.getInputStream(ze), new File(toDir, filename));
+ }
+ }
+ }
+
+ private void copyFile(InputStream source, File destFile) {
+ destFile.createNewFile();
+ FileOutputStream to = null;
+ try {
+ to = new FileOutputStream(destFile);
+ byte[] buffer = new byte[4096];
+ int bytesRead;
+
+ while ((bytesRead = source.read(buffer)) > 0) {
+ to.write(buffer, 0, bytesRead);
+ }
+ } finally {
+ if (source != null) {
+ source.close();
+ }
+ if (to != null) {
+ to.close();
+ }
+ }
+ }
+
+ protected void preTransform(Transformer transformer, File sourceFile, File outputFile) {
+ }
+
+ protected void postTransform(File outputFile) {
+ }
+
+ private CatalogManager createCatalogManager() {
+ CatalogManager manager = new CatalogManager();
+ manager.setIgnoreMissingProperties(true);
+ ClassLoader classLoader = this.getClass().getClassLoader();
+ StringBuilder builder = new StringBuilder();
+ String docbookCatalogName = "docbook/catalog.xml";
+ URL docbookCatalog = classLoader.getResource(docbookCatalogName);
+
+ if (docbookCatalog == null) {
+ throw new IllegalStateException("Docbook catalog " + docbookCatalogName + " could not be found in " + classLoader);
+ }
+
+ builder.append(docbookCatalog.toExternalForm());
+
+ Enumeration enumeration = classLoader.getResources("/catalog.xml");
+ while (enumeration.hasMoreElements()) {
+ builder.append(';');
+ URL resource = (URL) enumeration.nextElement();
+ builder.append(resource.toExternalForm());
+ }
+ String catalogFiles = builder.toString();
+ manager.setCatalogFiles(catalogFiles);
+ return manager;
+ }
+}
+
+/**
+ */
+class DocbookHtml extends Docbook {
+
+ @Override
+ protected void preTransform(Transformer transformer, File sourceFile, File outputFile) {
+ String rootFilename = outputFile.getName();
+ rootFilename = rootFilename.substring(0, rootFilename.lastIndexOf('.'));
+ transformer.setParameter("root.filename", rootFilename);
+ transformer.setParameter("base.dir", outputFile.getParent() + File.separator);
+ }
+}
+
+/**
+ */
+class DocbookFoPdf extends Docbook {
+
+ /**
+ * From the FOP usage guide
+ */
+ @Override
+ protected void postTransform(File foFile) {
+ FopFactory fopFactory = FopFactory.newInstance();
+
+ OutputStream out = null;
+ final File pdfFile = getPdfOutputFile(foFile);
+ logger.debug("Transforming 'fo' file "+ foFile + " to PDF: " + pdfFile);
+
+ try {
+ out = new BufferedOutputStream(new FileOutputStream(pdfFile));
+
+ Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
+
+ TransformerFactory factory = TransformerFactory.newInstance();
+ Transformer transformer = factory.newTransformer();
+
+ Source src = new StreamSource(foFile);
+
+ Result res = new SAXResult(fop.getDefaultHandler());
+
+ transformer.transform(src, res);
+ } finally {
+ if (out != null) {
+ out.close();
+ }
+ }
+
+ if (!foFile.delete()) {
+ logger.warn("Failed to delete 'fo' file " + foFile);
+ }
+ }
+
+ private File getPdfOutputFile(File foFile) {
+ String name = foFile.getAbsolutePath();
+ return new File(name.substring(0, name.length() - 2) + "pdf");
+ }
+}
diff --git a/buildSrc/src/main/resources/META-INF/gradle-plugins/docbook.properties b/buildSrc/src/main/resources/META-INF/gradle-plugins/docbook.properties
new file mode 100644
index 0000000000..5fecd7333b
--- /dev/null
+++ b/buildSrc/src/main/resources/META-INF/gradle-plugins/docbook.properties
@@ -0,0 +1 @@
+implementation-class=docbook.DocbookPlugin
\ No newline at end of file
diff --git a/cas/cas.gradle b/cas/cas.gradle
index d692ae1905..7b4945de3e 100644
--- a/cas/cas.gradle
+++ b/cas/cas.gradle
@@ -2,12 +2,12 @@
dependencies {
compile project(':spring-security-core'),
project(':spring-security-web'),
- "javax.servlet:servlet-api:2.5",
- "org.springframework:spring-core:$springVersion",
- "org.springframework:spring-context:$springVersion",
+ "org.springframework:spring-context:$springVersion",
"org.springframework:spring-beans:$springVersion",
"org.springframework:spring-tx:$springVersion",
- "org.springframework:spring-web:$springVersion",
+ "org.springframework:spring-web:$springVersion",
"org.jasig.cas:cas-client-core:3.1.9",
"net.sf.ehcache:ehcache:$ehcacheVersion"
+
+ provided 'javax.servlet:servlet-api:2.5'
}
\ No newline at end of file
diff --git a/config/config.gradle b/config/config.gradle
index 0049d66423..cf73a8f1e7 100644
--- a/config/config.gradle
+++ b/config/config.gradle
@@ -5,15 +5,15 @@ compileTestJava.dependsOn(':spring-security-core:compileTestJava')
dependencies {
compile project(':spring-security-core'),
project(':spring-security-web'),
- "javax.servlet:servlet-api:2.5",
"org.aspectj:aspectjweaver:$aspectjVersion",
"org.springframework:spring-aop:$springVersion",
- "org.springframework:spring-core:$springVersion",
"org.springframework:spring-context:$springVersion",
- "org.springframework:spring-web:$springVersion",
+ "org.springframework:spring-web:$springVersion",
"org.springframework:spring-beans:$springVersion",
"org.springframework:spring-tx:$springVersion"
+ provided "javax.servlet:servlet-api:2.5"
+
testCompile project(':spring-security-ldap'),
project(':spring-security-openid'),
files(this.project(':spring-security-core').sourceSets.test.classesDir),
diff --git a/core/core.gradle b/core/core.gradle
index a005d0e822..4e7fc54aa6 100644
--- a/core/core.gradle
+++ b/core/core.gradle
@@ -5,7 +5,6 @@ dependencies {
"net.sf.ehcache:ehcache:$ehcacheVersion",
"org.springframework:spring-aop:$springVersion",
"org.springframework:spring-beans:$springVersion",
- "org.springframework:spring-core:$springVersion",
"org.springframework:spring-context:$springVersion",
"org.springframework:spring-expression:$springVersion",
"org.springframework:spring-jdbc:$springVersion",
diff --git a/docs/faq/faq.gradle b/docs/faq/faq.gradle
index f81d93061c..86d80c0947 100644
--- a/docs/faq/faq.gradle
+++ b/docs/faq/faq.gradle
@@ -3,7 +3,8 @@ apply id: 'docbook'
defaultTasks 'docbookHtmlSingle'
-docbookSrcFileName = 'faq.xml'
+[docbookHtml, docbookFoPdf, docbookHtmlSingle]*.sourceFileName = 'faq.xml'
+
docbookHtmlSingle.stylesheet = new File(projectDir, 'src/xsl/html-single-custom.xsl')
docbookHtmlSingle.doLast {
diff --git a/docs/faq/src/xsl/html-single-custom.xsl b/docs/faq/src/xsl/html-single-custom.xsl
index ccb1cb31d6..6fb09740b7 100644
--- a/docs/faq/src/xsl/html-single-custom.xsl
+++ b/docs/faq/src/xsl/html-single-custom.xsl
@@ -1,101 +1,101 @@
+ xmlns:xslthl="http://xslthl.sf.net"
+ exclude-result-prefixes="xslthl"
+ version='1.0'>
-
-
-
-
+
+
-
- 1
+
-
+ 1
+
+
-
-
- css/faq.css
- text/css
+
+
+ css/faq.css
+ text/css
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
-
-
- Begin Google Analytics code
-
-
- End Google Analytics code
-
+
+
+
-
-
- Begin LoopFuse code
-
-
- End LoopFuse code
-
+
+
+ Begin Google Analytics code
+
+
+End Google Analytics code
+
+
+
+
+Begin LoopFuse code
+
+
+End LoopFuse code
+
\ No newline at end of file
diff --git a/docs/manual/manual.gradle b/docs/manual/manual.gradle
index 0260fc4a8d..336978718b 100644
--- a/docs/manual/manual.gradle
+++ b/docs/manual/manual.gradle
@@ -1,13 +1,15 @@
apply id: 'base'
apply id: 'docbook'
-docbookSrcFileName = 'springsecurity.xml'
+[docbookHtml, docbookFoPdf, docbookHtmlSingle]*.sourceFileName = 'springsecurity.xml';
+
docbookHtml.stylesheet = new File(projectDir, 'src/xsl/html-custom.xsl')
+docbookHtmlSingle.stylesheet = new File(projectDir, 'src/xsl/html-single-custom.xsl')
docbookFoPdf.stylesheet = new File(projectDir, 'src/xsl/pdf-custom.xsl')
def imagesDir = new File(projectDir, 'src/docbook/images');
docbookFoPdf.admonGraphicsPath = "${imagesDir}/"
-task doc (dependsOn: [docbookHtml, docbookFoPdf]) << {
+task doc (dependsOn: [docbookHtml, docbookHtmlSingle, docbookFoPdf]) << {
resourcesDir = new File(projectDir, 'src/resources')
ant {
docsDir = new File(buildDir, 'docs')
diff --git a/docs/manual/src/xsl/html-single-custom.xsl b/docs/manual/src/xsl/html-single-custom.xsl
new file mode 100644
index 0000000000..63ccaaff6c
--- /dev/null
+++ b/docs/manual/src/xsl/html-single-custom.xsl
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+ 1
+
+
+ 1
+ 0
+ 1
+
+
+
+ images/
+ .png
+
+ 120
+ images/callouts/
+ .png
+
+
+ css/manual.css
+ text/css
+ book toc,title
+
+ text-align: left
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Begin Google Analytics code
+
+
+End Google Analytics code
+
+
+
+
+Begin LoopFuse code
+
+
+End LoopFuse code
+
+
+
\ No newline at end of file
diff --git a/gradle/aspectj.gradle b/gradle/aspectj.gradle
new file mode 100644
index 0000000000..4d239ba55b
--- /dev/null
+++ b/gradle/aspectj.gradle
@@ -0,0 +1,24 @@
+apply id: 'java'
+
+configurations {
+ ajtools
+ aspectpath
+}
+
+dependencies {
+ ajtools "org.aspectj:aspectjtools:$aspectjVersion"
+ compile "org.aspectj:aspectjrt:$aspectjVersion"
+}
+
+task compileJava(dependsOn: JavaPlugin.PROCESS_RESOURCES_TASK_NAME, overwrite: true, description: 'Compiles AspectJ Source') << {
+ println "Running ajc ..."
+ ant.taskdef(resource: "org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties", classpath: configurations.ajtools.asPath)
+ ant.iajc(classpath: configurations.compile.asPath, fork: 'true', destDir: sourceSets.main.classesDir.absolutePath, source: sourceCompatibility, target: targetCompatibility,
+ aspectPath: configurations.aspectpath.asPath, sourceRootCopyFilter: '**/*.java') {
+ sourceroots {
+ sourceSets.main.java.srcDirs.each {
+ pathelement(location: it.absolutePath)
+ }
+ }
+ }
+}
diff --git a/gradle/bundlor.gradle b/gradle/bundlor.gradle
new file mode 100644
index 0000000000..def88dce81
--- /dev/null
+++ b/gradle/bundlor.gradle
@@ -0,0 +1,35 @@
+import java.util.jar.Manifest
+import org.gradle.api.tasks.bundling.GradleManifest
+
+apply id: 'java'
+
+configurations {
+ bundlor
+}
+
+dependencies {
+ bundlor 'com.springsource.bundlor:com.springsource.bundlor.ant:1.0.0.RELEASE',
+ 'com.springsource.bundlor:com.springsource.bundlor:1.0.0.RELEASE',
+ 'com.springsource.bundlor:com.springsource.bundlor.blint:1.0.0.RELEASE'
+}
+
+task bundlor(dependsOn: compileJava) {
+ onlyIf {
+ dependsOnTaskDidWork()
+ }
+ doFirst {
+ ant.taskdef(resource: 'com/springsource/bundlor/ant/antlib.xml', classpath: configurations.bundlor.asPath)
+ File template = new File(projectDir, 'template.mf')
+ mkdir(buildDir, 'bundlor')
+ if (template.exists()) {
+ ant.bundlor(inputPath: sourceSets.main.classesDir, outputPath: "$buildDir/bundlor", manifestTemplatePath: template) {
+ property(name: 'version', value: "$version")
+ property(name: 'spring.version', value: "$springVersion")
+ }
+ // See GRADLE-395 for support for using an existing manifest
+ jar.manifest = new GradleManifest(new Manifest(new File("$buildDir/bundlor/META-INF/MANIFEST.MF").newInputStream()))
+ }
+ }
+}
+
+jar.dependsOn bundlor
diff --git a/gradle/javaprojects.gradle b/gradle/javaprojects.gradle
new file mode 100644
index 0000000000..ca5f4d9d3f
--- /dev/null
+++ b/gradle/javaprojects.gradle
@@ -0,0 +1,39 @@
+apply id: 'java'
+
+springVersion = '3.0.1.RELEASE'
+springLdapVersion = '1.3.0.RELEASE'
+ehcacheVersion = '1.6.2'
+aspectjVersion = '1.6.8'
+apacheDsVersion = '1.5.5'
+jstlVersion = '1.1.2'
+jettyVersion = '6.1.22'
+hsqlVersion = '1.8.0.10'
+
+configurations {
+ provided
+ compile.extendsFrom provided
+}
+
+dependencies {
+ compile 'commons-logging:commons-logging:1.1.1'
+
+ compile ("org.springframework:spring-core:$springVersion") {
+ exclude(group: 'commons-logging', module: 'commons-logging')
+ }
+
+ testCompile 'junit:junit:4.7',
+ 'org.mockito:mockito-core:1.7',
+ 'org.jmock:jmock:2.5.1',
+ 'org.jmock:jmock-junit4:2.5.1',
+ 'org.hamcrest:hamcrest-core:1.1',
+ 'org.hamcrest:hamcrest-library:1.1',
+ "org.springframework:spring-test:$springVersion"
+}
+
+test {
+ onlyIf {
+ !project.hasProperty('skipTests')
+ }
+ jvmArgs = ['-ea', '-Xms128m', '-Xmx500m', '-XX:MaxPermSize=128m']
+}
+
diff --git a/gradle/maven.gradle b/gradle/maven.gradle
new file mode 100644
index 0000000000..0a7ee45d6a
--- /dev/null
+++ b/gradle/maven.gradle
@@ -0,0 +1,72 @@
+apply id: 'maven'
+
+// Create a source jar for uploading
+task sourceJar(type: Jar) {
+ classifier = 'sources'
+ from sourceSets.main.java
+}
+
+configurations {
+ deployerJars
+}
+
+artifacts {
+ archives sourceJar
+}
+
+dependencies {
+ deployerJars "org.springframework.build.aws:org.springframework.build.aws.maven:3.0.0.RELEASE"
+}
+
+gradle.taskGraph.whenReady {graph ->
+ if (graph.hasTask(uploadArchives)) {
+ // check properties defined and fail early
+ s3AccessKey
+ s3SecretAccessKey
+ }
+}
+
+def deployer = null
+
+uploadArchives {
+ deployer = repositories.mavenDeployer {
+ configuration = configurations.deployerJars
+ }
+ doFirst {
+ if (releaseBuild) {
+ // "mavenSyncRepoDir" should be set in properties
+ repository(url: mavenSyncRepoDir)
+ } else {
+ s3credentials = [userName: s3AccessKey, passphrase: s3SecretAccessKey]
+ repository(url: "s3://maven.springframework.org/milestone") {
+ authentication(s3credentials)
+ }
+ snapshotRepository(url: "s3://maven.springframework.org/snapshot") {
+ authentication(s3credentials)
+ }
+ }
+ }
+}
+
+// Pom Customization
+
+installer = install.repositories.mavenInstaller
+
+def optionalDeps = ['commons-logging', 'ehcache', 'log4j', 'apacheds-core', 'jsp-api', 'jsr250-api', 'ldapsdk']
+
+[installer, deployer]*.pom.collect { pom ->
+ pom.scopeMappings.addMapping(10, configurations.provided, 'provided')
+}
+
+[installer, deployer]*.pom*.whenConfigured { pom ->
+ pom.dependencies.findAll { dep ->
+ optionalDeps.contains(dep.artifactId) ||
+ dep.groupId.startsWith('org.apache.directory') ||
+ dep.groupId.startsWith('org.slf4j')
+ }*.optional = true
+
+ if (pom.artifactId == 'spring-security-config') {
+ pom.dependencies.find { dep -> dep.artifactId == 'spring-security-web'}.optional = true
+ pom.dependencies.find { dep -> dep.artifactId == 'spring-web'}.optional = true
+ }
+}
diff --git a/itest/web/itest-web.gradle b/itest/web/itest-web.gradle
index 68074f4ba8..6ba082f47d 100644
--- a/itest/web/itest-web.gradle
+++ b/itest/web/itest-web.gradle
@@ -1,12 +1,13 @@
dependencies {
compile "org.springframework:spring-context:$springVersion",
- "org.springframework:spring-web:$springVersion",
- 'javax.servlet:servlet-api:2.5'
+ "org.springframework:spring-web:$springVersion"
+
+ provided 'javax.servlet:servlet-api:2.5'
testCompile project(':spring-security-core'),
project(':spring-security-web'),
- "org.springframework:spring-core:$springVersion",
+ project(':spring-security-taglibs'),
"org.springframework:spring-beans:$springVersion",
"org.springframework:spring-webmvc:$springVersion",
"org.mortbay.jetty:jetty:$jettyVersion",
diff --git a/itest/web/pom.xml b/itest/web/pom.xml
index 7c78f4d603..2963bdfbb6 100644
--- a/itest/web/pom.xml
+++ b/itest/web/pom.xml
@@ -28,6 +28,11 @@
javax.servlet
servlet-api
+
+ org.springframework.security
+ spring-security-taglibs
+ ${project.version}
+
org.springframework
spring-webmvc
diff --git a/ldap/ldap.gradle b/ldap/ldap.gradle
index c7de42711a..4bd8091054 100644
--- a/ldap/ldap.gradle
+++ b/ldap/ldap.gradle
@@ -4,18 +4,22 @@ test.exclude('**/OpenLDAPIntegrationTestSuite.class')
dependencies {
compile project(':spring-security-core'),
- "org.springframework:spring-core:$springVersion",
"org.springframework:spring-beans:$springVersion",
"org.springframework:spring-context:$springVersion",
"org.springframework:spring-tx:$springVersion",
- "org.springframework.ldap:spring-ldap-core:$springLdapVersion",
"org.apache.directory.server:apacheds-core:$apacheDsVersion",
"org.apache.directory.server:apacheds-core-entry:$apacheDsVersion",
"org.apache.directory.server:apacheds-protocol-shared:$apacheDsVersion",
"org.apache.directory.server:apacheds-protocol-ldap:$apacheDsVersion",
"org.apache.directory.server:apacheds-server-jndi:$apacheDsVersion",
- 'org.apache.directory.shared:shared-ldap:0.9.15',
+ 'org.apache.directory.shared:shared-ldap:0.9.15',
'ldapsdk:ldapsdk:4.1'
+ compile ("org.springframework.ldap:spring-ldap-core:$springLdapVersion") {
+ exclude(group: 'commons-logging', module: 'commons-logging')
+ exclude(group: 'org.springframework', module: 'spring-core')
+ exclude(group: 'org.springframework', module: 'spring-tx')
+ exclude(group: 'org.springframework', module: 'spring-beans')
+ }
runtime 'org.slf4j:slf4j-log4j12:1.4.3'
}
\ No newline at end of file
diff --git a/openid/openid.gradle b/openid/openid.gradle
index e1810b32dc..814d480259 100644
--- a/openid/openid.gradle
+++ b/openid/openid.gradle
@@ -5,13 +5,12 @@ dependencies {
project(':spring-security-web'),
'org.openid4java:openid4java-nodeps:0.9.5',
"org.springframework:spring-aop:$springVersion",
- "org.springframework:spring-core:$springVersion",
"org.springframework:spring-context:$springVersion",
"org.springframework:spring-beans:$springVersion",
- "org.springframework:spring-tx:$springVersion",
+ "org.springframework:spring-tx:$springVersion",
"org.springframework:spring-web:$springVersion"
- provided "javax.servlet:servlet-api:2.5"
+ provided 'javax.servlet:servlet-api:2.5'
runtime 'commons-httpclient:commons-httpclient:3.1'
}
\ No newline at end of file
diff --git a/samples/cas/cas.gradle b/samples/cas/cas.gradle
index bff5dc0e99..0bd7994d8d 100644
--- a/samples/cas/cas.gradle
+++ b/samples/cas/cas.gradle
@@ -2,11 +2,8 @@ apply id: 'war'
apply id: 'jetty'
dependencies {
-// providedCompile 'javax.servlet:servlet-api:2.5@jar'
-
runtime project(':spring-security-core'),
project(':spring-security-web'),
project(':spring-security-config'),
-// project(':taglibs'),
'log4j:log4j:1.2.15@jar'
}
\ No newline at end of file
diff --git a/samples/contacts/contacts.gradle b/samples/contacts/contacts.gradle
index 86459f6537..a0941ef1b6 100644
--- a/samples/contacts/contacts.gradle
+++ b/samples/contacts/contacts.gradle
@@ -5,10 +5,10 @@ apply id: 'jetty'
dependencies {
providedCompile 'javax.servlet:servlet-api:2.5@jar'
+
compile project(':spring-security-core'),
project(':spring-security-acl'),
"org.springframework:spring-aop:$springVersion",
- "org.springframework:spring-core:$springVersion",
"org.springframework:spring-beans:$springVersion",
"org.springframework:spring-context:$springVersion",
"org.springframework:spring-jdbc:$springVersion",
diff --git a/samples/tutorial/tutorial.gradle b/samples/tutorial/tutorial.gradle
index 52623feb13..c8c0643abb 100644
--- a/samples/tutorial/tutorial.gradle
+++ b/samples/tutorial/tutorial.gradle
@@ -5,8 +5,8 @@ apply id: 'jetty'
dependencies {
providedCompile 'javax.servlet:servlet-api:2.5@jar'
+
compile project(':spring-security-core'),
- "org.springframework:spring-core:$springVersion",
"org.springframework:spring-beans:$springVersion",
"org.springframework:spring-web:$springVersion",
"org.springframework:spring-webmvc:$springVersion",
diff --git a/sandbox/heavyduty/build.gradle b/sandbox/heavyduty/build.gradle
index 1f23df1df8..75341a155a 100644
--- a/sandbox/heavyduty/build.gradle
+++ b/sandbox/heavyduty/build.gradle
@@ -1,23 +1,17 @@
-usePlugin('war')
-usePlugin('jetty')
-usePlugin('project-reports')
+apply: 'war'
+apply: 'jetty'
+//apply: 'project-reports'
-version = '3.0.0.CI-SNAPSHOT'
-springVersion = '3.0.0.RELEASE'
-targetCompatibility = '1.5'
+version = '3.1.0.CI-SNAPSHOT'
+springVersion = '3.0.1.RELEASE'
+targetCompatibility = '1.5'
sourceCompatibility = '1.5'
repositories {
- mavenRepo name:'localRepo', urls:'file:///Users/luke/.m2/repository'
-}
-
-configurations {
-// runtime.excludeRules.add(org: 'org.apache.commons')
+ mavenRepo name:'Local', urls: "file://" + System.properties['user.home'] + "/.m2/repository"
}
dependencies {
- //
- // NB: Transient deps are all runtime deps (unlike maven)
compile 'aopalliance:aopalliance:1.0',
"org.springframework.security:spring-security-core:$version",
"org.springframework.security:spring-security-web:$version",
@@ -27,27 +21,23 @@ dependencies {
"org.springframework:spring-tx:$springVersion",
"org.springframework:spring-web:$springVersion",
"org.springframework:spring-webmvc:$springVersion",
- 'commons-logging:commons-logging:1.1.1',
- "org.aspectj:aspectjrt:1.6.5",
- 'org.hibernate:ejb3-persistence:1.0.2.GA'
- 'javax.persistence:persistence-api:1.0'
+ 'org.aspectj:aspectjrt:1.6.8',
+ 'org.hibernate:ejb3-persistence:1.0.2.GA',
+ 'javax.persistence:persistence-api:1.0',
+ 'org.slf4j:jcl-over-slf4j:1.5.11'
- providedCompile "javax.servlet:servlet-api:2.5"
+ providedCompile 'javax.servlet:servlet-api:2.5'
runtime 'org.hibernate:hibernate-entitymanager:3.4.0.GA',
- "org.springframework:spring-context-support:$springVersion",
- "org.springframework.security:spring-security-ldap:$version",
+ "org.springframework:spring-context-support:$springVersion",
+ "org.springframework.security:spring-security-ldap:$version",
"org.springframework.security:spring-security-config:$version",
- "org.springframework.security:spring-security-taglibs:$version",
+ "org.springframework.security:spring-security-taglibs:$version",
"org.springframework:spring-orm:$springVersion",
'org.apache.directory.server:apacheds-core:1.5.5',
'org.apache.directory.server:apacheds-server-jndi:1.5.5',
'org.freemarker:freemarker:2.3.16',
"hsqldb:hsqldb:1.8.0.10",
- 'org.slf4j:slf4j-log4j12:1.5.8',
+ 'org.slf4j:slf4j-log4j12:1.5.11',
'log4j:log4j:1.2.14'
}
-
-task ('pcomp') {
- println configurations.compile
-}
diff --git a/sandbox/heavyduty/pom.xml b/sandbox/heavyduty/pom.xml
index dc6665dcf7..91c52215e4 100755
--- a/sandbox/heavyduty/pom.xml
+++ b/sandbox/heavyduty/pom.xml
@@ -4,7 +4,7 @@
spring-security-heavyduty
Spring Security - Heavy Duty Sample
war
- 3.0.3.CI-SNAPSHOT
+ 3.1.0.CI-SNAPSHOT
org.springframework.security
@@ -205,7 +205,7 @@
3.0.0.RELEASE
- 3.0.3.CI-SNAPSHOT
+ 3.1.0.CI-SNAPSHOT
diff --git a/settings.gradle b/settings.gradle
index fa951f7607..cb36923da0 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -6,7 +6,8 @@ def String[] modules = [
'config',
'cas',
'openid',
- 'taglibs'
+ 'taglibs',
+ 'aspects'
]
def String[] samples = [
diff --git a/taglibs/taglibs.gradle b/taglibs/taglibs.gradle
index 32c53ba710..7765bf5f15 100644
--- a/taglibs/taglibs.gradle
+++ b/taglibs/taglibs.gradle
@@ -4,17 +4,12 @@ dependencies {
compile project(':spring-security-core'),
project(':spring-security-web'),
project(':spring-security-acl'),
- "org.springframework:spring-core:$springVersion",
"org.springframework:spring-beans:$springVersion",
"org.springframework:spring-context:$springVersion",
"org.springframework:spring-expression:$springVersion",
"org.springframework:spring-web:$springVersion"
- provided 'javax.servlet:jsp-api:2.0'
-
- testCompile 'javax.servlet:servlet-api:2.5',
- 'javax.servlet:jsp-api:2.0'
+ provided 'javax.servlet:jsp-api:2.0', 'javax.servlet:servlet-api:2.5'
testRuntime "taglibs:standard:$jstlVersion"
-
}
\ No newline at end of file
diff --git a/web/web.gradle b/web/web.gradle
index ef8b061dfa..6357370cd2 100644
--- a/web/web.gradle
+++ b/web/web.gradle
@@ -5,7 +5,6 @@ dependencies {
'aopalliance:aopalliance:1.0',
"org.aspectj:aspectjweaver:$aspectjVersion",
"org.springframework:spring-aop:$springVersion",
- "org.springframework:spring-core:$springVersion",
"org.springframework:spring-beans:$springVersion",
"org.springframework:spring-context:$springVersion",
"org.springframework:spring-expression:$springVersion",