├── .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
--------------------------------------------------------------------------------