diff --git a/build.gradle b/build.gradle index 763bca926b..b2b5ff69b4 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ buildscript { dependencies { - classpath 'io.spring.gradle:spring-build-conventions:0.0.2.RELEASE' + classpath 'io.spring.gradle:spring-build-conventions:0.0.4.BUILD-SNAPSHOT' classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion" } repositories { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2cee530adb..260d5bb950 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bb7b1e08ab..867f2322be 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Apr 11 20:42:24 CDT 2017 +#Fri Sep 15 11:04:40 CDT 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-bin.zip diff --git a/samples/xml/cas/cassample/spring-security-samples-xml-cassample.gradle b/samples/xml/cas/cassample/spring-security-samples-xml-cassample.gradle index d9babd2dbe..ba67be2f28 100644 --- a/samples/xml/cas/cassample/spring-security-samples-xml-cassample.gradle +++ b/samples/xml/cas/cassample/spring-security-samples-xml-cassample.gradle @@ -1,27 +1,14 @@ -apply plugin: 'io.spring.convention.spring-sample' -apply plugin: 'war' -apply plugin: 'jetty' +apply plugin: 'io.spring.convention.spring-sample-war' -def excludeModules = ['spring-security-acl', 'jsr250-api', 'spring-jdbc', 'spring-tx'] def keystore = "$rootDir/samples/certificates/server.jks" def password = 'password' -configurations { - casServer - excludeModules.each {name -> - runtime.exclude module: name - } - - runtime.exclude group: 'org.aspectj' -} sourceSets { test.resources.exclude 'GebConfig.groovy' integrationTest.groovy.srcDir file('src/integration-test/groovy') } -eclipse.classpath.plusConfigurations += [configurations.integrationTestRuntime] - dependencies { compile project(':spring-security-cas') compile project(':spring-security-core') @@ -46,81 +33,40 @@ dependencies { integrationTestCompile 'org.slf4j:jcl-over-slf4j' } -[project.tasks.jettyRun, project.tasks.jettyRunWar]*.configure { - contextPath = '/cas-sample' - def httpConnector = jettyRunWar.class.classLoader.loadClass('org.mortbay.jetty.nio.SelectChannelConnector').newInstance() - httpConnector.port = 8080 - httpConnector.confidentialPort = 8443 - def httpsConnector = jettyRunWar.class.classLoader.loadClass('org.mortbay.jetty.security.SslSocketConnector').newInstance() - httpsConnector.port = 8443 - httpsConnector.keystore = httpsConnector.truststore = keystore - httpsConnector.keyPassword = httpsConnector.trustPassword = password +integrationTest { + dependsOn { casServer().tasks.appBeforeIntegrationTest } + doFirst { + def casServiceHost = 'localhost:' + gretty.httpsPort + def casServerHost = 'localhost:' + casServer().gretty.httpsPort + systemProperties['cas.server.host'] = casServerHost + systemProperties['cas.service.host'] = casServiceHost + systemProperties['geb.build.baseUrl'] = 'https://'+casServiceHost+'/cas-sample/' + systemProperties['geb.build.reportsDir'] = 'build/geb-reports' + systemProperties['jar.path'] = jar.archivePath + systemProperties['javax.net.ssl.trustStore'] = keystore + systemProperties['javax.net.ssl.trustStorePassword'] = password + } + finalizedBy { casServer().tasks.appAfterIntegrationTest } +} - connectors = [httpConnector, httpsConnector] - doFirst() { - System.setProperty('cas.server.host', casServer().httpsHost) - System.setProperty('cas.service.host', jettyRunWar.httpsHost) +prepareAppServerForIntegrationTests { + dependsOn { casServer().tasks.appBeforeIntegrationTest } + doLast { + def casServiceHost = 'localhost:' + project.gretty.httpsPort + def casServerHost = 'localhost:' + casServer().gretty.httpsPort + gretty.jvmArgs += ["-Dcas.server.host=${casServerHost}", "-Dcas.service.host=${casServiceHost}"] } } -task cas (dependsOn: [jettyRunWar]) { - jettyRunWar.dependsOn(':spring-security-samples-xml-casserver:casServer') -} - -task casServer(dependsOn: ':spring-security-samples-xml-casserver:casServer') { -} - - -integrationTest.dependsOn cas -integrationTest.doFirst { - def casServiceHost = jettyRunWar.httpsHost - systemProperties['cas.server.host'] = casServer().httpsHost - systemProperties['cas.service.host'] = casServiceHost - systemProperties['geb.build.baseUrl'] = 'https://'+casServiceHost+'/cas-sample/' - systemProperties['geb.build.reportsDir'] = 'build/geb-reports' - systemProperties['jar.path'] = jar.archivePath - systemProperties['javax.net.ssl.trustStore'] = keystore - systemProperties['javax.net.ssl.trustStorePassword'] = password -} - -gradle.taskGraph.whenReady {graph -> - def casServer = casServer() - [casServer,jettyRunWar]*.metaClass*.getHttpsConnector {-> - def sslSocketConnClass = jettyRunWar.class.classLoader.loadClass('org.mortbay.jetty.security.SslSocketConnector') - delegate.connectors.find { it in sslSocketConnClass } - } - [casServer,jettyRunWar]*.metaClass*.getHttpsHost {-> - "localhost:"+delegate.httpsConnector.port - } - jettyRunWar.metaClass.getHttpConnector {-> - def channelConnClass = jettyRunWar.class.classLoader.loadClass('org.mortbay.jetty.nio.SelectChannelConnector') - delegate.connectors.find { it in channelConnClass } - } - if (graph.hasTask(cas)) { - casServer.daemon = true - } - if(graph.hasTask(integrationTest)) { - tasks.getByPath(':spring-security-samples-xml-casserver:casServerOverlay').logLevel = 'ERROR' - jettyRunWar { - additionalRuntimeJars += file('src/integration-test/resources') - daemon = true - } - - [jettyRunWar.httpConnector,jettyRunWar.httpsConnector,casServer.httpsConnector]*.metaClass*.reservePort { taskToCloseSocket -> - def serverSocket = new ServerSocket(0) - delegate.metaClass.serverSocket = serverSocket - delegate.port = serverSocket.localPort - taskToCloseSocket.doFirst { - serverSocket.close() - } - } - - [jettyRunWar.httpConnector,jettyRunWar.httpsConnector]*.reservePort(jettyRunWar) - jettyRunWar.httpConnector.confidentialPort = jettyRunWar.httpsConnector.port - casServer.httpsConnector.reservePort(casServer) - } +gretty { + contextPath = '/cas-sample/' + httpsEnabled = true + httpsPort = 8443 + sslKeyStorePath = keystore + sslKeyStorePassword = password + jvmArgs = ["-Djavax.net.ssl.trustStore=${keystore}", "-Djavax.net.ssl.trustStorePassword=${password}"] } def casServer() { - tasks.getByPath(':spring-security-samples-xml-casserver:casServer') + project(':spring-security-samples-xml-casserver') } diff --git a/samples/xml/cas/casserver/spring-security-samples-xml-casserver.gradle b/samples/xml/cas/casserver/spring-security-samples-xml-casserver.gradle index 65aa0064d6..727e684daf 100644 --- a/samples/xml/cas/casserver/spring-security-samples-xml-casserver.gradle +++ b/samples/xml/cas/casserver/spring-security-samples-xml-casserver.gradle @@ -1,63 +1,55 @@ import org.apache.tools.ant.filters.ReplaceTokens -apply plugin: 'io.spring.convention.spring-sample' +apply plugin: 'io.spring.convention.spring-sample-war' def keystore = "$rootDir/samples/certificates/server.jks" def password = 'password' -configurations { - casServer -} dependencies { - casServer "org.jasig.cas:cas-server-webapp:4.0.0@war" + compile "org.jasig.cas:cas-server-webapp:4.0.0@war" + compile slf4jDependencies } -task casServerOverlay(type: Sync) { - def war = configurations.casServer.resolve().toArray()[0] - def warName = war.name.replace('.war','-custom') - def overlayDir = file('src/main/webapp') - def explodedWar = file("$buildDir/tmp/${warName}") - ext.customWar = file("$buildDir/tmp/${warName}.war") - ext.tokens = [logLevel: 'INFO'] +project.tasks.withType(org.gradle.api.tasks.bundling.War) { war -> + war.duplicatesStrategy = DuplicatesStrategy.EXCLUDE + project.tasks.war.doFirst { + war.classpath = war.classpath.filter { !it.name.endsWith(".war") } - inputs.files(war, overlayDir) - inputs.property('tokens',{tokens}) - outputs.files (customWar,explodedWar,file("$buildDir/tmp/expandedArchives")) - - from zipTree(war) - from (overlayDir) { - filter(ReplaceTokens,tokens: tokens) - } - into explodedWar - - doLast { - if(customWar.exists()) { - customWar.delete() + war.project.configurations.runtime.each { + if (it.name.endsWith(".war")) { + def fileList = war.project.zipTree(it) + war.from fileList + } } - ant.zip(destfile: customWar, baseDir: explodedWar) } } -casServerOverlay.metaClass.setLogLevel { level -> - tokens['logLevel'] = level -} - -task casServer (type: org.gradle.api.plugins.jetty.JettyRunWar, dependsOn: 'casServerOverlay') { - contextPath = "/cas" - connectors = [casServer.class.classLoader.loadClass('org.mortbay.jetty.security.SslSocketConnector').newInstance()] - connectors[0].port = 9443 - connectors[0].keystore = connectors[0].truststore = keystore - connectors[0].keyPassword = connectors[0].trustPassword = password - connectors[0].wantClientAuth = true - connectors[0].needClientAuth = false - webApp = casServerOverlay.customWar - - inputs.file casServerOverlay.customWar - - doFirst() { - System.setProperty('javax.net.ssl.trustStore', keystore) - System.setProperty('javax.net.ssl.trustStorePassword', password) - System.setProperty('java.naming.factory.url.pkgs','org.mortbay.naming') - System.setProperty('java.naming.factory.initial','org.mortbay.naming.InitialContextFactory') +project.tasks.withType(org.akhikhl.gretty.StartBaseTask).all { task -> + task.doFirst { + def destinationDir = project.file("$buildDir/inplaceWebapp") + project.configurations.runtime.each { dependency -> + if (dependency.name.endsWith(".war")) { + def warTree = project.zipTree(dependency) + project.copy { + from warTree + into destinationDir + eachFile { + if (it.relativePath.getFile(destinationDir).exists()) { + it.exclude() + } + } + } + } + } } } + +gretty { + contextPath = '/cas' + httpsEnabled = true + httpPort = 9090 + httpsPort = 9443 + sslKeyStorePath = keystore + sslKeyStorePassword = password + jvmArgs = ["-Djavax.net.ssl.trustStore=${keystore}", "-Djavax.net.ssl.trustStorePassword=${password}"] +} diff --git a/samples/xml/cas/spring-security-samples-xml-cas.gradle b/samples/xml/cas/spring-security-samples-xml-cas.gradle new file mode 100644 index 0000000000..a39d857e39 --- /dev/null +++ b/samples/xml/cas/spring-security-samples-xml-cas.gradle @@ -0,0 +1,25 @@ +apply plugin: 'io.spring.convention.spring-sample-war' + +def keystore = "$rootDir/samples/certificates/server.jks" +def password = 'password' + +gretty { + httpsEnabled = true + httpsPort = 8443 + sslKeyStorePath = keystore + sslKeyStorePassword = password + jvmArgs = ["-Djavax.net.ssl.trustStore=${keystore}", + "-Djavax.net.ssl.trustStorePassword=${password}", + "-Dcas.server.host=localhost:$httpsPort", + "-Dcas.service.host=localhost:$httpsPort"] +} + +farm { + webapp ':spring-security-samples-xml-casserver' + webapp ':spring-security-samples-xml-cassample' +} + +task cas(dependsOn: 'farmRunWar') { + group 'Gretty tasks' + description 'Run CAS Server and Sample' +}