diff --git a/build.gradle b/build.gradle index 0616ccd61c..b90592ea91 100644 --- a/build.gradle +++ b/build.gradle @@ -65,6 +65,9 @@ configure(allprojects) { project -> ext.okhttp3Version = "3.3.1" ext.poiVersion = "3.14" ext.reactorVersion = "2.0.8.RELEASE" + ext.reactorCoreVersion = '2.5.0.BUILD-SNAPSHOT' + ext.reactorNettyVersion = '2.5.0.BUILD-SNAPSHOT' + ext.rxJavaVersion = '1.1.6' ext.romeVersion = "1.6.0" ext.slf4jVersion = "1.7.21" ext.snakeyamlVersion = "1.17" @@ -89,6 +92,18 @@ configure(allprojects) { project -> javaApiSignature } + configurations.all { + // check for updates every build + resolutionStrategy.cacheChangingModulesFor 0, 'seconds' + + // consistent netty version (e.g. clashes between netty-all vs netty-common) + resolutionStrategy.eachDependency { DependencyResolveDetails details -> + if (details.requested.group == 'io.netty') { + details.useVersion nettyVersion + } + } + } + compileJava.options*.compilerArgs = [ "-Xlint:serial", "-Xlint:varargs", "-Xlint:cast", "-Xlint:classfile", "-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally", @@ -128,6 +143,8 @@ configure(allprojects) { project -> repositories { maven { url "https://repo.spring.io/libs-release" } + maven { url 'https://oss.jfrog.org/libs-snapshot' } // RxNetty 0.5.x snapshots + maven { url 'http://repo.spring.io/snapshot' } // Reactor snapshots } dependencies { @@ -481,7 +498,9 @@ project("spring-messaging") { compile(project(":spring-core")) compile(project(":spring-context")) optional(project(":spring-oxm")) - optional("io.projectreactor:reactor-core:${reactorVersion}") + optional("io.projectreactor:reactor-core:${reactorVersion}") { + force = true // enforce 2.0.x + } optional("io.projectreactor:reactor-net:${reactorVersion}") { exclude group: "io.netty", module: "netty-all" } @@ -786,6 +805,38 @@ project("spring-webmvc") { } } +project("spring-web-reactive") { + description = "Spring Web Reactive" + + dependencies { + compile(project(":spring-core")) + compile(project(":spring-web")) + compile "org.reactivestreams:reactive-streams:1.0.0" + compile "io.projectreactor:reactor-core:${reactorCoreVersion}" + compile "io.netty:netty-buffer:${nettyVersion}" // Temporarily for JsonObjectDecoder + optional(project(":spring-context-support")) // for FreeMarker support + provided "javax.servlet:javax.servlet-api:3.1.0" + optional "org.apache.tomcat:tomcat-util:${tomcatVersion}" + optional "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}" + optional "org.eclipse.jetty:jetty-server:${jettyVersion}" + optional "org.eclipse.jetty:jetty-servlet:${jettyVersion}" + optional 'io.undertow:undertow-core:1.3.20.Final' + optional "io.projectreactor:reactor-netty:${reactorNettyVersion}" + optional "io.reactivex:rxjava:${rxJavaVersion}" + optional("io.reactivex:rxnetty-http:0.5.2-SNAPSHOT") { + exclude group: 'io.reactivex', module: 'rxjava' + } + optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}") + optional("com.fasterxml:aalto-xml:1.0.0") + optional("org.freemarker:freemarker:${freemarkerVersion}") + optional "org.apache.httpcomponents:httpclient:4.5.1" // Needed to run Javadoc without error + testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}") + testCompile "com.squareup.okhttp3:mockwebserver:3.0.1" + testCompile("javax.validation:validation-api:${beanvalVersion}") + testCompile("xmlunit:xmlunit:1.6") + } +} + project("spring-websocket") { description = "Spring WebSocket" @@ -825,6 +876,9 @@ project("spring-websocket") { optional("com.fasterxml.jackson.core:jackson-databind:${jackson2Version}") testCompile("org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}") testCompile("org.apache.tomcat.embed:tomcat-embed-websocket:${tomcatVersion}") + testCompile("io.projectreactor:reactor-core:${reactorVersion}") { + force = true // enforce 2.0.x + } testCompile("io.projectreactor:reactor-net:${reactorVersion}") testCompile("io.netty:netty-all:${nettyVersion}") testCompile("org.slf4j:slf4j-jcl:${slf4jVersion}") @@ -864,7 +918,9 @@ project("spring-test") { optional("xmlunit:xmlunit:${xmlunitVersion}") optional("net.sourceforge.htmlunit:htmlunit:2.22") optional("org.seleniumhq.selenium:htmlunit-driver:2.21") - optional("org.seleniumhq.selenium:selenium-java:2.53.1") + optional("org.seleniumhq.selenium:selenium-java:2.53.1") { + exclude group: "io.netty", module: "netty" + } optional("org.skyscreamer:jsonassert:1.3.0") optional("com.jayway.jsonpath:json-path:2.2.0") testCompile(project(":spring-context-support")) diff --git a/settings.gradle b/settings.gradle index 68e8234578..6c9be85d55 100644 --- a/settings.gradle +++ b/settings.gradle @@ -18,6 +18,7 @@ include "spring-test" include "spring-tx" include "spring-web" include "spring-webmvc" +include "spring-web-reactive" include "spring-websocket" include "spring-framework-bom" diff --git a/spring-web-reactive/README.md b/spring-web-reactive/README.md deleted file mode 100644 index 79d5f2b3be..0000000000 --- a/spring-web-reactive/README.md +++ /dev/null @@ -1,56 +0,0 @@ -Spring Reactive is a sandbox for experimenting on the reactive support intended to be part -of Spring Framework 5. For more information about this topic, you can have a look to -[Intro to Reactive programming][] and [Reactive Web Applications][] talks. - -## Downloading Artifacts -Spring Reactive JAR dependency is available from Spring snapshot repository: - - Repository URL: `https://repo.spring.io/snapshot/` - - GroupId: `org.springframework.reactive` - - ArtifactId: `spring-reactive` - - Version: `0.1.0.BUILD-SNAPSHOT` - -## Documentation -See the current [Javadoc][]. - -## Sample application -[Spring Reactive Playground] is a sample application based on Spring Reactive and on MongoDB, -Couchbase and PostgreSQL Reactive database drivers. - -## Building from Source -Spring Reactive uses a [Gradle][]-based build system. In the instructions -below, `./gradlew` is invoked from the root of the source tree and serves as -a cross-platform, self-contained bootstrap mechanism for the build. - -You can check the current build status on this [Bamboo Spring Reactive build][]. - -### Prerequisites - -[Git][] and [JDK 8 update 20 or later][JDK8 build] - -Be sure that your `JAVA_HOME` environment variable points to the `jdk1.8.0` folder -extracted from the JDK download. - -### Install all spring-\* jars into your local Maven cache -`./gradlew install` - -### Compile and test; build all jars, distribution zips, and docs -`./gradlew build` - -## Contributing -Feel free to send us your feedback on the [issue tracker][]; [Pull requests][] are welcome. - -## License -The Spring Reactive is released under version 2.0 of the [Apache License][]. - - -[Spring Reactive Playground]: https://github.com/sdeleuze/spring-reactive-playground -[Gradle]: http://gradle.org -[Bamboo Spring Reactive build]: https://build.spring.io/browse/SR-PUB -[Git]: http://help.github.com/set-up-git-redirect -[JDK8 build]: http://www.oracle.com/technetwork/java/javase/downloads -[Intro to Reactive programming]: http://fr.slideshare.net/StphaneMaldini/intro-to-reactive-programming-52821416 -[Reactive Web Applications]: http://fr.slideshare.net/rstoya05/reactive-web-applications -[issue tracker]: https://github.com/spring-projects/spring-reactive/issues -[Pull requests]: http://help.github.com/send-pull-requests -[Apache License]: http://www.apache.org/licenses/LICENSE-2.0 -[Javadoc]: https://repo.spring.io/snapshot/org/springframework/reactive/spring-reactive/0.1.0.BUILD-SNAPSHOT/spring-reactive-0.1.0.BUILD-SNAPSHOT-javadoc.jar!/overview-summary.html diff --git a/spring-web-reactive/build.gradle b/spring-web-reactive/build.gradle deleted file mode 100644 index 32571e2e98..0000000000 --- a/spring-web-reactive/build.gradle +++ /dev/null @@ -1,135 +0,0 @@ -buildscript { - repositories { - maven { url 'https://repo.spring.io/plugins-release' } - } - dependencies { - classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.7' - } -} - -apply plugin: 'java' -apply plugin: 'propdeps' -apply plugin: 'propdeps-idea' -apply plugin: 'propdeps-maven' - -jar { - baseName = 'spring-reactive' -} - -group = 'org.springframework.reactive' - -repositories { - mavenLocal() - mavenCentral() - maven { url 'https://oss.jfrog.org/libs-snapshot' } // RxNetty 0.5.x snapshots - maven { url 'http://repo.spring.io/milestone' } // Reactor milestone - maven { url 'http://repo.spring.io/snapshot' } // Reactor snapshot -} - -ext { - springVersion = '5.0.0.BUILD-SNAPSHOT' - reactorVersion = '2.5.0.BUILD-SNAPSHOT' - reactorNettyVersion = '2.5.0.BUILD-SNAPSHOT' - rxJavaVersion = '1.1.6' - tomcatVersion = '8.5.3' - jettyVersion = '9.3.10.v20160621' - nettyVersion = '4.1.2.Final' - jacksonVersion = '2.7.5' - - javadocLinks = [ - "http://docs.oracle.com/javase/8/docs/api/", - "http://projectreactor.io/core/docs/api/", - "http://docs.spring.io/spring/docs/${springVersion}/javadoc-api/", - "http://www.reactive-streams.org/reactive-streams-1.0.0-javadoc/" - ] as String[] -} - -configurations.all { - // check for updates every build - resolutionStrategy.cacheChangingModulesFor 0, 'seconds' - resolutionStrategy.eachDependency { DependencyResolveDetails details -> - // consistent netty version to avoid issues with clashes in netty-all vs - // netty-common for example - if (details.requested.group == 'io.netty') { - details.useVersion nettyVersion - } - } -} - -uploadArchives { - repositories { - mavenDeployer { - uniqueVersion = false - } - } -} - -javadoc { - description = "Generates project-level javadoc for use in -javadoc jar" - - options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED - options.author = true - options.header = project.name - options.addStringOption('Xdoclint:none', '-quiet') - options.links(project.ext.javadocLinks) -} - -task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.main.allSource -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} - -artifacts { - archives sourcesJar - archives javadocJar -} - -dependencies { - compile "org.springframework:spring-core:${springVersion}" - compile "org.springframework:spring-web:${springVersion}" - compile "org.reactivestreams:reactive-streams:1.0.0" - compile "io.projectreactor:reactor-core:${reactorVersion}" - compile "commons-logging:commons-logging:1.2" - compile "io.netty:netty-buffer:${nettyVersion}" // Temporarily for JsonObjectDecoder (GH #116) - - optional "org.springframework:spring-context-support:${springVersion}" // for FreeMarker - optional "io.reactivex:rxjava:${rxJavaVersion}" - optional ("io.reactivex:rxnetty-http:0.5.2-SNAPSHOT") { - exclude group: 'io.reactivex', module: 'rxjava' - } - optional "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}" - optional "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}" - optional "io.projectreactor:reactor-netty:${reactorNettyVersion}" - optional "org.apache.tomcat:tomcat-util:${tomcatVersion}" - optional "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}" - optional 'io.undertow:undertow-core:1.3.20.Final' - optional "org.eclipse.jetty:jetty-server:${jettyVersion}" - optional "org.eclipse.jetty:jetty-servlet:${jettyVersion}" - optional("org.freemarker:freemarker:2.3.23") - optional("com.fasterxml:aalto-xml:1.0.0") - optional("javax.validation:validation-api:1.1.0.Final") - - provided "javax.servlet:javax.servlet-api:3.1.0" - - testCompile "junit:junit:4.12" - testCompile "org.springframework:spring-test:${springVersion}" - testCompile "org.slf4j:slf4j-jcl:1.7.12" - testCompile "org.slf4j:jul-to-slf4j:1.7.12" - testCompile "log4j:log4j:1.2.16" - testCompile("org.mockito:mockito-core:1.10.19") { - exclude group: 'org.hamcrest', module: 'hamcrest-core' - } - testCompile "org.hamcrest:hamcrest-all:1.3" - testCompile "com.squareup.okhttp3:mockwebserver:3.0.1" - testCompile("xmlunit:xmlunit:1.6") - - // Needed to run Javadoc without error - optional "org.apache.httpcomponents:httpclient:4.5.1" -} - - diff --git a/spring-web-reactive/gradle.properties b/spring-web-reactive/gradle.properties deleted file mode 100644 index 09f2a8e531..0000000000 --- a/spring-web-reactive/gradle.properties +++ /dev/null @@ -1,2 +0,0 @@ -version=0.1.0.BUILD-SNAPSHOT - diff --git a/spring-web-reactive/gradle/wrapper/gradle-wrapper.jar b/spring-web-reactive/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 30d399d8d2..0000000000 Binary files a/spring-web-reactive/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/spring-web-reactive/gradle/wrapper/gradle-wrapper.properties b/spring-web-reactive/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 329a105dc7..0000000000 --- a/spring-web-reactive/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Fri Aug 07 17:32:01 EDT 2015 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-all.zip diff --git a/spring-web-reactive/gradlew b/spring-web-reactive/gradlew deleted file mode 100755 index 91a7e269e1..0000000000 --- a/spring-web-reactive/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/spring-web-reactive/gradlew.bat b/spring-web-reactive/gradlew.bat deleted file mode 100644 index aec99730b4..0000000000 --- a/spring-web-reactive/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/spring-web-reactive/settings.gradle b/spring-web-reactive/settings.gradle deleted file mode 100644 index 4fd62c48f4..0000000000 --- a/spring-web-reactive/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = "spring-reactive"