├── .gitignore ├── .mvn └── wrapper │ ├── MavenWrapperDownloader.java │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── mvnw ├── mvnw.cmd ├── pom.xml ├── simple-generator ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── custominitializr │ │ │ └── generator │ │ │ ├── SimpleGenerator.java │ │ │ └── contributor │ │ │ ├── SimpleContributor.java │ │ │ └── SimpleProjectGenerationConfiguration.java │ └── resources │ │ ├── META-INF │ │ └── spring.factories │ │ └── sample-metadata.json │ └── test │ ├── java │ └── com │ │ └── example │ │ └── custominitializr │ │ └── generator │ │ └── SimpleGeneratorRunner.java │ └── resources │ └── logback.xml └── simple-service ├── pom.xml └── src └── main ├── java └── com │ └── example │ └── custominitializr │ └── service │ └── SimpleServiceApplication.java └── resources └── application.yml /.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/** 5 | !**/src/test/** 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | 30 | ### VS Code ### 31 | .vscode/ 32 | -------------------------------------------------------------------------------- /.mvn/wrapper/MavenWrapperDownloader.java: -------------------------------------------------------------------------------- 1 | /* 2 | Licensed to the Apache Software Foundation (ASF) under one 3 | or more contributor license agreements. See the NOTICE file 4 | distributed with this work for additional information 5 | regarding copyright ownership. The ASF licenses this file 6 | to you under the Apache License, Version 2.0 (the 7 | "License"); you may not use this file except in compliance 8 | with the License. You may obtain a copy of the License at 9 | 10 | https://www.apache.org/licenses/LICENSE-2.0 11 | 12 | Unless required by applicable law or agreed to in writing, 13 | software distributed under the License is distributed on an 14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | KIND, either express or implied. See the License for the 16 | specific language governing permissions and limitations 17 | under the License. 18 | */ 19 | 20 | import java.io.File; 21 | import java.io.FileInputStream; 22 | import java.io.FileOutputStream; 23 | import java.io.IOException; 24 | import java.net.URL; 25 | import java.nio.channels.Channels; 26 | import java.nio.channels.ReadableByteChannel; 27 | import java.util.Properties; 28 | 29 | public class MavenWrapperDownloader { 30 | 31 | /** 32 | * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. 33 | */ 34 | private static final String DEFAULT_DOWNLOAD_URL = 35 | "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; 36 | 37 | /** 38 | * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to 39 | * use instead of the default one. 40 | */ 41 | private static final String MAVEN_WRAPPER_PROPERTIES_PATH = 42 | ".mvn/wrapper/maven-wrapper.properties"; 43 | 44 | /** 45 | * Path where the maven-wrapper.jar will be saved to. 46 | */ 47 | private static final String MAVEN_WRAPPER_JAR_PATH = 48 | ".mvn/wrapper/maven-wrapper.jar"; 49 | 50 | /** 51 | * Name of the property which should be used to override the default download url for the wrapper. 52 | */ 53 | private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; 54 | 55 | public static void main(String args[]) { 56 | System.out.println("- Downloader started"); 57 | File baseDirectory = new File(args[0]); 58 | System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); 59 | 60 | // If the maven-wrapper.properties exists, read it and check if it contains a custom 61 | // wrapperUrl parameter. 62 | File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); 63 | String url = DEFAULT_DOWNLOAD_URL; 64 | if (mavenWrapperPropertyFile.exists()) { 65 | FileInputStream mavenWrapperPropertyFileInputStream = null; 66 | try { 67 | mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); 68 | Properties mavenWrapperProperties = new Properties(); 69 | mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); 70 | url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); 71 | } 72 | catch (IOException e) { 73 | System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); 74 | } 75 | finally { 76 | try { 77 | if (mavenWrapperPropertyFileInputStream != null) { 78 | mavenWrapperPropertyFileInputStream.close(); 79 | } 80 | } 81 | catch (IOException e) { 82 | // Ignore ... 83 | } 84 | } 85 | } 86 | System.out.println("- Downloading from: : " + url); 87 | 88 | File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); 89 | if (!outputFile.getParentFile().exists()) { 90 | if (!outputFile.getParentFile().mkdirs()) { 91 | System.out.println( 92 | "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); 93 | } 94 | } 95 | System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); 96 | try { 97 | downloadFileFromURL(url, outputFile); 98 | System.out.println("Done"); 99 | System.exit(0); 100 | } 101 | catch (Throwable e) { 102 | System.out.println("- Error downloading"); 103 | e.printStackTrace(); 104 | System.exit(1); 105 | } 106 | } 107 | 108 | private static void downloadFileFromURL(String urlString, File destination) throws Exception { 109 | URL website = new URL(urlString); 110 | ReadableByteChannel rbc; 111 | rbc = Channels.newChannel(website.openStream()); 112 | FileOutputStream fos = new FileOutputStream(destination); 113 | fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); 114 | fos.close(); 115 | rbc.close(); 116 | } 117 | 118 | } 119 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snicoll/demo-custom-initializr/8ccad2279407576c94f14183b0df70f586f87394/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip 2 | -------------------------------------------------------------------------------- /mvnw: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Licensed to the Apache Software Foundation (ASF) under one 4 | # or more contributor license agreements. See the NOTICE file 5 | # distributed with this work for additional information 6 | # regarding copyright ownership. The ASF licenses this file 7 | # to you under the Apache License, Version 2.0 (the 8 | # "License"); you may not use this file except in compliance 9 | # with the License. You may obtain a copy of the License at 10 | # 11 | # https://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, 14 | # software distributed under the License is distributed on an 15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | # KIND, either express or implied. See the License for the 17 | # specific language governing permissions and limitations 18 | # under the License. 19 | # ---------------------------------------------------------------------------- 20 | 21 | # ---------------------------------------------------------------------------- 22 | # Maven2 Start Up Batch script 23 | # 24 | # Required ENV vars: 25 | # ------------------ 26 | # JAVA_HOME - location of a JDK home dir 27 | # 28 | # Optional ENV vars 29 | # ----------------- 30 | # M2_HOME - location of maven2's installed home dir 31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven 32 | # e.g. to debug Maven itself, use 33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files 35 | # ---------------------------------------------------------------------------- 36 | 37 | if [ -z "$MAVEN_SKIP_RC" ] ; then 38 | 39 | if [ -f /etc/mavenrc ] ; then 40 | . /etc/mavenrc 41 | fi 42 | 43 | if [ -f "$HOME/.mavenrc" ] ; then 44 | . "$HOME/.mavenrc" 45 | fi 46 | 47 | fi 48 | 49 | # OS specific support. $var _must_ be set to either true or false. 50 | cygwin=false; 51 | darwin=false; 52 | mingw=false 53 | case "`uname`" in 54 | CYGWIN*) cygwin=true ;; 55 | MINGW*) mingw=true;; 56 | Darwin*) darwin=true 57 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home 58 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html 59 | if [ -z "$JAVA_HOME" ]; then 60 | if [ -x "/usr/libexec/java_home" ]; then 61 | export JAVA_HOME="`/usr/libexec/java_home`" 62 | else 63 | export JAVA_HOME="/Library/Java/Home" 64 | fi 65 | fi 66 | ;; 67 | esac 68 | 69 | if [ -z "$JAVA_HOME" ] ; then 70 | if [ -r /etc/gentoo-release ] ; then 71 | JAVA_HOME=`java-config --jre-home` 72 | fi 73 | fi 74 | 75 | if [ -z "$M2_HOME" ] ; then 76 | ## resolve links - $0 may be a link to maven's home 77 | PRG="$0" 78 | 79 | # need this for relative symlinks 80 | while [ -h "$PRG" ] ; do 81 | ls=`ls -ld "$PRG"` 82 | link=`expr "$ls" : '.*-> \(.*\)$'` 83 | if expr "$link" : '/.*' > /dev/null; then 84 | PRG="$link" 85 | else 86 | PRG="`dirname "$PRG"`/$link" 87 | fi 88 | done 89 | 90 | saveddir=`pwd` 91 | 92 | M2_HOME=`dirname "$PRG"`/.. 93 | 94 | # make it fully qualified 95 | M2_HOME=`cd "$M2_HOME" && pwd` 96 | 97 | cd "$saveddir" 98 | # echo Using m2 at $M2_HOME 99 | fi 100 | 101 | # For Cygwin, ensure paths are in UNIX format before anything is touched 102 | if $cygwin ; then 103 | [ -n "$M2_HOME" ] && 104 | M2_HOME=`cygpath --unix "$M2_HOME"` 105 | [ -n "$JAVA_HOME" ] && 106 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 107 | [ -n "$CLASSPATH" ] && 108 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 109 | fi 110 | 111 | # For Mingw, ensure paths are in UNIX format before anything is touched 112 | if $mingw ; then 113 | [ -n "$M2_HOME" ] && 114 | M2_HOME="`(cd "$M2_HOME"; pwd)`" 115 | [ -n "$JAVA_HOME" ] && 116 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" 117 | # TODO classpath? 118 | fi 119 | 120 | if [ -z "$JAVA_HOME" ]; then 121 | javaExecutable="`which javac`" 122 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 123 | # readlink(1) is not available as standard on Solaris 10. 124 | readLink=`which readlink` 125 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 126 | if $darwin ; then 127 | javaHome="`dirname \"$javaExecutable\"`" 128 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 129 | else 130 | javaExecutable="`readlink -f \"$javaExecutable\"`" 131 | fi 132 | javaHome="`dirname \"$javaExecutable\"`" 133 | javaHome=`expr "$javaHome" : '\(.*\)/bin'` 134 | JAVA_HOME="$javaHome" 135 | export JAVA_HOME 136 | fi 137 | fi 138 | fi 139 | 140 | if [ -z "$JAVACMD" ] ; then 141 | if [ -n "$JAVA_HOME" ] ; then 142 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 143 | # IBM's JDK on AIX uses strange locations for the executables 144 | JAVACMD="$JAVA_HOME/jre/sh/java" 145 | else 146 | JAVACMD="$JAVA_HOME/bin/java" 147 | fi 148 | else 149 | JAVACMD="`which java`" 150 | fi 151 | fi 152 | 153 | if [ ! -x "$JAVACMD" ] ; then 154 | echo "Error: JAVA_HOME is not defined correctly." >&2 155 | echo " We cannot execute $JAVACMD" >&2 156 | exit 1 157 | fi 158 | 159 | if [ -z "$JAVA_HOME" ] ; then 160 | echo "Warning: JAVA_HOME environment variable is not set." 161 | fi 162 | 163 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 164 | 165 | # traverses directory structure from process work directory to filesystem root 166 | # first directory with .mvn subdirectory is considered project base directory 167 | find_maven_basedir() { 168 | 169 | if [ -z "$1" ] 170 | then 171 | echo "Path not specified to find_maven_basedir" 172 | return 1 173 | fi 174 | 175 | basedir="$1" 176 | wdir="$1" 177 | while [ "$wdir" != '/' ] ; do 178 | if [ -d "$wdir"/.mvn ] ; then 179 | basedir=$wdir 180 | break 181 | fi 182 | # workaround for JBEAP-8937 (on Solaris 10/Sparc) 183 | if [ -d "${wdir}" ]; then 184 | wdir=`cd "$wdir/.."; pwd` 185 | fi 186 | # end of workaround 187 | done 188 | echo "${basedir}" 189 | } 190 | 191 | # concatenates all lines of a file 192 | concat_lines() { 193 | if [ -f "$1" ]; then 194 | echo "$(tr -s '\n' ' ' < "$1")" 195 | fi 196 | } 197 | 198 | BASE_DIR=`find_maven_basedir "$(pwd)"` 199 | if [ -z "$BASE_DIR" ]; then 200 | exit 1; 201 | fi 202 | 203 | ########################################################################################## 204 | # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central 205 | # This allows using the maven wrapper in projects that prohibit checking in binary data. 206 | ########################################################################################## 207 | if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then 208 | if [ "$MVNW_VERBOSE" = true ]; then 209 | echo "Found .mvn/wrapper/maven-wrapper.jar" 210 | fi 211 | else 212 | if [ "$MVNW_VERBOSE" = true ]; then 213 | echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." 214 | fi 215 | jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" 216 | while IFS="=" read key value; do 217 | case "$key" in (wrapperUrl) jarUrl="$value"; break ;; 218 | esac 219 | done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" 220 | if [ "$MVNW_VERBOSE" = true ]; then 221 | echo "Downloading from: $jarUrl" 222 | fi 223 | wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" 224 | 225 | if command -v wget > /dev/null; then 226 | if [ "$MVNW_VERBOSE" = true ]; then 227 | echo "Found wget ... using wget" 228 | fi 229 | wget "$jarUrl" -O "$wrapperJarPath" 230 | elif command -v curl > /dev/null; then 231 | if [ "$MVNW_VERBOSE" = true ]; then 232 | echo "Found curl ... using curl" 233 | fi 234 | curl -o "$wrapperJarPath" "$jarUrl" 235 | else 236 | if [ "$MVNW_VERBOSE" = true ]; then 237 | echo "Falling back to using Java to download" 238 | fi 239 | javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" 240 | if [ -e "$javaClass" ]; then 241 | if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then 242 | if [ "$MVNW_VERBOSE" = true ]; then 243 | echo " - Compiling MavenWrapperDownloader.java ..." 244 | fi 245 | # Compiling the Java class 246 | ("$JAVA_HOME/bin/javac" "$javaClass") 247 | fi 248 | if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then 249 | # Running the downloader 250 | if [ "$MVNW_VERBOSE" = true ]; then 251 | echo " - Running MavenWrapperDownloader.java ..." 252 | fi 253 | ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") 254 | fi 255 | fi 256 | fi 257 | fi 258 | ########################################################################################## 259 | # End of extension 260 | ########################################################################################## 261 | 262 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} 263 | if [ "$MVNW_VERBOSE" = true ]; then 264 | echo $MAVEN_PROJECTBASEDIR 265 | fi 266 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 267 | 268 | # For Cygwin, switch paths to Windows format before running java 269 | if $cygwin; then 270 | [ -n "$M2_HOME" ] && 271 | M2_HOME=`cygpath --path --windows "$M2_HOME"` 272 | [ -n "$JAVA_HOME" ] && 273 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 274 | [ -n "$CLASSPATH" ] && 275 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 276 | [ -n "$MAVEN_PROJECTBASEDIR" ] && 277 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` 278 | fi 279 | 280 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 281 | 282 | exec "$JAVACMD" \ 283 | $MAVEN_OPTS \ 284 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 285 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 286 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" 287 | -------------------------------------------------------------------------------- /mvnw.cmd: -------------------------------------------------------------------------------- 1 | @REM ---------------------------------------------------------------------------- 2 | @REM Licensed to the Apache Software Foundation (ASF) under one 3 | @REM or more contributor license agreements. See the NOTICE file 4 | @REM distributed with this work for additional information 5 | @REM regarding copyright ownership. The ASF licenses this file 6 | @REM to you under the Apache License, Version 2.0 (the 7 | @REM "License"); you may not use this file except in compliance 8 | @REM with the License. You may obtain a copy of the License at 9 | @REM 10 | @REM https://www.apache.org/licenses/LICENSE-2.0 11 | @REM 12 | @REM Unless required by applicable law or agreed to in writing, 13 | @REM software distributed under the License is distributed on an 14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | @REM KIND, either express or implied. See the License for the 16 | @REM specific language governing permissions and limitations 17 | @REM under the License. 18 | @REM ---------------------------------------------------------------------------- 19 | 20 | @REM ---------------------------------------------------------------------------- 21 | @REM Maven2 Start Up Batch script 22 | @REM 23 | @REM Required ENV vars: 24 | @REM JAVA_HOME - location of a JDK home dir 25 | @REM 26 | @REM Optional ENV vars 27 | @REM M2_HOME - location of maven2's installed home dir 28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands 29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending 30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven 31 | @REM e.g. to debug Maven itself, use 32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files 34 | @REM ---------------------------------------------------------------------------- 35 | 36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' 37 | @echo off 38 | @REM set title of command window 39 | title %0 40 | @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' 41 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% 42 | 43 | @REM set %HOME% to equivalent of $HOME 44 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") 45 | 46 | @REM Execute a user defined script before this one 47 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre 48 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending 49 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" 50 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" 51 | :skipRcPre 52 | 53 | @setlocal 54 | 55 | set ERROR_CODE=0 56 | 57 | @REM To isolate internal variables from possible post scripts, we use another setlocal 58 | @setlocal 59 | 60 | @REM ==== START VALIDATION ==== 61 | if not "%JAVA_HOME%" == "" goto OkJHome 62 | 63 | echo. 64 | echo Error: JAVA_HOME not found in your environment. >&2 65 | echo Please set the JAVA_HOME variable in your environment to match the >&2 66 | echo location of your Java installation. >&2 67 | echo. 68 | goto error 69 | 70 | :OkJHome 71 | if exist "%JAVA_HOME%\bin\java.exe" goto init 72 | 73 | echo. 74 | echo Error: JAVA_HOME is set to an invalid directory. >&2 75 | echo JAVA_HOME = "%JAVA_HOME%" >&2 76 | echo Please set the JAVA_HOME variable in your environment to match the >&2 77 | echo location of your Java installation. >&2 78 | echo. 79 | goto error 80 | 81 | @REM ==== END VALIDATION ==== 82 | 83 | :init 84 | 85 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn". 86 | @REM Fallback to current working directory if not found. 87 | 88 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% 89 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir 90 | 91 | set EXEC_DIR=%CD% 92 | set WDIR=%EXEC_DIR% 93 | :findBaseDir 94 | IF EXIST "%WDIR%"\.mvn goto baseDirFound 95 | cd .. 96 | IF "%WDIR%"=="%CD%" goto baseDirNotFound 97 | set WDIR=%CD% 98 | goto findBaseDir 99 | 100 | :baseDirFound 101 | set MAVEN_PROJECTBASEDIR=%WDIR% 102 | cd "%EXEC_DIR%" 103 | goto endDetectBaseDir 104 | 105 | :baseDirNotFound 106 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR% 107 | cd "%EXEC_DIR%" 108 | 109 | :endDetectBaseDir 110 | 111 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig 112 | 113 | @setlocal EnableExtensions EnableDelayedExpansion 114 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a 115 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% 116 | 117 | :endReadAdditionalConfig 118 | 119 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" 120 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" 121 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 122 | 123 | set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" 124 | FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( 125 | IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B 126 | ) 127 | 128 | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central 129 | @REM This allows using the maven wrapper in projects that prohibit checking in binary data. 130 | if exist %WRAPPER_JAR% ( 131 | echo Found %WRAPPER_JAR% 132 | ) else ( 133 | echo Couldn't find %WRAPPER_JAR%, downloading it ... 134 | echo Downloading from: %DOWNLOAD_URL% 135 | powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" 136 | echo Finished downloading %WRAPPER_JAR% 137 | ) 138 | @REM End of extension 139 | 140 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* 141 | if ERRORLEVEL 1 goto error 142 | goto end 143 | 144 | :error 145 | set ERROR_CODE=1 146 | 147 | :end 148 | @endlocal & set ERROR_CODE=%ERROR_CODE% 149 | 150 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost 151 | @REM check for post script, once with legacy .bat ending and once with .cmd ending 152 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" 153 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" 154 | :skipRcPost 155 | 156 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' 157 | if "%MAVEN_BATCH_PAUSE%" == "on" pause 158 | 159 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% 160 | 161 | exit /B %ERROR_CODE% 162 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.springframework.boot 8 | spring-boot-starter-parent 9 | 2.1.9.RELEASE 10 | 11 | 12 | com.example 13 | demo-custom-initializr 14 | 0.0.1-SNAPSHOT 15 | pom 16 | Demo Custom Initializr 17 | Showcase various ways to customize Spring Initializr 18 | 19 | 20 | 1.8 21 | 0.8.0.RELEASE 22 | 23 | 24 | 25 | simple-generator 26 | simple-service 27 | 28 | 29 | 30 | 31 | 32 | com.example 33 | simple-generator 34 | 0.0.1-SNAPSHOT 35 | 36 | 37 | io.spring.initializr 38 | initializr-bom 39 | pom 40 | import 41 | ${spring-initializr.version} 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /simple-generator/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.example 8 | demo-custom-initializr 9 | 0.0.1-SNAPSHOT 10 | 11 | simple-generator 12 | Demo Custom Initializr :: Standalone project generator 13 | Showcase the ProjectGenerator API 14 | 15 | 16 | 17 | io.spring.initializr 18 | initializr-generator 19 | 20 | 21 | io.spring.initializr 22 | initializr-generator-spring 23 | 24 | 25 | 26 | org.springframework.boot 27 | spring-boot-starter-test 28 | test 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /simple-generator/src/main/java/com/example/custominitializr/generator/SimpleGenerator.java: -------------------------------------------------------------------------------- 1 | package com.example.custominitializr.generator; 2 | 3 | import java.nio.file.Path; 4 | import java.nio.file.Paths; 5 | import java.time.LocalDateTime; 6 | import java.time.format.DateTimeFormatter; 7 | 8 | import io.spring.initializr.generator.io.IndentingWriterFactory; 9 | import io.spring.initializr.generator.io.template.MustacheTemplateRenderer; 10 | import io.spring.initializr.generator.project.DefaultProjectAssetGenerator; 11 | import io.spring.initializr.generator.project.ProjectAssetGenerator; 12 | import io.spring.initializr.generator.project.ProjectDescription; 13 | import io.spring.initializr.generator.project.ProjectGenerator; 14 | import io.spring.initializr.metadata.InitializrMetadata; 15 | import io.spring.initializr.metadata.InitializrMetadataBuilder; 16 | 17 | import org.springframework.core.io.ClassPathResource; 18 | 19 | class SimpleGenerator { 20 | 21 | private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HHmmss"); 22 | 23 | Path generateProject(ProjectDescription description) { 24 | ProjectGenerator projectGenerator = new ProjectGenerator((context) -> { 25 | context.registerBean(InitializrMetadata.class, () -> InitializrMetadataBuilder.create() 26 | .withInitializrMetadata(new ClassPathResource("sample-metadata.json")).build()); 27 | context.registerBean(IndentingWriterFactory.class, IndentingWriterFactory::withDefaultSettings); 28 | context.registerBean(MustacheTemplateRenderer.class, 29 | () -> new MustacheTemplateRenderer("classpath:/templates")); 30 | }); 31 | ProjectAssetGenerator projectAssetGenerator = new DefaultProjectAssetGenerator( 32 | (resolvedDescription) -> Paths.get("target/projects", 33 | "project-" + formatter.format(LocalDateTime.now()))); 34 | return projectGenerator.generate(description, projectAssetGenerator); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /simple-generator/src/main/java/com/example/custominitializr/generator/contributor/SimpleContributor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012-2019 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.example.custominitializr.generator.contributor; 18 | 19 | import java.io.IOException; 20 | import java.io.PrintWriter; 21 | import java.nio.file.Files; 22 | import java.nio.file.Path; 23 | 24 | import io.spring.initializr.generator.project.contributor.ProjectContributor; 25 | 26 | public class SimpleContributor implements ProjectContributor { 27 | 28 | public void contribute(Path projectRoot) throws IOException { 29 | Path file = Files.createFile(projectRoot.resolve("hello.txt")); 30 | try (PrintWriter writer = new PrintWriter(Files.newBufferedWriter(file))) { 31 | writer.println("Test"); 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /simple-generator/src/main/java/com/example/custominitializr/generator/contributor/SimpleProjectGenerationConfiguration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012-2019 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.example.custominitializr.generator.contributor; 18 | 19 | import io.spring.initializr.generator.buildsystem.Build; 20 | import io.spring.initializr.generator.project.ProjectGenerationConfiguration; 21 | import io.spring.initializr.generator.spring.build.BuildCustomizer; 22 | 23 | import org.springframework.context.annotation.Bean; 24 | 25 | @ProjectGenerationConfiguration 26 | public class SimpleProjectGenerationConfiguration { 27 | 28 | @Bean 29 | public SimpleContributor simpleContributor() { 30 | return new SimpleContributor(); 31 | } 32 | 33 | @Bean 34 | public BuildCustomizer sampleBuildCustomizer() { 35 | return (build) -> build.properties().version("example.version", "1.0.0.RELEASE"); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /simple-generator/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | io.spring.initializr.generator.project.ProjectGenerationConfiguration=\ 2 | com.example.custominitializr.generator.contributor.SimpleProjectGenerationConfiguration -------------------------------------------------------------------------------- /simple-generator/src/main/resources/sample-metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "configuration": { 3 | "env": { 4 | "artifactRepository": "https://repo.spring.io/release/", 5 | "springBootMetadataUrl": "https://spring.io/project_metadata/spring-boot", 6 | "googleAnalyticsTrackingCode": null, 7 | "fallbackApplicationName": "Application", 8 | "invalidApplicationNames": [ 9 | "SpringApplication", 10 | "SpringBootApplication" 11 | ], 12 | "invalidPackageNames": [ 13 | "org.springframework" 14 | ], 15 | "forceSsl": true, 16 | "boms": { 17 | "azure": { 18 | "groupId": "com.microsoft.azure", 19 | "artifactId": "azure-spring-boot-bom", 20 | "versionProperty": "azure.version", 21 | "mappings": [ 22 | { 23 | "compatibilityRange": "[2.0.0.RELEASE,2.1.0.RELEASE)", 24 | "version": "2.0.10" 25 | }, 26 | { 27 | "compatibilityRange": "2.1.0.RELEASE", 28 | "version": "2.1.7" 29 | } 30 | ] 31 | }, 32 | "codecentric-spring-boot-admin": { 33 | "groupId": "de.codecentric", 34 | "artifactId": "spring-boot-admin-dependencies", 35 | "versionProperty": "spring-boot-admin.version", 36 | "mappings": [ 37 | { 38 | "compatibilityRange": "[2.0.0.M1,2.1.0.M1)", 39 | "version": "2.0.6" 40 | }, 41 | { 42 | "compatibilityRange": "[2.1.0.M1,2.2.0.M1)", 43 | "version": "2.1.5" 44 | } 45 | ] 46 | }, 47 | "spring-cloud": { 48 | "groupId": "org.springframework.cloud", 49 | "artifactId": "spring-cloud-dependencies", 50 | "versionProperty": "spring-cloud.version", 51 | "order": 50, 52 | "mappings": [ 53 | { 54 | "compatibilityRange": "[2.0.0.M3, 2.0.0.M5)", 55 | "version": "Finchley.M2", 56 | "repositories": [ 57 | "spring-milestones" 58 | ] 59 | }, 60 | { 61 | "compatibilityRange": "[2.0.0.M5, 2.0.0.M5]", 62 | "version": "Finchley.M3", 63 | "repositories": [ 64 | "spring-milestones" 65 | ] 66 | }, 67 | { 68 | "compatibilityRange": "[2.0.0.M6, 2.0.0.M6]", 69 | "version": "Finchley.M4", 70 | "repositories": [ 71 | "spring-milestones" 72 | ] 73 | }, 74 | { 75 | "compatibilityRange": "[2.0.0.M7, 2.0.0.M7]", 76 | "version": "Finchley.M5", 77 | "repositories": [ 78 | "spring-milestones" 79 | ] 80 | }, 81 | { 82 | "compatibilityRange": "[2.0.0.RC1, 2.0.0.RC1]", 83 | "version": "Finchley.M6", 84 | "repositories": [ 85 | "spring-milestones" 86 | ] 87 | }, 88 | { 89 | "compatibilityRange": "[2.0.0.RC2,2.0.0.RC2]", 90 | "version": "Finchley.M7", 91 | "repositories": [ 92 | "spring-milestones" 93 | ] 94 | }, 95 | { 96 | "compatibilityRange": "[2.0.0.RELEASE,2.0.0.RELEASE]", 97 | "version": "Finchley.M9", 98 | "repositories": [ 99 | "spring-milestones" 100 | ] 101 | }, 102 | { 103 | "compatibilityRange": "[2.0.1.RELEASE,2.0.2.RELEASE)", 104 | "version": "Finchley.RC1", 105 | "repositories": [ 106 | "spring-milestones" 107 | ] 108 | }, 109 | { 110 | "compatibilityRange": "[2.0.2.RELEASE,2.0.3.RELEASE)", 111 | "version": "Finchley.RC2", 112 | "repositories": [ 113 | "spring-milestones" 114 | ] 115 | }, 116 | { 117 | "compatibilityRange": "[2.0.3.RELEASE,2.0.x.BUILD-SNAPSHOT)", 118 | "version": "Finchley.SR4" 119 | }, 120 | { 121 | "compatibilityRange": "[2.0.x.BUILD-SNAPSHOT,2.1.0.M3)", 122 | "version": "Finchley.BUILD-SNAPSHOT", 123 | "repositories": [ 124 | "spring-snapshots", 125 | "spring-milestones" 126 | ] 127 | }, 128 | { 129 | "compatibilityRange": "[2.1.0.M3,2.1.0.RELEASE)", 130 | "version": "Greenwich.M1", 131 | "repositories": [ 132 | "spring-milestones" 133 | ] 134 | }, 135 | { 136 | "compatibilityRange": "[2.1.0.RELEASE,2.1.x.BUILD-SNAPSHOT)", 137 | "version": "Greenwich.SR3" 138 | }, 139 | { 140 | "compatibilityRange": "[2.1.x.BUILD-SNAPSHOT,2.2.0.M4)", 141 | "version": "Greenwich.BUILD-SNAPSHOT", 142 | "repositories": [ 143 | "spring-snapshots", 144 | "spring-milestones" 145 | ] 146 | }, 147 | { 148 | "compatibilityRange": "[2.2.0.M4,2.2.0.BUILD-SNAPSHOT)", 149 | "version": "Hoxton.M2", 150 | "repositories": [ 151 | "spring-milestones" 152 | ] 153 | }, 154 | { 155 | "compatibilityRange": "2.2.0.BUILD-SNAPSHOT", 156 | "version": "Hoxton.BUILD-SNAPSHOT", 157 | "repositories": [ 158 | "spring-snapshots", 159 | "spring-milestones" 160 | ] 161 | } 162 | ] 163 | }, 164 | "spring-cloud-services": { 165 | "groupId": "io.pivotal.spring.cloud", 166 | "artifactId": "spring-cloud-services-dependencies", 167 | "versionProperty": "spring-cloud-services.version", 168 | "additionalBoms": [ 169 | "spring-cloud" 170 | ], 171 | "mappings": [ 172 | { 173 | "compatibilityRange": "[2.0.0.RELEASE,2.0.x.BUILD-SNAPSHOT]", 174 | "version": "2.0.3.RELEASE" 175 | }, 176 | { 177 | "compatibilityRange": "2.1.0.RELEASE", 178 | "version": "2.1.4.RELEASE" 179 | } 180 | ] 181 | }, 182 | "spring-data-r2dbc": { 183 | "groupId": "org.springframework.boot.experimental", 184 | "artifactId": "spring-boot-bom-r2dbc", 185 | "mappings": [ 186 | { 187 | "compatibilityRange": "2.0.0.M6", 188 | "version": "0.1.0.BUILD-SNAPSHOT", 189 | "repositories": [ 190 | "spring-snapshots", 191 | "spring-milestones" 192 | ] 193 | } 194 | ] 195 | }, 196 | "spring-statemachine": { 197 | "groupId": "org.springframework.statemachine", 198 | "artifactId": "spring-statemachine-bom", 199 | "versionProperty": "spring-statemachine.version", 200 | "mappings": [ 201 | { 202 | "compatibilityRange": "[2.0.0.RC1,2.0.0.RC1]", 203 | "version": "2.0.0.M4", 204 | "repositories": [ 205 | "spring-milestones" 206 | ] 207 | }, 208 | { 209 | "compatibilityRange": "[2.0.0.RC2,2.0.0.RC2]", 210 | "version": "2.0.0.M5", 211 | "repositories": [ 212 | "spring-milestones" 213 | ] 214 | }, 215 | { 216 | "compatibilityRange": "2.0.0.RELEASE", 217 | "version": "2.0.1.RELEASE" 218 | } 219 | ] 220 | }, 221 | "vaadin": { 222 | "groupId": "com.vaadin", 223 | "artifactId": "vaadin-bom", 224 | "versionProperty": "vaadin.version", 225 | "mappings": [ 226 | { 227 | "compatibilityRange": "[2.0.0.M1,2.1.0.M1)", 228 | "version": "10.0.17" 229 | }, 230 | { 231 | "compatibilityRange": "2.1.0.M1", 232 | "version": "14.0.6" 233 | } 234 | ] 235 | } 236 | }, 237 | "repositories": { 238 | "spring-snapshots": { 239 | "name": "Spring Snapshots", 240 | "url": "https://repo.spring.io/snapshot", 241 | "snapshotsEnabled": true 242 | }, 243 | "spring-milestones": { 244 | "name": "Spring Milestones", 245 | "url": "https://repo.spring.io/milestone", 246 | "snapshotsEnabled": false 247 | }, 248 | "sonatype-snapshots": { 249 | "name": "Sonatype Snapshots", 250 | "url": "https://oss.sonatype.org/content/repositories/snapshots/", 251 | "snapshotsEnabled": true 252 | } 253 | }, 254 | "gradle": { 255 | "dependencyManagementPluginVersion": "1.0.8.RELEASE" 256 | }, 257 | "kotlin": { 258 | "defaultVersion": null, 259 | "mappings": [ 260 | { 261 | "compatibilityRange": "[1.5.0.RELEASE,2.0.0.M1)", 262 | "version": "1.2.51" 263 | } 264 | ] 265 | }, 266 | "maven": { 267 | "parent": { 268 | "groupId": null, 269 | "artifactId": null, 270 | "version": null, 271 | "includeSpringBootBom": false 272 | } 273 | } 274 | } 275 | }, 276 | "dependencies": { 277 | "id": "dependencies", 278 | "type": "HIERARCHICAL_MULTI_SELECT", 279 | "title": "Project dependencies", 280 | "description": "dependency identifiers (comma-separated)", 281 | "content": [ 282 | { 283 | "name": "Developer Tools", 284 | "content": [ 285 | { 286 | "name": "Spring Boot DevTools", 287 | "id": "devtools", 288 | "groupId": "org.springframework.boot", 289 | "artifactId": "spring-boot-devtools", 290 | "scope": "runtime", 291 | "description": "Provides fast application restarts, LiveReload, and configurations for enhanced development experience.", 292 | "starter": false, 293 | "links": [ 294 | { 295 | "rel": "reference", 296 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#using-boot-devtools", 297 | "templated": true 298 | } 299 | ] 300 | }, 301 | { 302 | "name": "Lombok", 303 | "id": "lombok", 304 | "groupId": "org.projectlombok", 305 | "artifactId": "lombok", 306 | "scope": "annotationProcessor", 307 | "description": "Java annotation library which helps to reduce boilerplate code.", 308 | "starter": false 309 | }, 310 | { 311 | "name": "Spring Configuration Processor", 312 | "id": "configuration-processor", 313 | "groupId": "org.springframework.boot", 314 | "artifactId": "spring-boot-configuration-processor", 315 | "scope": "annotationProcessor", 316 | "description": "Generate metadata for developers to offer contextual help and “code completion” when working with custom configuration keys (ex.application.properties/.yml files).", 317 | "starter": false, 318 | "links": [ 319 | { 320 | "rel": "reference", 321 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#configuration-metadata-annotation-processor", 322 | "templated": true 323 | } 324 | ] 325 | } 326 | ] 327 | }, 328 | { 329 | "name": "Web", 330 | "content": [ 331 | { 332 | "name": "Spring Web", 333 | "id": "web", 334 | "facets": [ 335 | "web", 336 | "json" 337 | ], 338 | "groupId": "org.springframework.boot", 339 | "artifactId": "spring-boot-starter-web", 340 | "scope": "compile", 341 | "description": "Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container.", 342 | "weight": 100, 343 | "starter": true, 344 | "links": [ 345 | { 346 | "rel": "guide", 347 | "href": "https://spring.io/guides/gs/rest-service/", 348 | "description": "Building a RESTful Web Service" 349 | }, 350 | { 351 | "rel": "reference", 352 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-developing-web-applications", 353 | "templated": true 354 | }, 355 | { 356 | "rel": "guide", 357 | "href": "https://spring.io/guides/gs/serving-web-content/", 358 | "description": "Serving Web Content with Spring MVC" 359 | }, 360 | { 361 | "rel": "guide", 362 | "href": "https://spring.io/guides/tutorials/bookmarks/", 363 | "description": "Building REST services with Spring" 364 | } 365 | ] 366 | }, 367 | { 368 | "name": "Spring Reactive Web", 369 | "id": "webflux", 370 | "facets": [ 371 | "json", 372 | "reactive" 373 | ], 374 | "groupId": "org.springframework.boot", 375 | "artifactId": "spring-boot-starter-webflux", 376 | "scope": "compile", 377 | "description": "Build reactive web applications with Spring WebFlux and Netty.", 378 | "weight": 90, 379 | "starter": true 380 | }, 381 | { 382 | "name": "Rest Repositories", 383 | "id": "data-rest", 384 | "facets": [ 385 | "json" 386 | ], 387 | "groupId": "org.springframework.boot", 388 | "artifactId": "spring-boot-starter-data-rest", 389 | "scope": "compile", 390 | "description": "Exposing Spring Data repositories over REST via Spring Data REST.", 391 | "weight": 10, 392 | "starter": true, 393 | "links": [ 394 | { 395 | "rel": "guide", 396 | "href": "https://spring.io/guides/gs/accessing-data-rest/", 397 | "description": "Accessing JPA Data with REST" 398 | }, 399 | { 400 | "rel": "guide", 401 | "href": "https://spring.io/guides/gs/accessing-neo4j-data-rest/", 402 | "description": "Accessing Neo4j Data with REST" 403 | }, 404 | { 405 | "rel": "guide", 406 | "href": "https://spring.io/guides/gs/accessing-mongodb-data-rest/", 407 | "description": "Accessing MongoDB Data with REST" 408 | }, 409 | { 410 | "rel": "reference", 411 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-use-exposing-spring-data-repositories-rest-endpoint", 412 | "templated": true 413 | } 414 | ] 415 | }, 416 | { 417 | "name": "Spring Session", 418 | "id": "session", 419 | "groupId": "org.springframework.session", 420 | "artifactId": "spring-session-core", 421 | "scope": "compile", 422 | "description": "Provides an API and implementations for managing user session information.", 423 | "starter": false 424 | }, 425 | { 426 | "name": "Rest Repositories HAL Browser", 427 | "id": "data-rest-hal", 428 | "groupId": "org.springframework.data", 429 | "artifactId": "spring-data-rest-hal-browser", 430 | "scope": "compile", 431 | "description": "Browsing Spring Data REST repositories in your browser.", 432 | "starter": false 433 | }, 434 | { 435 | "name": "Spring HATEOAS", 436 | "id": "hateoas", 437 | "groupId": "org.springframework.boot", 438 | "artifactId": "spring-boot-starter-hateoas", 439 | "scope": "compile", 440 | "description": "Eases the creation of RESTful APIs that follow the HATEOAS principle when working with Spring / Spring MVC.", 441 | "starter": true, 442 | "links": [ 443 | { 444 | "rel": "guide", 445 | "href": "https://spring.io/guides/gs/rest-hateoas/", 446 | "description": "Building a Hypermedia-Driven RESTful Web Service" 447 | }, 448 | { 449 | "rel": "reference", 450 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-hateoas", 451 | "templated": true 452 | } 453 | ] 454 | }, 455 | { 456 | "name": "Spring Web Services", 457 | "id": "web-services", 458 | "aliases": [ 459 | "ws" 460 | ], 461 | "groupId": "org.springframework.boot", 462 | "artifactId": "spring-boot-starter-web-services", 463 | "scope": "compile", 464 | "description": "Facilitates contract-first SOAP development. Allows for the creation of flexible web services using one of the many ways to manipulate XML payloads.", 465 | "starter": true, 466 | "links": [ 467 | { 468 | "rel": "guide", 469 | "href": "https://spring.io/guides/gs/producing-web-service/", 470 | "description": "Producing a SOAP web service" 471 | }, 472 | { 473 | "rel": "reference", 474 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-webservices", 475 | "templated": true 476 | } 477 | ] 478 | }, 479 | { 480 | "name": "Jersey", 481 | "id": "jersey", 482 | "facets": [ 483 | "json" 484 | ], 485 | "groupId": "org.springframework.boot", 486 | "artifactId": "spring-boot-starter-jersey", 487 | "scope": "compile", 488 | "description": "Framework for developing RESTful Web Services in Java that provides support for JAX-RS APIs.", 489 | "starter": true, 490 | "links": [ 491 | { 492 | "rel": "reference", 493 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-jersey", 494 | "templated": true 495 | } 496 | ] 497 | }, 498 | { 499 | "name": "Vaadin", 500 | "id": "vaadin", 501 | "facets": [ 502 | "web" 503 | ], 504 | "groupId": "com.vaadin", 505 | "artifactId": "vaadin-spring-boot-starter", 506 | "scope": "compile", 507 | "description": "Java framework for building rich client apps based on Web components.", 508 | "bom": "vaadin", 509 | "starter": true, 510 | "links": [ 511 | { 512 | "rel": "guide", 513 | "href": "https://spring.io/guides/gs/crud-with-vaadin/", 514 | "description": "Creating CRUD UI with Vaadin" 515 | }, 516 | { 517 | "rel": "reference", 518 | "href": "https://vaadin.com/spring" 519 | } 520 | ] 521 | } 522 | ] 523 | }, 524 | { 525 | "name": "Template Engines", 526 | "content": [ 527 | { 528 | "name": "Thymeleaf", 529 | "id": "thymeleaf", 530 | "groupId": "org.springframework.boot", 531 | "artifactId": "spring-boot-starter-thymeleaf", 532 | "scope": "compile", 533 | "description": "A modern server-side Java template engine for both web and standalone environments. Allows HTML to be correctly displayed in browsers and as static prototypes.", 534 | "weight": 90, 535 | "starter": true, 536 | "keywords": [ 537 | "template" 538 | ], 539 | "links": [ 540 | { 541 | "rel": "guide", 542 | "href": "https://spring.io/guides/gs/handling-form-submission/", 543 | "description": "Handling Form Submission" 544 | }, 545 | { 546 | "rel": "reference", 547 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines", 548 | "templated": true 549 | } 550 | ] 551 | }, 552 | { 553 | "name": "Apache Freemarker", 554 | "id": "freemarker", 555 | "groupId": "org.springframework.boot", 556 | "artifactId": "spring-boot-starter-freemarker", 557 | "scope": "compile", 558 | "description": "Java library to generate text output (HTML web pages, e-mails, configuration files, source code, etc.) based on templates and changing data.", 559 | "starter": true, 560 | "keywords": [ 561 | "template" 562 | ], 563 | "links": [ 564 | { 565 | "rel": "reference", 566 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines", 567 | "templated": true 568 | } 569 | ] 570 | }, 571 | { 572 | "name": "Mustache", 573 | "id": "mustache", 574 | "groupId": "org.springframework.boot", 575 | "artifactId": "spring-boot-starter-mustache", 576 | "scope": "compile", 577 | "description": "Logic-less Templates. There are no if statements, else clauses, or for loops. Instead there are only tags.", 578 | "starter": true, 579 | "keywords": [ 580 | "template" 581 | ], 582 | "links": [ 583 | { 584 | "rel": "reference", 585 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines", 586 | "templated": true 587 | } 588 | ] 589 | }, 590 | { 591 | "name": "Groovy Templates", 592 | "id": "groovy-templates", 593 | "facets": [ 594 | "web" 595 | ], 596 | "groupId": "org.springframework.boot", 597 | "artifactId": "spring-boot-starter-groovy-templates", 598 | "scope": "compile", 599 | "description": "Groovy templating engine", 600 | "starter": true, 601 | "links": [ 602 | { 603 | "rel": "reference", 604 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines", 605 | "templated": true 606 | } 607 | ] 608 | } 609 | ] 610 | }, 611 | { 612 | "name": "Security", 613 | "content": [ 614 | { 615 | "name": "Spring Security", 616 | "id": "security", 617 | "groupId": "org.springframework.boot", 618 | "artifactId": "spring-boot-starter-security", 619 | "scope": "compile", 620 | "description": "Highly customizable authentication and access-control framework for Spring applications.", 621 | "weight": 100, 622 | "starter": true, 623 | "links": [ 624 | { 625 | "rel": "guide", 626 | "href": "https://spring.io/guides/gs/securing-web/", 627 | "description": "Securing a Web Application" 628 | }, 629 | { 630 | "rel": "guide", 631 | "href": "https://spring.io/guides/tutorials/spring-boot-oauth2/", 632 | "description": "Spring Boot and OAuth2" 633 | }, 634 | { 635 | "rel": "guide", 636 | "href": "https://spring.io/guides/gs/authenticating-ldap/", 637 | "description": "Authenticating a User with LDAP" 638 | }, 639 | { 640 | "rel": "reference", 641 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-security", 642 | "templated": true 643 | } 644 | ] 645 | }, 646 | { 647 | "name": "OAuth2 Client", 648 | "id": "oauth2-client", 649 | "groupId": "org.springframework.boot", 650 | "artifactId": "spring-boot-starter-oauth2-client", 651 | "scope": "compile", 652 | "description": "Spring Boot integration for Spring Security's OAuth2/OpenID Connect client features.", 653 | "starter": true, 654 | "links": [ 655 | { 656 | "rel": "reference", 657 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-security-oauth2-client", 658 | "templated": true 659 | } 660 | ] 661 | }, 662 | { 663 | "name": "OAuth2 Resource Server", 664 | "id": "oauth2-resource-server", 665 | "groupId": "org.springframework.boot", 666 | "artifactId": "spring-boot-starter-oauth2-resource-server", 667 | "scope": "compile", 668 | "description": "Spring Boot integration for Spring Security's OAuth2 resource server features.", 669 | "compatibilityRange": "2.1.0.M2", 670 | "starter": true, 671 | "links": [ 672 | { 673 | "rel": "reference", 674 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-security-oauth2-server", 675 | "templated": true 676 | } 677 | ] 678 | }, 679 | { 680 | "name": "Spring LDAP", 681 | "id": "data-ldap", 682 | "groupId": "org.springframework.boot", 683 | "artifactId": "spring-boot-starter-data-ldap", 684 | "scope": "compile", 685 | "description": "Makes it easier to build Spring based applications that use the Lightweight Directory Access Protocol.", 686 | "starter": true, 687 | "links": [ 688 | { 689 | "rel": "reference", 690 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-ldap", 691 | "templated": true 692 | } 693 | ] 694 | }, 695 | { 696 | "name": "Okta", 697 | "id": "okta", 698 | "groupId": "com.okta.spring", 699 | "artifactId": "okta-spring-boot-starter", 700 | "version": "1.2.1", 701 | "scope": "compile", 702 | "description": "Okta specific configuration for Spring Security/Spring Boot OAuth2 features. Enable your Spring Boot application to work with Okta via OAuth 2.0/OIDC.", 703 | "compatibilityRange": "[2.1.2.RELEASE,2.2.0.M1)", 704 | "starter": true, 705 | "links": [ 706 | { 707 | "rel": "guide", 708 | "href": "https://github.com/okta/samples-java-spring/tree/master/okta-hosted-login", 709 | "description": "Okta-Hosted Login Page Example" 710 | }, 711 | { 712 | "rel": "guide", 713 | "href": "https://github.com/okta/samples-java-spring/tree/master/custom-login", 714 | "description": "Custom Login Page Example" 715 | }, 716 | { 717 | "rel": "guide", 718 | "href": "https://github.com/okta/samples-java-spring/tree/master/resource-server", 719 | "description": "Okta Spring Security Resource Server Example" 720 | }, 721 | { 722 | "rel": "reference", 723 | "href": "https://github.com/okta/okta-spring-boot/blob/master/README.md" 724 | } 725 | ] 726 | } 727 | ] 728 | }, 729 | { 730 | "name": "SQL", 731 | "content": [ 732 | { 733 | "name": "Spring Data JPA", 734 | "id": "data-jpa", 735 | "aliases": [ 736 | "jpa" 737 | ], 738 | "facets": [ 739 | "jpa" 740 | ], 741 | "groupId": "org.springframework.boot", 742 | "artifactId": "spring-boot-starter-data-jpa", 743 | "scope": "compile", 744 | "description": "Persist data in SQL stores with Java Persistence API using Spring Data and Hibernate.", 745 | "weight": 100, 746 | "starter": true, 747 | "links": [ 748 | { 749 | "rel": "guide", 750 | "href": "https://spring.io/guides/gs/accessing-data-jpa/", 751 | "description": "Accessing Data with JPA" 752 | }, 753 | { 754 | "rel": "reference", 755 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-jpa-and-spring-data", 756 | "templated": true 757 | } 758 | ] 759 | }, 760 | { 761 | "name": "Spring Data JDBC", 762 | "id": "data-jdbc", 763 | "groupId": "org.springframework.boot", 764 | "artifactId": "spring-boot-starter-data-jdbc", 765 | "scope": "compile", 766 | "description": "Persist data in SQL stores with plain JDBC using Spring Data.", 767 | "compatibilityRange": "2.1.0.RELEASE", 768 | "starter": true, 769 | "links": [ 770 | { 771 | "rel": "guide", 772 | "href": "https://github.com/spring-projects/spring-data-examples/tree/master/jdbc/basics", 773 | "description": "Using Spring Data JDBC" 774 | }, 775 | { 776 | "rel": "reference", 777 | "href": "https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/" 778 | } 779 | ] 780 | }, 781 | { 782 | "name": "Spring Data R2DBC [Experimental]", 783 | "id": "data-r2dbc", 784 | "facets": [ 785 | "reactive" 786 | ], 787 | "groupId": "org.springframework.boot.experimental", 788 | "artifactId": "spring-boot-starter-data-r2dbc", 789 | "scope": "compile", 790 | "description": "Provides Reactive Relational Database Connectivity to persist data in SQL stores using Spring Data in reactive applications.", 791 | "compatibilityRange": "2.2.0.M6", 792 | "bom": "spring-data-r2dbc", 793 | "starter": true, 794 | "links": [ 795 | { 796 | "rel": "guide", 797 | "href": "https://github.com/spring-projects-experimental/spring-boot-r2dbc/tree/master/spring-boot-example-h2", 798 | "description": "R2DBC example" 799 | }, 800 | { 801 | "rel": "reference", 802 | "href": "https://docs.spring.io/spring-data/r2dbc/docs/1.0.x/reference/html/#reference" 803 | }, 804 | { 805 | "rel": "home", 806 | "href": "https://r2dbc.io", 807 | "description": "R2DBC Homepage" 808 | } 809 | ] 810 | }, 811 | { 812 | "name": "MySQL Driver", 813 | "id": "mysql", 814 | "groupId": "mysql", 815 | "artifactId": "mysql-connector-java", 816 | "scope": "runtime", 817 | "description": "MySQL JDBC and R2DBC driver.", 818 | "starter": false, 819 | "links": [ 820 | { 821 | "rel": "guide", 822 | "href": "https://spring.io/guides/gs/accessing-data-mysql/", 823 | "description": "Accessing data with MySQL" 824 | } 825 | ] 826 | }, 827 | { 828 | "name": "H2 Database", 829 | "id": "h2", 830 | "groupId": "com.h2database", 831 | "artifactId": "h2", 832 | "scope": "runtime", 833 | "description": "Provides a fast in-memory database that supports JDBC API and R2DBC access, with a small (2mb) footprint. Supports embedded and server modes as well as a browser based console application.", 834 | "starter": false 835 | }, 836 | { 837 | "name": "JDBC API", 838 | "id": "jdbc", 839 | "groupId": "org.springframework.boot", 840 | "artifactId": "spring-boot-starter-jdbc", 841 | "scope": "compile", 842 | "description": "Database Connectivity API that defines how a client may connect and query a database.", 843 | "starter": true, 844 | "links": [ 845 | { 846 | "rel": "guide", 847 | "href": "https://spring.io/guides/gs/relational-data-access/", 848 | "description": "Accessing Relational Data using JDBC with Spring" 849 | }, 850 | { 851 | "rel": "guide", 852 | "href": "https://spring.io/guides/gs/managing-transactions/", 853 | "description": "Managing Transactions" 854 | }, 855 | { 856 | "rel": "reference", 857 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-sql", 858 | "templated": true 859 | } 860 | ] 861 | }, 862 | { 863 | "name": "MyBatis Framework", 864 | "id": "mybatis", 865 | "groupId": "org.mybatis.spring.boot", 866 | "artifactId": "mybatis-spring-boot-starter", 867 | "mappings": [ 868 | { 869 | "compatibilityRange": "[2.0.0.RELEASE,2.1.0.RELEASE)", 870 | "groupId": null, 871 | "artifactId": null, 872 | "version": "2.0.1", 873 | "starter": null 874 | }, 875 | { 876 | "compatibilityRange": "2.1.0.RELEASE", 877 | "groupId": null, 878 | "artifactId": null, 879 | "version": "2.1.0", 880 | "starter": null 881 | } 882 | ], 883 | "scope": "compile", 884 | "description": "Persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations.", 885 | "starter": true, 886 | "links": [ 887 | { 888 | "rel": "guide", 889 | "href": "https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start", 890 | "description": "MyBatis Quick Start" 891 | }, 892 | { 893 | "rel": "reference", 894 | "href": "https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/" 895 | } 896 | ] 897 | }, 898 | { 899 | "name": "PostgreSQL Driver", 900 | "id": "postgresql", 901 | "groupId": "org.postgresql", 902 | "artifactId": "postgresql", 903 | "scope": "runtime", 904 | "description": "A JDBC and R2DBC driver that allows Java programs to connect to a PostgreSQL database using standard, database independent Java code.", 905 | "starter": false 906 | }, 907 | { 908 | "name": "MS SQL Server Driver", 909 | "id": "sqlserver", 910 | "groupId": "com.microsoft.sqlserver", 911 | "artifactId": "mssql-jdbc", 912 | "scope": "runtime", 913 | "description": "A JDBC and R2DBC driver that provides access to Microsoft SQL Server and Azure SQL Database from any Java application.", 914 | "starter": false 915 | }, 916 | { 917 | "name": "HyperSQL Database", 918 | "id": "hsql", 919 | "groupId": "org.hsqldb", 920 | "artifactId": "hsqldb", 921 | "scope": "runtime", 922 | "description": "Lightweight 100% Java SQL Database Engine.", 923 | "starter": false 924 | }, 925 | { 926 | "name": "Apache Derby Database", 927 | "id": "derby", 928 | "groupId": "org.apache.derby", 929 | "artifactId": "derby", 930 | "scope": "runtime", 931 | "description": "An open source relational database implemented entirely in Java.", 932 | "starter": false 933 | }, 934 | { 935 | "name": "Liquibase Migration", 936 | "id": "liquibase", 937 | "groupId": "org.liquibase", 938 | "artifactId": "liquibase-core", 939 | "scope": "compile", 940 | "description": "Liquibase database migration and source control library.", 941 | "starter": false, 942 | "links": [ 943 | { 944 | "rel": "reference", 945 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-execute-liquibase-database-migrations-on-startup", 946 | "templated": true 947 | } 948 | ] 949 | }, 950 | { 951 | "name": "Flyway Migration", 952 | "id": "flyway", 953 | "groupId": "org.flywaydb", 954 | "artifactId": "flyway-core", 955 | "scope": "compile", 956 | "description": "Version control for your database so you can migrate from any version (incl. an empty database) to the latest version of the schema.", 957 | "starter": false, 958 | "links": [ 959 | { 960 | "rel": "reference", 961 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-execute-flyway-database-migrations-on-startup", 962 | "templated": true 963 | } 964 | ] 965 | }, 966 | { 967 | "name": "JOOQ Access Layer", 968 | "id": "jooq", 969 | "groupId": "org.springframework.boot", 970 | "artifactId": "spring-boot-starter-jooq", 971 | "scope": "compile", 972 | "description": "Generate Java code from your database and build type safe SQL queries through a fluent API.", 973 | "starter": true, 974 | "links": [ 975 | { 976 | "rel": "reference", 977 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-jooq", 978 | "templated": true 979 | } 980 | ] 981 | } 982 | ] 983 | }, 984 | { 985 | "name": "NoSQL", 986 | "content": [ 987 | { 988 | "name": "Spring Data Redis (Access+Driver)", 989 | "id": "data-redis", 990 | "aliases": [ 991 | "redis" 992 | ], 993 | "groupId": "org.springframework.boot", 994 | "artifactId": "spring-boot-starter-data-redis", 995 | "scope": "compile", 996 | "description": "Advanced and thread-safe Java Redis client for synchronous, asynchronous, and reactive usage. Supports Cluster, Sentinel, Pipelining, Auto-Reconnect, Codecs and much more.", 997 | "starter": true, 998 | "links": [ 999 | { 1000 | "rel": "guide", 1001 | "href": "https://spring.io/guides/gs/messaging-redis/", 1002 | "description": "Messaging with Redis" 1003 | }, 1004 | { 1005 | "rel": "reference", 1006 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-redis", 1007 | "templated": true 1008 | } 1009 | ] 1010 | }, 1011 | { 1012 | "name": "Spring Data Reactive Redis", 1013 | "id": "data-redis-reactive", 1014 | "facets": [ 1015 | "reactive" 1016 | ], 1017 | "groupId": "org.springframework.boot", 1018 | "artifactId": "spring-boot-starter-data-redis-reactive", 1019 | "scope": "compile", 1020 | "description": "Access Redis key-value data stores in a reactive fashion with Spring Data Redis.", 1021 | "starter": true, 1022 | "links": [ 1023 | { 1024 | "rel": "guide", 1025 | "href": "https://spring.io/guides/gs/messaging-redis/", 1026 | "description": "Messaging with Redis" 1027 | }, 1028 | { 1029 | "rel": "reference", 1030 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-redis", 1031 | "templated": true 1032 | } 1033 | ] 1034 | }, 1035 | { 1036 | "name": "Spring Data MongoDB", 1037 | "id": "data-mongodb", 1038 | "groupId": "org.springframework.boot", 1039 | "artifactId": "spring-boot-starter-data-mongodb", 1040 | "scope": "compile", 1041 | "description": "Store data in flexible, JSON-like documents, meaning fields can vary from document to document and data structure can be changed over time.", 1042 | "weight": 50, 1043 | "starter": true, 1044 | "links": [ 1045 | { 1046 | "rel": "guide", 1047 | "href": "https://spring.io/guides/gs/accessing-data-mongodb/", 1048 | "description": "Accessing Data with MongoDB" 1049 | }, 1050 | { 1051 | "rel": "reference", 1052 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-mongodb", 1053 | "templated": true 1054 | } 1055 | ] 1056 | }, 1057 | { 1058 | "name": "Spring Data Reactive MongoDB", 1059 | "id": "data-mongodb-reactive", 1060 | "facets": [ 1061 | "reactive" 1062 | ], 1063 | "groupId": "org.springframework.boot", 1064 | "artifactId": "spring-boot-starter-data-mongodb-reactive", 1065 | "scope": "compile", 1066 | "description": "Provides asynchronous stream processing with non-blocking back pressure for MongoDB.", 1067 | "weight": 50, 1068 | "starter": true, 1069 | "links": [ 1070 | { 1071 | "rel": "reference", 1072 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-mongodb", 1073 | "templated": true 1074 | } 1075 | ] 1076 | }, 1077 | { 1078 | "name": "Spring Data Elasticsearch (Access+Driver)", 1079 | "id": "data-elasticsearch", 1080 | "groupId": "org.springframework.boot", 1081 | "artifactId": "spring-boot-starter-data-elasticsearch", 1082 | "scope": "compile", 1083 | "description": "A distributed, RESTful search and analytics engine with Spring Data Elasticsearch.", 1084 | "weight": 10, 1085 | "starter": true, 1086 | "links": [ 1087 | { 1088 | "rel": "reference", 1089 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-elasticsearch", 1090 | "templated": true 1091 | } 1092 | ] 1093 | }, 1094 | { 1095 | "name": "Spring Data for Apache Solr", 1096 | "id": "data-solr", 1097 | "groupId": "org.springframework.boot", 1098 | "artifactId": "spring-boot-starter-data-solr", 1099 | "scope": "compile", 1100 | "description": "Apache Solr is an open source enterprise search platform built on Apache Lucene.", 1101 | "starter": true, 1102 | "links": [ 1103 | { 1104 | "rel": "reference", 1105 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-solr", 1106 | "templated": true 1107 | } 1108 | ] 1109 | }, 1110 | { 1111 | "name": "Spring Data for Apache Cassandra", 1112 | "id": "data-cassandra", 1113 | "groupId": "org.springframework.boot", 1114 | "artifactId": "spring-boot-starter-data-cassandra", 1115 | "scope": "compile", 1116 | "description": "A free and open-source, distributed, NoSQL database management system that offers high-scalability and high-performance.", 1117 | "starter": true, 1118 | "links": [ 1119 | { 1120 | "rel": "reference", 1121 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-cassandra", 1122 | "templated": true 1123 | } 1124 | ] 1125 | }, 1126 | { 1127 | "name": "Spring Data Reactive for Apache Cassandra", 1128 | "id": "data-cassandra-reactive", 1129 | "facets": [ 1130 | "reactive" 1131 | ], 1132 | "groupId": "org.springframework.boot", 1133 | "artifactId": "spring-boot-starter-data-cassandra-reactive", 1134 | "scope": "compile", 1135 | "description": "Access Cassandra NoSQL Database in a reactive fashion", 1136 | "starter": true, 1137 | "links": [ 1138 | { 1139 | "rel": "reference", 1140 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-cassandra", 1141 | "templated": true 1142 | } 1143 | ] 1144 | }, 1145 | { 1146 | "name": "Spring for Apache Geode", 1147 | "id": "geode", 1148 | "groupId": "org.springframework.geode", 1149 | "artifactId": "spring-geode-starter", 1150 | "version": "1.2.0.M3", 1151 | "scope": "compile", 1152 | "description": "Apache Geode is a data management platform that helps users build real-time, highly concurrent, highly performant and reliable Spring Boot applications at scale.", 1153 | "compatibilityRange": "2.2.0.M5", 1154 | "repository": "spring-milestones", 1155 | "starter": true, 1156 | "links": [ 1157 | { 1158 | "rel": "reference", 1159 | "href": "https://docs.spring.io/spring-boot-data-geode-build/current/reference/html5/" 1160 | }, 1161 | { 1162 | "rel": "guide", 1163 | "href": "https://github.com/spring-projects/spring-boot-data-geode/tree/master/spring-geode-samples", 1164 | "description": "Using Spring for Apache Geode" 1165 | } 1166 | ] 1167 | }, 1168 | { 1169 | "name": "Spring Data Couchbase", 1170 | "id": "data-couchbase", 1171 | "groupId": "org.springframework.boot", 1172 | "artifactId": "spring-boot-starter-data-couchbase", 1173 | "scope": "compile", 1174 | "description": "NoSQL document-oriented database that offers in memory-first architecture, geo-distributed deployments, and workload isolation.", 1175 | "starter": true, 1176 | "links": [ 1177 | { 1178 | "rel": "reference", 1179 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-couchbase", 1180 | "templated": true 1181 | } 1182 | ] 1183 | }, 1184 | { 1185 | "name": "Spring Data Reactive Couchbase", 1186 | "id": "data-couchbase-reactive", 1187 | "facets": [ 1188 | "reactive" 1189 | ], 1190 | "groupId": "org.springframework.boot", 1191 | "artifactId": "spring-boot-starter-data-couchbase-reactive", 1192 | "scope": "compile", 1193 | "description": "Access Couchbase NoSQL database in a reactive fashion with Spring Data Couchbase.", 1194 | "starter": true, 1195 | "links": [ 1196 | { 1197 | "rel": "reference", 1198 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-couchbase", 1199 | "templated": true 1200 | } 1201 | ] 1202 | }, 1203 | { 1204 | "name": "Spring Data Neo4j", 1205 | "id": "data-neo4j", 1206 | "groupId": "org.springframework.boot", 1207 | "artifactId": "spring-boot-starter-data-neo4j", 1208 | "scope": "compile", 1209 | "description": "An open source NoSQL database that stores data structured as graphs consisting of nodes, connected by relationships.", 1210 | "starter": true, 1211 | "links": [ 1212 | { 1213 | "rel": "guide", 1214 | "href": "https://spring.io/guides/gs/accessing-data-neo4j/", 1215 | "description": "Accessing Data with Neo4j" 1216 | }, 1217 | { 1218 | "rel": "reference", 1219 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-neo4j", 1220 | "templated": true 1221 | } 1222 | ] 1223 | } 1224 | ] 1225 | }, 1226 | { 1227 | "name": "Messaging", 1228 | "content": [ 1229 | { 1230 | "name": "Spring Integration", 1231 | "id": "integration", 1232 | "groupId": "org.springframework.boot", 1233 | "artifactId": "spring-boot-starter-integration", 1234 | "scope": "compile", 1235 | "description": "Adds support for Enterprise Integration Patterns. Enables lightweight messaging and supports integration with external systems via declarative adapters.", 1236 | "weight": 100, 1237 | "starter": true, 1238 | "links": [ 1239 | { 1240 | "rel": "guide", 1241 | "href": "https://spring.io/guides/gs/integration/", 1242 | "description": "Integrating Data" 1243 | }, 1244 | { 1245 | "rel": "reference", 1246 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-integration", 1247 | "templated": true 1248 | } 1249 | ] 1250 | }, 1251 | { 1252 | "name": "Spring for RabbitMQ", 1253 | "id": "amqp", 1254 | "groupId": "org.springframework.boot", 1255 | "artifactId": "spring-boot-starter-amqp", 1256 | "scope": "compile", 1257 | "description": "Gives your applications a common platform to send and receive messages, and your messages a safe place to live until received.", 1258 | "weight": 100, 1259 | "starter": true, 1260 | "keywords": [ 1261 | "messaging" 1262 | ], 1263 | "links": [ 1264 | { 1265 | "rel": "guide", 1266 | "href": "https://spring.io/guides/gs/messaging-rabbitmq/", 1267 | "description": "Messaging with RabbitMQ" 1268 | }, 1269 | { 1270 | "rel": "reference", 1271 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-amqp", 1272 | "templated": true 1273 | } 1274 | ] 1275 | }, 1276 | { 1277 | "name": "Spring for Apache Kafka", 1278 | "id": "kafka", 1279 | "groupId": "org.springframework.kafka", 1280 | "artifactId": "spring-kafka", 1281 | "scope": "compile", 1282 | "description": "Publish, subscribe, store, and process streams of records.", 1283 | "weight": 100, 1284 | "starter": false, 1285 | "keywords": [ 1286 | "messaging" 1287 | ], 1288 | "links": [ 1289 | { 1290 | "rel": "reference", 1291 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-kafka", 1292 | "templated": true 1293 | } 1294 | ] 1295 | }, 1296 | { 1297 | "name": "Spring for Apache Kafka Streams", 1298 | "id": "kafka-streams", 1299 | "groupId": "org.apache.kafka", 1300 | "artifactId": "kafka-streams", 1301 | "scope": "compile", 1302 | "description": "Building stream processing applications with Apache Kafka Streams.", 1303 | "weight": 90, 1304 | "starter": false, 1305 | "links": [ 1306 | { 1307 | "rel": "guide", 1308 | "href": "https://github.com/spring-cloud/spring-cloud-stream-samples/tree/master/kafka-streams-samples", 1309 | "description": "Samples for using Apache Kafka Streams with Spring Cloud stream" 1310 | }, 1311 | { 1312 | "rel": "reference", 1313 | "href": "https://docs.spring.io/spring-kafka/docs/current/reference/html/_reference.html#kafka-streams", 1314 | "description": "Apache Kafka Streams Support" 1315 | }, 1316 | { 1317 | "rel": "reference", 1318 | "href": "https://docs.spring.io/spring-cloud-stream/docs/current/reference/htmlsingle/#_kafka_streams_binding_capabilities_of_spring_cloud_stream", 1319 | "description": "Apache Kafka Streams Binding Capabilities of Spring Cloud Stream" 1320 | } 1321 | ] 1322 | }, 1323 | { 1324 | "name": "Spring for Apache ActiveMQ 5", 1325 | "id": "activemq", 1326 | "groupId": "org.springframework.boot", 1327 | "artifactId": "spring-boot-starter-activemq", 1328 | "scope": "compile", 1329 | "description": "Spring JMS support with Apache ActiveMQ 'Classic'", 1330 | "starter": true, 1331 | "links": [ 1332 | { 1333 | "rel": "guide", 1334 | "href": "https://spring.io/guides/gs/messaging-jms/", 1335 | "description": "Java Message Service API via Apache ActiveMQ Classic." 1336 | }, 1337 | { 1338 | "rel": "reference", 1339 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-activemq", 1340 | "templated": true 1341 | } 1342 | ] 1343 | }, 1344 | { 1345 | "name": "Spring for Apache ActiveMQ Artemis", 1346 | "id": "artemis", 1347 | "groupId": "org.springframework.boot", 1348 | "artifactId": "spring-boot-starter-artemis", 1349 | "scope": "compile", 1350 | "description": "Spring JMS support with Apache ActiveMQ Artemis", 1351 | "starter": true, 1352 | "links": [ 1353 | { 1354 | "rel": "guide", 1355 | "href": "https://spring.io/guides/gs/messaging-jms/", 1356 | "description": "Messaging with JMS" 1357 | }, 1358 | { 1359 | "rel": "reference", 1360 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-artemis", 1361 | "templated": true 1362 | } 1363 | ] 1364 | }, 1365 | { 1366 | "name": "WebSocket", 1367 | "id": "websocket", 1368 | "groupId": "org.springframework.boot", 1369 | "artifactId": "spring-boot-starter-websocket", 1370 | "scope": "compile", 1371 | "description": "Build WebSocket applications with SockJS and STOMP.", 1372 | "starter": true, 1373 | "links": [ 1374 | { 1375 | "rel": "guide", 1376 | "href": "https://spring.io/guides/gs/messaging-stomp-websocket/", 1377 | "description": "Using WebSocket to build an interactive web application" 1378 | }, 1379 | { 1380 | "rel": "reference", 1381 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-websockets", 1382 | "templated": true 1383 | } 1384 | ] 1385 | }, 1386 | { 1387 | "name": "RSocket", 1388 | "id": "rsocket", 1389 | "groupId": "org.springframework.boot", 1390 | "artifactId": "spring-boot-starter-rsocket", 1391 | "scope": "compile", 1392 | "description": "RSocket.io applications with Spring Messaging and Netty.", 1393 | "compatibilityRange": "2.2.0.M2", 1394 | "starter": true 1395 | }, 1396 | { 1397 | "name": "Apache Camel", 1398 | "id": "camel", 1399 | "groupId": "org.apache.camel", 1400 | "artifactId": "camel-spring-boot-starter", 1401 | "mappings": [ 1402 | { 1403 | "compatibilityRange": "[2.0.0.M1,2.1.0.M1)", 1404 | "groupId": null, 1405 | "artifactId": null, 1406 | "version": "2.22.4", 1407 | "starter": null 1408 | }, 1409 | { 1410 | "compatibilityRange": "2.1.0.M1", 1411 | "groupId": null, 1412 | "artifactId": null, 1413 | "version": "2.24.0", 1414 | "starter": null 1415 | } 1416 | ], 1417 | "scope": "compile", 1418 | "description": "Apache Camel lets you create the Enterprise Integration Patterns to implement routing and mediation rules a Java based Domain Specific Language via Spring.", 1419 | "compatibilityRange": "[2.0.0.M1,2.2.0.M1)", 1420 | "starter": true, 1421 | "links": [ 1422 | { 1423 | "rel": "guide", 1424 | "href": "https://camel.apache.org/spring-boot", 1425 | "description": "Using Apache Camel with Spring Boot" 1426 | } 1427 | ] 1428 | } 1429 | ] 1430 | }, 1431 | { 1432 | "name": "I/O", 1433 | "content": [ 1434 | { 1435 | "name": "Spring Batch", 1436 | "id": "batch", 1437 | "groupId": "org.springframework.boot", 1438 | "artifactId": "spring-boot-starter-batch", 1439 | "scope": "compile", 1440 | "description": "Batch applications with transactions, retry/skip and chunk based processing.", 1441 | "weight": 100, 1442 | "starter": true, 1443 | "links": [ 1444 | { 1445 | "rel": "guide", 1446 | "href": "https://spring.io/guides/gs/batch-processing/", 1447 | "description": "Creating a Batch Service" 1448 | }, 1449 | { 1450 | "rel": "reference", 1451 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-batch-applications", 1452 | "templated": true 1453 | } 1454 | ] 1455 | }, 1456 | { 1457 | "name": "Java Mail Sender", 1458 | "id": "mail", 1459 | "groupId": "org.springframework.boot", 1460 | "artifactId": "spring-boot-starter-mail", 1461 | "scope": "compile", 1462 | "description": "Send email using Java Mail and Spring Framework's JavaMailSender.", 1463 | "starter": true, 1464 | "links": [ 1465 | { 1466 | "rel": "reference", 1467 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-email", 1468 | "templated": true 1469 | } 1470 | ] 1471 | }, 1472 | { 1473 | "name": "Quartz Scheduler", 1474 | "id": "quartz", 1475 | "groupId": "org.springframework.boot", 1476 | "artifactId": "spring-boot-starter-quartz", 1477 | "scope": "compile", 1478 | "description": "Schedule jobs using Quartz.", 1479 | "starter": true 1480 | }, 1481 | { 1482 | "name": "Spring cache abstraction", 1483 | "id": "cache", 1484 | "groupId": "org.springframework.boot", 1485 | "artifactId": "spring-boot-starter-cache", 1486 | "scope": "compile", 1487 | "description": "Provides cache-related operations, such as the ability to update the content of the cache, but does not provide the actual data store.", 1488 | "starter": true, 1489 | "links": [ 1490 | { 1491 | "rel": "guide", 1492 | "href": "https://spring.io/guides/gs/caching/", 1493 | "description": "Caching Data with Spring" 1494 | }, 1495 | { 1496 | "rel": "reference", 1497 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-caching", 1498 | "templated": true 1499 | } 1500 | ] 1501 | } 1502 | ] 1503 | }, 1504 | { 1505 | "name": "Ops", 1506 | "content": [ 1507 | { 1508 | "name": "Spring Boot Actuator", 1509 | "id": "actuator", 1510 | "groupId": "org.springframework.boot", 1511 | "artifactId": "spring-boot-starter-actuator", 1512 | "scope": "compile", 1513 | "description": "Supports built in (or custom) endpoints that let you monitor and manage your application - such as application health, metrics, sessions, etc.", 1514 | "starter": true, 1515 | "links": [ 1516 | { 1517 | "rel": "guide", 1518 | "href": "https://spring.io/guides/gs/actuator-service/", 1519 | "description": "Building a RESTful Web Service with Spring Boot Actuator" 1520 | }, 1521 | { 1522 | "rel": "reference", 1523 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#production-ready", 1524 | "templated": true 1525 | } 1526 | ] 1527 | }, 1528 | { 1529 | "name": "Spring Boot Admin (Client)", 1530 | "id": "codecentric-spring-boot-admin-client", 1531 | "groupId": "de.codecentric", 1532 | "artifactId": "spring-boot-admin-starter-client", 1533 | "scope": "compile", 1534 | "description": "Required for your application to register with a Spring Boot Admin Server instance.", 1535 | "compatibilityRange": "[2.0.0.RELEASE,2.2.0.M1)", 1536 | "bom": "codecentric-spring-boot-admin", 1537 | "starter": true, 1538 | "links": [ 1539 | { 1540 | "rel": "reference", 1541 | "href": "https://codecentric.github.io/spring-boot-admin/current/#getting-started" 1542 | } 1543 | ] 1544 | }, 1545 | { 1546 | "name": "Spring Boot Admin (Server)", 1547 | "id": "codecentric-spring-boot-admin-server", 1548 | "groupId": "de.codecentric", 1549 | "artifactId": "spring-boot-admin-starter-server", 1550 | "scope": "compile", 1551 | "description": "A community project to manage and monitor your Spring Boot applications. Provides a UI on top of the Spring Boot Actuator endpoints.", 1552 | "compatibilityRange": "[2.0.0.RELEASE,2.2.0.M1)", 1553 | "bom": "codecentric-spring-boot-admin", 1554 | "starter": true, 1555 | "links": [ 1556 | { 1557 | "rel": "reference", 1558 | "href": "https://codecentric.github.io/spring-boot-admin/current/#getting-started" 1559 | } 1560 | ] 1561 | } 1562 | ] 1563 | }, 1564 | { 1565 | "name": "Testing", 1566 | "content": [ 1567 | { 1568 | "name": "Spring REST Docs", 1569 | "id": "restdocs", 1570 | "groupId": "org.springframework.restdocs", 1571 | "artifactId": "spring-restdocs-mockmvc", 1572 | "scope": "test", 1573 | "description": "Document RESTful services by combining hand-written with Asciidoctor and auto-generated snippets produced with Spring MVC Test.", 1574 | "starter": false 1575 | }, 1576 | { 1577 | "name": "Contract Verifier", 1578 | "id": "cloud-contract-verifier", 1579 | "groupId": "org.springframework.cloud", 1580 | "artifactId": "spring-cloud-starter-contract-verifier", 1581 | "scope": "test", 1582 | "description": "Moves TDD to the level of software architecture by enabling Consumer Driven Contract (CDC) development.", 1583 | "bom": "spring-cloud", 1584 | "starter": true, 1585 | "links": [ 1586 | { 1587 | "rel": "guide", 1588 | "href": "https://cloud.spring.io/spring-cloud-contract/spring-cloud-contract.html#_spring_cloud_contract_verifier_setup", 1589 | "description": "Spring Cloud Contract Verifier Setup" 1590 | } 1591 | ] 1592 | }, 1593 | { 1594 | "name": "Contract Stub Runner", 1595 | "id": "cloud-contract-stub-runner", 1596 | "groupId": "org.springframework.cloud", 1597 | "artifactId": "spring-cloud-starter-contract-stub-runner", 1598 | "scope": "test", 1599 | "description": "Stub Runner for HTTP/Messaging based communication. Allows creating WireMock stubs from RestDocs tests.", 1600 | "bom": "spring-cloud", 1601 | "starter": true 1602 | }, 1603 | { 1604 | "name": "Embedded LDAP Server", 1605 | "id": "unboundid-ldap", 1606 | "groupId": "com.unboundid", 1607 | "artifactId": "unboundid-ldapsdk", 1608 | "scope": "test", 1609 | "description": "Provides a platform neutral way for running a LDAP server in unit tests.", 1610 | "starter": false, 1611 | "links": [ 1612 | { 1613 | "rel": "reference", 1614 | "href": "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/html/boot-features-nosql.html#boot-features-ldap-embedded", 1615 | "templated": true 1616 | } 1617 | ] 1618 | }, 1619 | { 1620 | "name": "Embedded MongoDB Database", 1621 | "id": "flapdoodle-mongo", 1622 | "groupId": "de.flapdoodle.embed", 1623 | "artifactId": "de.flapdoodle.embed.mongo", 1624 | "scope": "test", 1625 | "description": "Provides a platform neutral way for running MongoDB in unit tests.", 1626 | "starter": false 1627 | } 1628 | ] 1629 | }, 1630 | { 1631 | "name": "Spring Cloud", 1632 | "content": [ 1633 | { 1634 | "name": "Cloud Bootstrap", 1635 | "id": "cloud-starter", 1636 | "groupId": "org.springframework.cloud", 1637 | "artifactId": "spring-cloud-starter", 1638 | "scope": "compile", 1639 | "description": "Non-specific Spring Cloud features, unrelated to external libraries or integrations (e.g. Bootstrap context and @RefreshScope)", 1640 | "bom": "spring-cloud", 1641 | "starter": true, 1642 | "links": [ 1643 | { 1644 | "rel": "reference", 1645 | "href": "https://spring.io/projects/spring-cloud-commons" 1646 | } 1647 | ] 1648 | }, 1649 | { 1650 | "name": "Function", 1651 | "id": "cloud-function", 1652 | "groupId": "org.springframework.cloud", 1653 | "artifactId": "spring-cloud-function-context", 1654 | "scope": "compile", 1655 | "description": "Promotes the implementation of business logic via functions and supports a uniform programming model across serverless providers, as well as the ability to run standalone (locally or in a PaaS).", 1656 | "bom": "spring-cloud", 1657 | "starter": false, 1658 | "links": [ 1659 | { 1660 | "rel": "reference", 1661 | "href": "https://cloud.spring.io/spring-cloud-function/" 1662 | }, 1663 | { 1664 | "rel": "sample", 1665 | "href": "https://github.com/spring-cloud/spring-cloud-function/tree/master/spring-cloud-function-samples", 1666 | "description": "Various sample apps using Spring Cloud Function" 1667 | } 1668 | ] 1669 | }, 1670 | { 1671 | "name": "Task", 1672 | "id": "cloud-task", 1673 | "groupId": "org.springframework.cloud", 1674 | "artifactId": "spring-cloud-starter-task", 1675 | "scope": "compile", 1676 | "description": "Allows a user to develop and run short lived microservices using Spring Cloud. Run them locally, in the cloud, and on Spring Cloud Data Flow.", 1677 | "bom": "spring-cloud", 1678 | "starter": true 1679 | } 1680 | ] 1681 | }, 1682 | { 1683 | "name": "Spring Cloud Security", 1684 | "content": [ 1685 | { 1686 | "name": "Cloud Security", 1687 | "id": "cloud-security", 1688 | "groupId": "org.springframework.cloud", 1689 | "artifactId": "spring-cloud-starter-security", 1690 | "scope": "compile", 1691 | "description": "A declarative model which can be heavily configured externally (or centrally) lends itself to the implementation of large systems of co-operating, remote components, usually with a central indentity management service.", 1692 | "bom": "spring-cloud", 1693 | "starter": true 1694 | }, 1695 | { 1696 | "name": "Cloud OAuth2", 1697 | "id": "cloud-oauth2", 1698 | "groupId": "org.springframework.cloud", 1699 | "artifactId": "spring-cloud-starter-oauth2", 1700 | "scope": "compile", 1701 | "description": "OAuth2 and distributed application patterns with spring-cloud-security.", 1702 | "bom": "spring-cloud", 1703 | "starter": true 1704 | } 1705 | ] 1706 | }, 1707 | { 1708 | "name": "Spring Cloud Tools", 1709 | "content": [ 1710 | { 1711 | "name": "Cloud Connectors", 1712 | "id": "cloud-connectors", 1713 | "groupId": "org.springframework.boot", 1714 | "artifactId": "spring-boot-starter-cloud-connectors", 1715 | "scope": "compile", 1716 | "description": "Simplifies the process of connecting to services and gaining operating environment awareness in cloud platforms such as Cloud Foundry and Heroku.", 1717 | "starter": true 1718 | }, 1719 | { 1720 | "name": "Open Service Broker", 1721 | "id": "open-service-broker", 1722 | "groupId": "org.springframework.cloud", 1723 | "artifactId": "spring-cloud-starter-open-service-broker", 1724 | "mappings": [ 1725 | { 1726 | "compatibilityRange": "[2.0.0.RELEASE,2.1.0.M1)", 1727 | "groupId": null, 1728 | "artifactId": "spring-cloud-starter-open-service-broker-webmvc", 1729 | "version": "2.1.2.RELEASE", 1730 | "starter": null 1731 | }, 1732 | { 1733 | "compatibilityRange": "2.1.0.M1", 1734 | "groupId": null, 1735 | "artifactId": null, 1736 | "version": "3.0.4.RELEASE", 1737 | "starter": null 1738 | } 1739 | ], 1740 | "scope": "compile", 1741 | "description": "Framework for building Spring Boot apps that implement the Open Service Broker API, which can deliver services to applications running within cloud native platforms such as Cloud Foundry, Kubernetes and OpenShift.", 1742 | "bom": "spring-cloud", 1743 | "starter": true, 1744 | "links": [ 1745 | { 1746 | "rel": "reference", 1747 | "href": "https://docs.spring.io/spring-cloud-open-service-broker/docs/current/reference/html5/" 1748 | }, 1749 | { 1750 | "rel": "guide", 1751 | "href": "https://github.com/spring-cloud-samples/bookstore-service-broker", 1752 | "description": "Using Spring Cloud Open Service Broker" 1753 | } 1754 | ] 1755 | } 1756 | ] 1757 | }, 1758 | { 1759 | "name": "Spring Cloud Config", 1760 | "content": [ 1761 | { 1762 | "name": "Config Client", 1763 | "id": "cloud-config-client", 1764 | "groupId": "org.springframework.cloud", 1765 | "artifactId": "spring-cloud-starter-config", 1766 | "scope": "compile", 1767 | "description": "Client that connects to a Spring Cloud Config Server to fetch the application's configuration.", 1768 | "bom": "spring-cloud", 1769 | "weight": 100, 1770 | "starter": true 1771 | }, 1772 | { 1773 | "name": "Config Server", 1774 | "id": "cloud-config-server", 1775 | "groupId": "org.springframework.cloud", 1776 | "artifactId": "spring-cloud-config-server", 1777 | "scope": "compile", 1778 | "description": "Central management for configuration via Git, SVN, or HashiCorp Vault.", 1779 | "bom": "spring-cloud", 1780 | "starter": true, 1781 | "links": [ 1782 | { 1783 | "rel": "guide", 1784 | "href": "https://spring.io/guides/gs/centralized-configuration/", 1785 | "description": "Centralized Configuration" 1786 | } 1787 | ] 1788 | }, 1789 | { 1790 | "name": "Vault Configuration", 1791 | "id": "cloud-starter-vault-config", 1792 | "groupId": "org.springframework.cloud", 1793 | "artifactId": "spring-cloud-starter-vault-config", 1794 | "scope": "compile", 1795 | "description": "Provides client-side support for externalized configuration in a distributed system. Using HashiCorp's Vault you have a central place to manage external secret properties for applications across all environments.", 1796 | "bom": "spring-cloud", 1797 | "starter": true 1798 | }, 1799 | { 1800 | "name": "Apache Zookeeper Configuration", 1801 | "id": "cloud-starter-zookeeper-config", 1802 | "groupId": "org.springframework.cloud", 1803 | "artifactId": "spring-cloud-starter-zookeeper-config", 1804 | "scope": "compile", 1805 | "description": "Enable and configure common patterns inside your application and build large distributed systems with Apache Zookeeper based components. The provided patterns include Service Discovery and Configuration.", 1806 | "bom": "spring-cloud", 1807 | "starter": false 1808 | }, 1809 | { 1810 | "name": "Consul Configuration", 1811 | "id": "cloud-starter-consul-config", 1812 | "groupId": "org.springframework.cloud", 1813 | "artifactId": "spring-cloud-starter-consul-config", 1814 | "scope": "compile", 1815 | "description": "Enable and configure the common patterns inside your application and build large distributed systems with Hashicorp’s Consul. The patterns provided include Service Discovery, Distributed Configuration and Control Bus.", 1816 | "bom": "spring-cloud", 1817 | "starter": false 1818 | } 1819 | ] 1820 | }, 1821 | { 1822 | "name": "Spring Cloud Discovery", 1823 | "content": [ 1824 | { 1825 | "name": "Eureka Discovery Client", 1826 | "id": "cloud-eureka", 1827 | "groupId": "org.springframework.cloud", 1828 | "artifactId": "spring-cloud-starter-netflix-eureka-client", 1829 | "scope": "compile", 1830 | "description": "a REST based service for locating services for the purpose of load balancing and failover of middle-tier servers.", 1831 | "bom": "spring-cloud", 1832 | "weight": 100, 1833 | "starter": true 1834 | }, 1835 | { 1836 | "name": "Eureka Server", 1837 | "id": "cloud-eureka-server", 1838 | "groupId": "org.springframework.cloud", 1839 | "artifactId": "spring-cloud-starter-netflix-eureka-server", 1840 | "scope": "compile", 1841 | "description": "spring-cloud-netflix Eureka Server", 1842 | "bom": "spring-cloud", 1843 | "starter": true, 1844 | "links": [ 1845 | { 1846 | "rel": "guide", 1847 | "href": "https://spring.io/guides/gs/service-registration-and-discovery/", 1848 | "description": "Service Registration and Discovery" 1849 | } 1850 | ] 1851 | }, 1852 | { 1853 | "name": "Apache Zookeeper Discovery", 1854 | "id": "cloud-starter-zookeeper-discovery", 1855 | "groupId": "org.springframework.cloud", 1856 | "artifactId": "spring-cloud-starter-zookeeper-discovery", 1857 | "scope": "compile", 1858 | "description": "Service discovery with Apache Zookeeper", 1859 | "bom": "spring-cloud", 1860 | "starter": true 1861 | }, 1862 | { 1863 | "name": "Cloud Foundry Discovery", 1864 | "id": "cloud-cloudfoundry-discovery", 1865 | "groupId": "org.springframework.cloud", 1866 | "artifactId": "spring-cloud-cloudfoundry-discovery", 1867 | "scope": "compile", 1868 | "description": "Service discovery with Cloud Foundry", 1869 | "bom": "spring-cloud", 1870 | "starter": true 1871 | }, 1872 | { 1873 | "name": "Consul Discovery", 1874 | "id": "cloud-starter-consul-discovery", 1875 | "groupId": "org.springframework.cloud", 1876 | "artifactId": "spring-cloud-starter-consul-discovery", 1877 | "scope": "compile", 1878 | "description": "Service discovery with Hashicorp Consul", 1879 | "bom": "spring-cloud", 1880 | "starter": true 1881 | } 1882 | ] 1883 | }, 1884 | { 1885 | "name": "Spring Cloud Routing", 1886 | "content": [ 1887 | { 1888 | "name": "Zuul", 1889 | "id": "cloud-zuul", 1890 | "groupId": "org.springframework.cloud", 1891 | "artifactId": "spring-cloud-starter-netflix-zuul", 1892 | "scope": "compile", 1893 | "description": "Intelligent and programmable routing with Spring Cloud Netflix Zuul.", 1894 | "bom": "spring-cloud", 1895 | "starter": true, 1896 | "links": [ 1897 | { 1898 | "rel": "guide", 1899 | "href": "https://spring.io/guides/gs/routing-and-filtering/", 1900 | "description": "Routing and Filtering" 1901 | } 1902 | ] 1903 | }, 1904 | { 1905 | "name": "Gateway", 1906 | "id": "cloud-gateway", 1907 | "groupId": "org.springframework.cloud", 1908 | "artifactId": "spring-cloud-starter-gateway", 1909 | "scope": "compile", 1910 | "description": "Provides a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as security, monitoring/metrics, and resiliency.", 1911 | "bom": "spring-cloud", 1912 | "starter": true, 1913 | "links": [ 1914 | { 1915 | "rel": "guide", 1916 | "href": "https://github.com/spring-cloud-samples/spring-cloud-gateway-sample", 1917 | "description": "Using Spring Cloud Gateway" 1918 | } 1919 | ] 1920 | }, 1921 | { 1922 | "name": "Ribbon", 1923 | "id": "cloud-ribbon", 1924 | "groupId": "org.springframework.cloud", 1925 | "artifactId": "spring-cloud-starter-netflix-ribbon", 1926 | "scope": "compile", 1927 | "description": "Client side load balancing with Spring Cloud Netflix and Ribbon.", 1928 | "bom": "spring-cloud", 1929 | "starter": true, 1930 | "links": [ 1931 | { 1932 | "rel": "guide", 1933 | "href": "https://spring.io/guides/gs/client-side-load-balancing/", 1934 | "description": "Client Side Load Balancing with Ribbon and Spring Cloud" 1935 | } 1936 | ] 1937 | }, 1938 | { 1939 | "name": "OpenFeign", 1940 | "id": "cloud-feign", 1941 | "groupId": "org.springframework.cloud", 1942 | "artifactId": "spring-cloud-starter-openfeign", 1943 | "scope": "compile", 1944 | "description": "Declarative REST Client. OpenFeign creates a dynamic implementation of an interface decorated with JAX-RS or Spring MVC annotations.", 1945 | "bom": "spring-cloud", 1946 | "starter": true 1947 | } 1948 | ] 1949 | }, 1950 | { 1951 | "name": "Spring Cloud Circuit Breaker", 1952 | "content": [ 1953 | { 1954 | "name": "Hystrix", 1955 | "id": "cloud-hystrix", 1956 | "groupId": "org.springframework.cloud", 1957 | "artifactId": "spring-cloud-starter-netflix-hystrix", 1958 | "scope": "compile", 1959 | "description": "Circuit breaker with Spring Cloud Netflix Hystrix.", 1960 | "bom": "spring-cloud", 1961 | "starter": true, 1962 | "links": [ 1963 | { 1964 | "rel": "guide", 1965 | "href": "https://spring.io/guides/gs/circuit-breaker/", 1966 | "description": "Circuit Breaker" 1967 | } 1968 | ] 1969 | }, 1970 | { 1971 | "name": "Hystrix Dashboard", 1972 | "id": "cloud-hystrix-dashboard", 1973 | "groupId": "org.springframework.cloud", 1974 | "artifactId": "spring-cloud-starter-netflix-hystrix-dashboard", 1975 | "scope": "compile", 1976 | "description": "Circuit breaker dashboard with Spring Cloud Netflix Hystrix.", 1977 | "bom": "spring-cloud", 1978 | "starter": true 1979 | }, 1980 | { 1981 | "name": "Turbine", 1982 | "id": "cloud-turbine", 1983 | "groupId": "org.springframework.cloud", 1984 | "artifactId": "spring-cloud-starter-netflix-turbine", 1985 | "scope": "compile", 1986 | "description": "Circuit breaker metric aggregation using spring-cloud-netflix with Turbine and server-sent events", 1987 | "bom": "spring-cloud", 1988 | "starter": true 1989 | }, 1990 | { 1991 | "name": "Turbine Stream", 1992 | "id": "cloud-turbine-stream", 1993 | "groupId": "org.springframework.cloud", 1994 | "artifactId": "spring-cloud-starter-netflix-turbine-stream", 1995 | "scope": "compile", 1996 | "description": "Circuit breaker metric aggregation using spring-cloud-netflix with Turbine and Spring Cloud Stream (requires a binder, e.g. Apache Kafka or RabbitMQ)", 1997 | "bom": "spring-cloud", 1998 | "weight": -1, 1999 | "starter": true 2000 | } 2001 | ] 2002 | }, 2003 | { 2004 | "name": "Spring Cloud Tracing", 2005 | "content": [ 2006 | { 2007 | "name": "Sleuth", 2008 | "id": "cloud-starter-sleuth", 2009 | "groupId": "org.springframework.cloud", 2010 | "artifactId": "spring-cloud-starter-sleuth", 2011 | "scope": "compile", 2012 | "description": "Distributed tracing via logs with Spring Cloud Sleuth.", 2013 | "bom": "spring-cloud", 2014 | "starter": true 2015 | }, 2016 | { 2017 | "name": "Zipkin Client", 2018 | "id": "cloud-starter-zipkin", 2019 | "groupId": "org.springframework.cloud", 2020 | "artifactId": "spring-cloud-starter-zipkin", 2021 | "scope": "compile", 2022 | "description": "Distributed tracing with an existing Zipkin installation and Spring Cloud Sleuth Zipkin.", 2023 | "bom": "spring-cloud", 2024 | "starter": true 2025 | } 2026 | ] 2027 | }, 2028 | { 2029 | "name": "Spring Cloud Messaging", 2030 | "content": [ 2031 | { 2032 | "name": "Cloud Bus", 2033 | "id": "cloud-bus", 2034 | "groupId": "org.springframework.cloud", 2035 | "artifactId": "spring-cloud-bus", 2036 | "scope": "compile", 2037 | "description": "Links nodes of a distributed system with a lightweight message broker which can used to broadcast state changes or other management instructions (requires a binder, e.g. Apache Kafka or RabbitMQ).", 2038 | "bom": "spring-cloud", 2039 | "starter": true 2040 | }, 2041 | { 2042 | "name": "Cloud Stream", 2043 | "id": "cloud-stream", 2044 | "groupId": "org.springframework.cloud", 2045 | "artifactId": "spring-cloud-stream", 2046 | "scope": "compile", 2047 | "description": "Framework for building highly scalable event-driven microservices connected with shared messaging systems (requires a binder, e.g. Apache Kafka or RabbitMQ).", 2048 | "bom": "spring-cloud", 2049 | "weight": 90, 2050 | "starter": true 2051 | }, 2052 | { 2053 | "name": "Reactive Cloud Stream", 2054 | "id": "reactive-cloud-stream", 2055 | "groupId": "org.springframework.cloud", 2056 | "artifactId": "spring-cloud-stream-reactive", 2057 | "scope": "compile", 2058 | "description": "Reactive messaging microservices with Spring Cloud Stream (requires a binder, e.g. Apache Kafka or RabbitMQ).", 2059 | "compatibilityRange": "[2.0.0.RELEASE,2.2.0.M1)", 2060 | "bom": "spring-cloud", 2061 | "weight": 90, 2062 | "starter": true 2063 | } 2064 | ] 2065 | }, 2066 | { 2067 | "name": "Pivotal Cloud Foundry", 2068 | "content": [ 2069 | { 2070 | "name": "Config Client (PCF)", 2071 | "id": "scs-config-client", 2072 | "groupId": "io.pivotal.spring.cloud", 2073 | "artifactId": "spring-cloud-services-starter-config-client", 2074 | "scope": "compile", 2075 | "description": "Config client on Pivotal Cloud Foundry", 2076 | "bom": "spring-cloud-services", 2077 | "starter": false, 2078 | "links": [ 2079 | { 2080 | "rel": "reference", 2081 | "href": "https://docs.pivotal.io/spring-cloud-services/" 2082 | } 2083 | ] 2084 | }, 2085 | { 2086 | "name": "Service Registry (PCF)", 2087 | "id": "scs-service-registry", 2088 | "groupId": "io.pivotal.spring.cloud", 2089 | "artifactId": "spring-cloud-services-starter-service-registry", 2090 | "scope": "compile", 2091 | "description": "Eureka service discovery client on Pivotal Cloud Foundry", 2092 | "bom": "spring-cloud-services", 2093 | "starter": true, 2094 | "links": [ 2095 | { 2096 | "rel": "reference", 2097 | "href": "https://docs.pivotal.io/spring-cloud-services/" 2098 | } 2099 | ] 2100 | }, 2101 | { 2102 | "name": "Circuit Breaker (PCF)", 2103 | "id": "scs-circuit-breaker", 2104 | "groupId": "io.pivotal.spring.cloud", 2105 | "artifactId": "spring-cloud-services-starter-circuit-breaker", 2106 | "scope": "compile", 2107 | "description": "Hystrix circuit breaker client on Pivotal Cloud Foundry", 2108 | "bom": "spring-cloud-services", 2109 | "starter": true, 2110 | "links": [ 2111 | { 2112 | "rel": "reference", 2113 | "href": "https://docs.pivotal.io/spring-cloud-services/" 2114 | } 2115 | ] 2116 | } 2117 | ] 2118 | }, 2119 | { 2120 | "name": "Amazon Web Services", 2121 | "content": [ 2122 | { 2123 | "name": "AWS Core", 2124 | "id": "cloud-aws", 2125 | "groupId": "org.springframework.cloud", 2126 | "artifactId": "spring-cloud-starter-aws", 2127 | "scope": "compile", 2128 | "description": "AWS native services from Spring Cloud for AWS", 2129 | "bom": "spring-cloud", 2130 | "starter": false 2131 | }, 2132 | { 2133 | "name": "AWS RDS", 2134 | "id": "cloud-aws-jdbc", 2135 | "groupId": "org.springframework.cloud", 2136 | "artifactId": "spring-cloud-starter-aws-jdbc", 2137 | "scope": "compile", 2138 | "description": "Relational databases on AWS with RDS and Spring Cloud AWS JDBC", 2139 | "bom": "spring-cloud", 2140 | "starter": false 2141 | }, 2142 | { 2143 | "name": "AWS Simple Queue Service", 2144 | "id": "cloud-aws-messaging", 2145 | "groupId": "org.springframework.cloud", 2146 | "artifactId": "spring-cloud-starter-aws-messaging", 2147 | "scope": "compile", 2148 | "description": "Messaging on AWS with SQS and Spring Cloud AWS Messaging", 2149 | "bom": "spring-cloud", 2150 | "starter": false 2151 | } 2152 | ] 2153 | }, 2154 | { 2155 | "name": "Microsoft Azure", 2156 | "content": [ 2157 | { 2158 | "name": "Azure Support", 2159 | "id": "azure-support", 2160 | "groupId": "com.microsoft.azure", 2161 | "artifactId": "azure-spring-boot-starter", 2162 | "scope": "compile", 2163 | "description": "Auto-configuration for Azure Services (Service Bus, Storage, Active Directory, Cosmos DB, Key Vault, and more).", 2164 | "compatibilityRange": "[2.0.0.RELEASE,2.2.0.M1)", 2165 | "bom": "azure", 2166 | "starter": true, 2167 | "links": [ 2168 | { 2169 | "rel": "reference", 2170 | "href": "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot" 2171 | } 2172 | ] 2173 | }, 2174 | { 2175 | "name": "Azure Active Directory", 2176 | "id": "azure-active-directory", 2177 | "groupId": "com.microsoft.azure", 2178 | "artifactId": "azure-active-directory-spring-boot-starter", 2179 | "scope": "compile", 2180 | "description": "Spring Security integration with Azure Active Directory for authentication.", 2181 | "compatibilityRange": "[2.0.0.RELEASE,2.2.0.M1)", 2182 | "bom": "azure", 2183 | "starter": true, 2184 | "links": [ 2185 | { 2186 | "rel": "guide", 2187 | "href": "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-samples/azure-active-directory-spring-boot-sample", 2188 | "description": "Using Active Directory" 2189 | }, 2190 | { 2191 | "rel": "reference", 2192 | "href": "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-starters/azure-active-directory-spring-boot-starter" 2193 | } 2194 | ] 2195 | }, 2196 | { 2197 | "name": "Azure Key Vault", 2198 | "id": "azure-keyvault-secrets", 2199 | "groupId": "com.microsoft.azure", 2200 | "artifactId": "azure-keyvault-secrets-spring-boot-starter", 2201 | "scope": "compile", 2202 | "description": "Manage application secrets and keys.", 2203 | "compatibilityRange": "[2.0.0.RELEASE,2.2.0.M1)", 2204 | "bom": "azure", 2205 | "starter": true, 2206 | "links": [ 2207 | { 2208 | "rel": "guide", 2209 | "href": "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-samples/azure-keyvault-secrets-spring-boot-sample", 2210 | "description": "Using Key Vault" 2211 | }, 2212 | { 2213 | "rel": "reference", 2214 | "href": "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-starters/azure-keyvault-secrets-spring-boot-starter" 2215 | } 2216 | ] 2217 | }, 2218 | { 2219 | "name": "Azure Storage", 2220 | "id": "azure-storage", 2221 | "groupId": "com.microsoft.azure", 2222 | "artifactId": "azure-storage-spring-boot-starter", 2223 | "scope": "compile", 2224 | "description": "Azure Storage service integration.", 2225 | "compatibilityRange": "[2.0.0.RELEASE,2.2.0.M1)", 2226 | "bom": "azure", 2227 | "starter": true, 2228 | "links": [ 2229 | { 2230 | "rel": "guide", 2231 | "href": "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-samples/azure-storage-spring-boot-sample", 2232 | "description": "Using Azure Storage" 2233 | }, 2234 | { 2235 | "rel": "reference", 2236 | "href": "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-starters/azure-storage-spring-boot-starter" 2237 | } 2238 | ] 2239 | } 2240 | ] 2241 | }, 2242 | { 2243 | "name": "Google Cloud Platform", 2244 | "content": [ 2245 | { 2246 | "name": "GCP Support", 2247 | "id": "cloud-gcp", 2248 | "groupId": "org.springframework.cloud", 2249 | "artifactId": "spring-cloud-gcp-starter", 2250 | "scope": "compile", 2251 | "description": "Contains auto-configuration support for every Spring Cloud GCP integration. Most of the auto-configuration code is only enabled if other dependencies are added to the classpath.", 2252 | "bom": "spring-cloud", 2253 | "starter": true, 2254 | "links": [ 2255 | { 2256 | "rel": "reference", 2257 | "href": "https://docs.spring.io/spring-cloud-gcp/docs/1.1.0.M3/reference/htmlsingle/" 2258 | }, 2259 | { 2260 | "rel": "guide", 2261 | "href": "https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples", 2262 | "description": "GCP Samples" 2263 | } 2264 | ] 2265 | }, 2266 | { 2267 | "name": "GCP Messaging", 2268 | "id": "cloud-gcp-pubsub", 2269 | "groupId": "org.springframework.cloud", 2270 | "artifactId": "spring-cloud-gcp-starter-pubsub", 2271 | "scope": "compile", 2272 | "description": "Adds the GCP Support entry and all the required dependencies so that the Google Cloud Pub/Sub integration work out of the box.", 2273 | "bom": "spring-cloud", 2274 | "starter": true, 2275 | "links": [ 2276 | { 2277 | "rel": "reference", 2278 | "href": "https://docs.spring.io/spring-cloud-gcp/docs/1.1.0.M3/reference/htmlsingle/#_spring_cloud_gcp_for_pub_sub" 2279 | }, 2280 | { 2281 | "rel": "guide", 2282 | "href": "https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample", 2283 | "description": "GCP Pub/Sub Sample" 2284 | } 2285 | ] 2286 | }, 2287 | { 2288 | "name": "GCP Storage", 2289 | "id": "cloud-gcp-storage", 2290 | "groupId": "org.springframework.cloud", 2291 | "artifactId": "spring-cloud-gcp-starter-storage", 2292 | "scope": "compile", 2293 | "description": "Adds the GCP Support entry and all the required dependencies so that the Google Cloud Storage integration work out of the box.", 2294 | "bom": "spring-cloud", 2295 | "starter": true, 2296 | "links": [ 2297 | { 2298 | "rel": "reference", 2299 | "href": "https://docs.spring.io/spring-cloud-gcp/docs/1.1.0.M3/reference/htmlsingle/#_spring_resources" 2300 | }, 2301 | { 2302 | "rel": "guide", 2303 | "href": "https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample", 2304 | "description": "GCP Storage Sample" 2305 | } 2306 | ] 2307 | } 2308 | ] 2309 | } 2310 | ] 2311 | }, 2312 | "types": { 2313 | "id": "type", 2314 | "type": "ACTION", 2315 | "title": "Type", 2316 | "description": "project type", 2317 | "content": [ 2318 | { 2319 | "name": "Maven Project", 2320 | "id": "maven-project", 2321 | "description": "Generate a Maven based project archive", 2322 | "action": "/starter.zip", 2323 | "tags": { 2324 | "build": "maven", 2325 | "format": "project" 2326 | }, 2327 | "default": true 2328 | }, 2329 | { 2330 | "name": "Maven POM", 2331 | "id": "maven-build", 2332 | "description": "Generate a Maven pom.xml", 2333 | "action": "/pom.xml", 2334 | "tags": { 2335 | "build": "maven", 2336 | "format": "build" 2337 | }, 2338 | "default": false 2339 | }, 2340 | { 2341 | "name": "Gradle Project", 2342 | "id": "gradle-project", 2343 | "description": "Generate a Gradle based project archive", 2344 | "action": "/starter.zip", 2345 | "tags": { 2346 | "build": "gradle", 2347 | "format": "project" 2348 | }, 2349 | "default": false 2350 | }, 2351 | { 2352 | "name": "Gradle Config", 2353 | "id": "gradle-build", 2354 | "description": "Generate a Gradle build file", 2355 | "action": "/build.gradle", 2356 | "tags": { 2357 | "build": "gradle", 2358 | "format": "build" 2359 | }, 2360 | "default": false 2361 | } 2362 | ] 2363 | }, 2364 | "bootVersions": { 2365 | "id": "bootVersion", 2366 | "type": "SINGLE_SELECT", 2367 | "title": "Spring Boot Version", 2368 | "description": "spring boot version", 2369 | "content": [ 2370 | { 2371 | "name": "2.2.0 M6", 2372 | "id": "2.2.0.M6", 2373 | "default": false 2374 | }, 2375 | { 2376 | "name": "2.2.0 (SNAPSHOT)", 2377 | "id": "2.2.0.BUILD-SNAPSHOT", 2378 | "default": false 2379 | }, 2380 | { 2381 | "name": "2.1.9 (SNAPSHOT)", 2382 | "id": "2.1.9.BUILD-SNAPSHOT", 2383 | "default": false 2384 | }, 2385 | { 2386 | "name": "2.1.8", 2387 | "id": "2.1.8.RELEASE", 2388 | "default": true 2389 | } 2390 | ] 2391 | }, 2392 | "packagings": { 2393 | "id": "packaging", 2394 | "type": "SINGLE_SELECT", 2395 | "title": "Packaging", 2396 | "description": "project packaging", 2397 | "content": [ 2398 | { 2399 | "name": "Jar", 2400 | "id": "jar", 2401 | "default": true 2402 | }, 2403 | { 2404 | "name": "War", 2405 | "id": "war", 2406 | "default": false 2407 | } 2408 | ] 2409 | }, 2410 | "javaVersions": { 2411 | "id": "javaVersion", 2412 | "type": "SINGLE_SELECT", 2413 | "title": "Java Version", 2414 | "description": "language level", 2415 | "content": [ 2416 | { 2417 | "name": "11", 2418 | "id": "11", 2419 | "default": false 2420 | }, 2421 | { 2422 | "name": "8", 2423 | "id": "1.8", 2424 | "default": true 2425 | } 2426 | ] 2427 | }, 2428 | "languages": { 2429 | "id": "language", 2430 | "type": "SINGLE_SELECT", 2431 | "title": "Language", 2432 | "description": "programming language", 2433 | "content": [ 2434 | { 2435 | "name": "Java", 2436 | "id": "java", 2437 | "default": true 2438 | }, 2439 | { 2440 | "name": "Kotlin", 2441 | "id": "kotlin", 2442 | "default": false 2443 | }, 2444 | { 2445 | "name": "Groovy", 2446 | "id": "groovy", 2447 | "default": false 2448 | } 2449 | ] 2450 | }, 2451 | "name": { 2452 | "id": "name", 2453 | "type": "TEXT", 2454 | "title": "Name", 2455 | "description": "project name (infer application name)", 2456 | "content": "demo" 2457 | }, 2458 | "description": { 2459 | "id": "description", 2460 | "type": "TEXT", 2461 | "title": "Description", 2462 | "description": "project description", 2463 | "content": "Demo project for Spring Boot" 2464 | }, 2465 | "groupId": { 2466 | "id": "groupId", 2467 | "type": "TEXT", 2468 | "title": "Group", 2469 | "description": "project coordinates", 2470 | "content": "com.example" 2471 | }, 2472 | "artifactId": { 2473 | "id": "artifactId", 2474 | "type": "TEXT", 2475 | "title": "Artifact", 2476 | "description": "project coordinates (infer archive name)", 2477 | "content": "demo" 2478 | }, 2479 | "version": { 2480 | "id": "version", 2481 | "type": "TEXT", 2482 | "title": "Version", 2483 | "description": "project version", 2484 | "content": "0.0.1-SNAPSHOT" 2485 | }, 2486 | "packageName": { 2487 | "id": "packageName", 2488 | "type": "TEXT", 2489 | "title": "Package Name", 2490 | "description": "root package", 2491 | "content": "com.example.demo" 2492 | } 2493 | } -------------------------------------------------------------------------------- /simple-generator/src/test/java/com/example/custominitializr/generator/SimpleGeneratorRunner.java: -------------------------------------------------------------------------------- 1 | package com.example.custominitializr.generator; 2 | 3 | import java.nio.file.Path; 4 | 5 | import io.spring.initializr.generator.buildsystem.BuildSystem; 6 | import io.spring.initializr.generator.buildsystem.Dependency; 7 | import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem; 8 | import io.spring.initializr.generator.language.Language; 9 | import io.spring.initializr.generator.language.java.JavaLanguage; 10 | import io.spring.initializr.generator.project.MutableProjectDescription; 11 | import io.spring.initializr.generator.version.Version; 12 | import io.spring.initializr.generator.version.VersionReference; 13 | 14 | public class SimpleGeneratorRunner { 15 | 16 | public static void main(String[] args) { 17 | MutableProjectDescription description = new MutableProjectDescription(); 18 | description.setGroupId("com.example"); 19 | description.setArtifactId("app"); 20 | description.setVersion("1.0.0.BUILD-SNAPSHOT"); 21 | description.setBuildSystem(BuildSystem.forId(MavenBuildSystem.ID)); 22 | description.setLanguage(Language.forId(JavaLanguage.ID, "11")); 23 | description.addDependency("spring-context", Dependency.withCoordinates("org.springframework", "spring-context") 24 | .version(VersionReference.ofValue("5.1.8.RELEASE"))); 25 | description.setPlatformVersion(Version.parse("2.1.8.RELEASE")); 26 | description.setApplicationName("DemoApp"); 27 | 28 | SimpleGenerator generator = new SimpleGenerator(); 29 | Path directory = generator.generateProject(description); 30 | System.out.println("Generated project available at " + directory.toAbsolutePath()); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /simple-generator/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /simple-service/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.example 8 | demo-custom-initializr 9 | 0.0.1-SNAPSHOT 10 | 11 | simple-service 12 | Demo Custom Initializr :: Simple Service 13 | Showcase a custom web endpoint 14 | 15 | 16 | 17 | com.example 18 | simple-generator 19 | 20 | 21 | 22 | org.springframework.boot 23 | spring-boot-starter-web 24 | 25 | 26 | io.spring.initializr 27 | initializr-web 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /simple-service/src/main/java/com/example/custominitializr/service/SimpleServiceApplication.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012-2019 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.example.custominitializr.service; 18 | 19 | import org.springframework.boot.SpringApplication; 20 | import org.springframework.boot.autoconfigure.SpringBootApplication; 21 | import org.springframework.cache.annotation.EnableCaching; 22 | 23 | @SpringBootApplication 24 | @EnableCaching 25 | public class SimpleServiceApplication { 26 | 27 | public static void main(String[] args) { 28 | SpringApplication.run(SimpleServiceApplication.class, args); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /simple-service/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | initializr: 2 | dependencies: 3 | - name: Web 4 | content: 5 | - name: Web 6 | id: web 7 | description: Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container. 8 | types: 9 | - name: Maven Project 10 | id: maven-project 11 | description: Generate a Maven based project archive 12 | tags: 13 | build: maven 14 | format: project 15 | default: true 16 | action: /starter.zip 17 | - name: Gradle Project 18 | id: gradle-project 19 | description: Generate a Gradle based project archive 20 | tags: 21 | build: gradle 22 | format: project 23 | default: false 24 | action: /starter.zip 25 | packagings: 26 | - name: Jar 27 | id: jar 28 | default: true 29 | javaVersions: 30 | - id: 11 31 | default: false 32 | - id: 1.8 33 | name: 8 34 | default: true 35 | languages: 36 | - name: Java 37 | id: java 38 | default: true 39 | - name: Kotlin 40 | id: kotlin 41 | default: false 42 | - name: Groovy 43 | id: groovy 44 | default: false 45 | group-id: 46 | value: org.acme --------------------------------------------------------------------------------