本地部署SpringBootInitializr 【最新版】

本地部署SpringBootInitializr 【最新版】

几十年没写东西了,今天记录一个折腾

SpringBootInitializr

这东西不用介绍了, 在这里git在这里

如果用IDEA或者Eclipse或其他IDE,能够很方便的通过它生成springboot项目骨架。

废话一下

因为某些原因,我们希望在本地,或者自己的机器上部署一个实例。
我以前部署了一个0.4.0.RELEASE版本,最近想升级一下,下载了最新的git代码,一顿操作之后,发现根本不能用。
网络搜索大法已经用尽了,可是2020年以前的内容,都是过时的内容。中外皆如此。

怀着一个操蛋的心,还是要搞出来才行。折腾完毕后,因为觉得太坑,所以记录一下,也给需要的人看看。

废话完毕,正式开始

直接上步骤了。

1、下载或PR源码

这个没什么,直接从https://github.com/spring-io/initializr这里搞
假设搞出来的内容所在的目录是“你的目录”

2、build

2.1.躺坑【可无视】

官方有一段说明,是这么说的:

Running your own instance

You can easily run your own instance. The initializr-web modules uses Spring Boot so when it is added to a project, it will trigger the necessary auto-configuration to deploy the service.

The initializr-service-sample showcases a basic custom instance with dedicated metadata.

If you want to run our instance at https://start.spring.io, refer to run the default instance locally.

Building from Source

You need Java 1.8 and a bash-like shell.
Building
Invoke the build at the root of the project:

$ ./mvnw clean install
To generate the docs as well, you should enable the full profile:

$ ./mvnw clean install -Pfull

大概意思就是,你可以很容易的构建出一个自己的实例,initializr-web 里面包含了你需要的一切,只要把它启动起来就行,而且,initializr-service-sample给出了一个很好的样例。

好的,如果你跟着它来,你就完了。具体为什么,这里不细讲,你可以跟着做一次,发现啥也没用。我直接写结果了。


正式开始

2.2.复制一个initializr-service-sample

既然官方说这是最佳样例,好的,我们复制一个。
我对复制的目录取名叫initializr-service-custom,复制后的目录结果如下:

你的目录/
      |- ......
      |- initializr-service-custom 【这个】
      |- initializr-service-sample
      |- .....
      |- pom.xml

2.3.修改顶层pom
  • 主要修改

因为复制了一个模块,因此要把这个模块加入到pom中
修改:你的目录\pom.xml
主要是修改modules,这个大家都懂

<modules>
	<module>initializr-actuator</module>
	<module>initializr-bom</module>
	<module>initializr-docs</module>
	<module>initializr-generator</module>
	<module>initializr-generator-spring</module>
	<module>initializr-generator-test</module>
	<module>initializr-metadata</module>
	<module>initializr-parent</module>
	<module>initializr-service-sample</module>
	<!-- 加入这个 -->
	<module>initializr-service-custom</module>
	<module>initializr-version-resolver</module>
	<module>initializr-web</module>
</modules>

  • 特别修改

由于我用的jdk是1.8,估计很老了,有些东东过不了,但是也不需要过,因此这里修改一下

<properties>
	<revision>0.9.0</revision>
	<!-- 这里!!把false改成true -->
	<disable.checks>true</disable.checks>
	<!-- ----------------- -->
	<git.url>https://github.com/spring-io/initializr</git.url>
	<git.connection>scm:git:https://github.com/spring-io/initializr</git.connection>
	<git.developerConnection>scm:git:ssh://git@github.com/spring-io/initializr.git</git.developerConnection>
	<main.basedir>${basedir}</main.basedir>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

为什么要这么修改,因为搜一下disable.checks就知道了。我这里build不需要这个特性,因此也就不折腾了。

2.4.修改initializr-service-custom的pom

这里就是核心修改的地方了,官方可没介绍怎么改。它只告诉你,把initializr-web搞起来,怎么搞起来??
官方说这些都是springboot应用,因此可以很方便的参考initializr-service-sample。
可是initializr-service-sample打包后,根本run不起来。
那是因为他没说清楚

为了让initializr-service真正的做一个springboot应用run起来,得修改pom,让它成为springboot-fatjar。
修改的地方请看注释。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>io.spring.initializr</groupId>
		<artifactId>initializr-parent</artifactId>
		<version>${revision}</version>
		<relativePath>../initializr-parent</relativePath>
	</parent>
	<artifactId>initializr-service-custom</artifactId>
	<name>Spring Initializr :: Service (Custom)</name>

	<properties>
		<main.basedir>${basedir}/..</main.basedir>
	</properties>
	<scm>
		<url>${git.url}</url>
		<connection>${git.connection}</connection>
		<developerConnection>${git.developerConnection}</developerConnection>
	</scm>
	<!---  重点1:这是springboot官方样例给的,主要是没有用spring-boot-starter-parent作为parent ----->
	<dependencyManagement>
		 <dependencies>
			<dependency>
				<!-- Import dependency management from Spring Boot -->
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-dependencies</artifactId>
				<version>2.3.2.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>io.spring.initializr</groupId>
			<artifactId>initializr-generator-spring</artifactId>
		</dependency>
		<!-- 可以看到这里引用了initializr-web -->
		<dependency>
			<groupId>io.spring.initializr</groupId>
			<artifactId>initializr-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>
		
	</dependencies>
	<!-- 也是官方插件的用法,如果没有用spring-boot-starter-parent作为parent -->
	<!-- 那么就应该这么干,主要是执行repackage这个goal -->
	<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>
            </plugin>
        </plugins>
    </build>

</project>

通过以上修改,我们才达到了制作官方所说的

You can easily run your own instance. The initializr-web modules uses Spring Boot so when it is added to a project, it will trigger the necessary auto-configuration to deploy the service.

2.5.执行mvn打包

我们执行官方说得命令: mvn clean install 以及 mvn clean install -Pfull

因为我们不需要install。而且也没必要使用full的profile的内容。

因此,只需要执行

mvn clean package -DskipTests

至此,已经可以通过springboot-fatjar的方式,启动你的目录\initializr-service-custom\target\initializr-service-custom-0.9.0.jar

2.6.尝试使用

首先打开浏览器,输入http://localhost:8080 [8080是默认端口,可以自行通过springboot的启动配置修改],可以看到返回了一堆json信息。
由于最新版本,官方把界面UI给分离了,因此看不到UI界面了。如果需要UI界面,参考这里
不过,因为现在的IDE都有界面,因此,
使用IDE,指定springbootinitializr为http://localhost:8080,就可以看到东西了。

好的,你会发现根本用不起来,但是服务确实是好的。
于是,我们去官方的https://start.spring.io/手动点击一个创建,通过F12到浏览器调试工具中得到一个get地址:

https://start.spring.io/starter.zip?type=maven-project&language=java&bootVersion=2.3.2.RELEASE&baseDir=demo&groupId=com.example&artifactId=demo&name=demo&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.demo&packaging=jar&javaVersion=11

这个地址也就是官方Git所述的

Generating a project

As Spring Initializr doesn’t come with a Web UI, you can use any of the out-of-the-box integration to >generate a project. For instance, the following curl command downloads a project archive with a >Maven-based project and the necessary infrastructure to start a basic Spring Boot app.

这一段内容。

然后我们把这个地址替换成本地服务的地址,也就是localhost:8080。
结果以看,如果不出意外,服务日志会显示NullPointerException
操蛋。
哪错了?

2.7.修改initializr-service-custom的application.yml

这里就是核心大坑所在。
刚才的NullPointerException,其实是因为代码中初始化配置信息,需要一个defaultBootVersion,然而,initializr-service-sample确实是个sample,压根儿没说这里需要怎么做。

通过摸索,摸索主要是:
1、跟源码,看到启动之后会去读配置,将initializr-service-sample中的application.yml内容初始化为配置数据
2、看到initializr-web中有一些test-xxxx.json或者test-xxx.yml的东西
3、看源码的initializr-web中的请求路由有哪些可以用
发现initializr-service-sample中的application.yml缺少很多内容,首先就是缺少bootVersions这个字段配置,也正是因为这个,导致了NullPointerException。
然而,只补充bootVersions是不够的,你会发现补充以后达不到https://start.spring.io/这个地址的效果。

然后又仔细看看git,它里面说了一个这么个内容

Service metadata

The service metadata is used by all clients to know which values they should expose for the standard attributes of a project. For instance, a custom version can specify that the default groupId is com.example.acme. You can grab the metadata on the root endpoint with the appropriate Accept header

<

。。。。。。
More details about the structure of the metadata are available in the documentation

根据刚才摸索中,第三步看到的一个信息:/metadata/config这个请求路由,感觉两者有联系。
于是乎,去那个docuemtation里面看了一下,同时也在localhost上请求了一下,发现这个返回值内容差别太多。localhost的内容少的可怜。

再一看,返回内容感觉和initializr-service-custom的application.yml中的内容有几分相似,因此,直接把官方的/metadata/config的返回json,翻译成yml

一看这个yml,高兴了,看起来就是initializr-service-custom的application.yml需要的完整配置内容。不过因为这个json格式有点对不上,因此,摸索着对照initializr-service-custom的application.yml的格式,进行了一轮调整。同时也参考了一篇久远的文章中的内容,最终调整好了这个yml。

直接给出修改后的完整内容:

initializr:
  env:
    boms:
      azure:
        groupId: "com.microsoft.azure"
        artifactId: "azure-spring-boot-bom"
        versionProperty: "azure.version"
        mappings:
        - compatibilityRange: "[2.0.0.RELEASE,2.1.0.RELEASE)"
          version: "2.0.10"
        - compatibilityRange: "[2.1.0.RELEASE, 2.2.0.M1)"
          version: "2.1.10"
        - compatibilityRange: "[2.2.0.M1, 2.3.0.M1)"
          version: "2.2.4"
        - compatibilityRange: "2.3.0.M1"
          version: "2.3.1"
      codecentric-spring-boot-admin:
        groupId: "de.codecentric"
        artifactId: "spring-boot-admin-dependencies"
        versionProperty: "spring-boot-admin.version"
        mappings:
        - compatibilityRange: "[2.0.0.M1,2.1.0.M1)"
          version: "2.0.6"
        - compatibilityRange: "[2.1.0.M1,2.2.0.M1)"
          version: "2.1.6"
        - compatibilityRange: "[2.2.0.M1,2.3.0.M1)"
          version: "2.2.4"
        - compatibilityRange: "[2.3.0.M1,2.4.0-M1)"
          version: "2.3.0"
      solace-spring-boot:
        groupId: "com.solace.spring.boot"
        artifactId: "solace-spring-boot-bom"
        versionProperty: "solace-spring-boot.version"
        mappings:
        - compatibilityRange: "[2.2.0.RELEASE, 2.3.0.M1)"
          version: "1.0.0"
        - compatibilityRange: "2.3.0.M1"
          version: "1.1.0"
      solace-spring-cloud:
        groupId: "com.solace.spring.cloud"
        artifactId: "solace-spring-cloud-bom"
        versionProperty: "solace-spring-cloud.version"
        mappings:
        - compatibilityRange: "[2.2.0.RELEASE, 2.3.0.M1)"
          version: "1.0.0"
        - compatibilityRange: "2.3.0.M1"
          version: "1.1.1"
      spring-cloud:
        groupId: "org.springframework.cloud"
        artifactId: "spring-cloud-dependencies"
        versionProperty: "spring-cloud.version"
        order: "50"
        mappings:
        - compatibilityRange: "[2.0.0.M3, 2.0.0.M5)"
          version: "Finchley.M2"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.0.0.M5, 2.0.0.M5]"
          version: "Finchley.M3"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.0.0.M6, 2.0.0.M6]"
          version: "Finchley.M4"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.0.0.M7, 2.0.0.M7]"
          version: "Finchley.M5"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.0.0.RC1, 2.0.0.RC1]"
          version: "Finchley.M6"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.0.0.RC2,2.0.0.RC2]"
          version: "Finchley.M7"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.0.0.RELEASE,2.0.0.RELEASE]"
          version: "Finchley.M9"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.0.1.RELEASE,2.0.2.RELEASE)"
          version: "Finchley.RC1"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.0.2.RELEASE,2.0.3.RELEASE)"
          version: "Finchley.RC2"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.0.3.RELEASE,2.0.x.BUILD-SNAPSHOT)"
          version: "Finchley.SR4"
        - compatibilityRange: "[2.0.x.BUILD-SNAPSHOT,2.1.0.M3)"
          version: "Finchley.BUILD-SNAPSHOT"
          repositories:
          - "spring-snapshots"
          - "spring-milestones"
        - compatibilityRange: "[2.1.0.M3,2.1.0.RELEASE)"
          version: "Greenwich.M1"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.1.0.RELEASE,2.1.x.BUILD-SNAPSHOT)"
          version: "Greenwich.SR6"
        - compatibilityRange: "[2.1.x.BUILD-SNAPSHOT,2.2.0.M4)"
          version: "Greenwich.BUILD-SNAPSHOT"
          repositories:
          - "spring-snapshots"
          - "spring-milestones"
        - compatibilityRange: "[2.2.0.M4,2.3.x.BUILD-SNAPSHOT)"
          version: "Hoxton.SR7"
        - compatibilityRange: "[2.3.x.BUILD-SNAPSHOT, 2.4.0.M1)"
          version: "Hoxton.BUILD-SNAPSHOT"
          repositories:
          - "spring-snapshots"
          - "spring-milestones"
        - compatibilityRange: "2.4.0.M1"
          version: "2020.0.0-SNAPSHOT"
          repositories:
          - "spring-snapshots"
          - "spring-milestones"
      spring-cloud-alibaba:
        groupId: "com.alibaba.cloud"
        artifactId: "spring-cloud-alibaba-dependencies"
        versionProperty: "spring-cloud-alibaba.version"
        mappings:
        - compatibilityRange: "[2.2.0.RELEASE,2.3.0.M1)"
          version: "2.2.1.RELEASE"
      spring-cloud-services:
        groupId: "io.pivotal.spring.cloud"
        artifactId: "spring-cloud-services-dependencies"
        versionProperty: "spring-cloud-services.version"
        additionalBoms:
        - "spring-cloud"
        mappings:
        - compatibilityRange: "[2.0.0.RELEASE,2.1.0.RELEASE)"
          version: "2.0.3.RELEASE"
        - compatibilityRange: "[2.1.0.RELEASE,2.2.0.RELEASE)"
          version: "2.1.7.RELEASE"
        - compatibilityRange: "[2.2.0.RELEASE,2.3.0.M1)"
          version: "2.2.3.RELEASE"
      spring-statemachine:
        groupId: "org.springframework.statemachine"
        artifactId: "spring-statemachine-bom"
        versionProperty: "spring-statemachine.version"
        mappings:
        - compatibilityRange: "[2.0.0.RC1,2.0.0.RC1]"
          version: "2.0.0.M4"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "[2.0.0.RC2,2.0.0.RC2]"
          version: "2.0.0.M5"
          repositories:
          - "spring-milestones"
        - compatibilityRange: "2.0.0.RELEASE"
          version: "2.0.1.RELEASE"
      vaadin:
        groupId: "com.vaadin"
        artifactId: "vaadin-bom"
        versionProperty: "vaadin.version"
        mappings:
        - compatibilityRange: "[2.0.0.M1,2.1.0.M1)"
          version: "10.0.17"
        - compatibilityRange: "[2.1.0.M1,2.4.0-M1)"
          version: "14.3.2"
      wavefront:
        groupId: "com.wavefront"
        artifactId: "wavefront-spring-boot-bom"
        versionProperty: "wavefront.version"
        mappings:
        - compatibilityRange: "2.1.0.RELEASE"
          version: "2.0.0"
    repositories:
      spring-snapshots:
        name: "Spring Snapshots"
        url: "https://repo.spring.io/snapshot"
        snapshotsEnabled: "true"
      spring-milestones:
        name: "Spring Milestones"
        url: "https://repo.spring.io/milestone"
        snapshotsEnabled: "false"
      sonatype-snapshots:
        name: "Sonatype Snapshots"
        url: "https://oss.sonatype.org/content/repositories/snapshots/"
        snapshotsEnabled: "true"
    gradle:
      dependencyManagementPluginVersion: "1.0.9.RELEASE"
    kotlin:
      defaultVersion:
      mappings:
      - compatibilityRange: "[1.5.0.RELEASE,2.0.0.M1)"
        version: "1.2.51"
    maven:
      parent:
        groupId:
        artifactId:
        version:
        includeSpringBootBom: "false"
    platform:
        compatibilityRange: "2.0.0.RELEASE"
        v1FormatCompatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
        v2FormatCompatibilityRange: "2.4.0-M1"
  dependencies:
  - name: "Developer Tools"
    content:
    - name: "Spring Boot DevTools"
      id: "devtools"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-devtools"
      scope: "runtime"
      description: "Provides fast application restarts, LiveReload, and configurations for enhanced development experience."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#using-boot-devtools"
        templated: "true"
    - name: "Lombok"
      id: "lombok"
      groupId: "org.projectlombok"
      artifactId: "lombok"
      scope: "annotationProcessor"
      description: "Java annotation library which helps to reduce boilerplate code."
      starter: "false"
    - name: "Spring Configuration Processor"
      id: "configuration-processor"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-configuration-processor"
      scope: "annotationProcessor"
      description: "Generate metadata for developers to offer contextual help and code completion when working with custom configuration keys (ex.application.properties/.yml files)."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#configuration-metadata-annotation-processor"
        templated: "true"
  - name: "Web"
    content:
    - name: "Spring Web"
      id: "web"
      facets:
      - "web"
      - "json"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-web"
      scope: "compile"
      description: "Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/rest-service/"
        description: "Building a RESTful Web Service"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-developing-web-applications"
        templated: "true"
      - rel: "guide"
        href: "https://spring.io/guides/gs/serving-web-content/"
        description: "Serving Web Content with Spring MVC"
      - rel: "guide"
        href: "https://spring.io/guides/tutorials/bookmarks/"
        description: "Building REST services with Spring"
    - name: "Spring Reactive Web"
      id: "webflux"
      facets:
      - "json"
      - "reactive"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-webflux"
      scope: "compile"
      description: "Build reactive web applications with Spring WebFlux and Netty."
      starter: "true"
    - name: "Rest Repositories"
      id: "data-rest"
      facets:
      - "json"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-rest"
      scope: "compile"
      description: "Exposing Spring Data repositories over REST via Spring Data REST."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/accessing-data-rest/"
        description: "Accessing JPA Data with REST"
      - rel: "guide"
        href: "https://spring.io/guides/gs/accessing-neo4j-data-rest/"
        description: "Accessing Neo4j Data with REST"
      - rel: "guide"
        href: "https://spring.io/guides/gs/accessing-mongodb-data-rest/"
        description: "Accessing MongoDB Data with REST"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-use-exposing-spring-data-repositories-rest-endpoint"
        templated: "true"
    - name: "Spring Session"
      id: "session"
      groupId: "org.springframework.session"
      artifactId: "spring-session-core"
      scope: "compile"
      description: "Provides an API and implementations for managing user session information."
      starter: "false"
    - name: "Rest Repositories HAL Browser"
      id: "data-rest-hal"
      groupId: "org.springframework.data"
      artifactId: "spring-data-rest-hal-browser"
      scope: "compile"
      description: "Browsing Spring Data REST repositories in your browser."
      starter: "false"
    - name: "Spring HATEOAS"
      id: "hateoas"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-hateoas"
      scope: "compile"
      description: "Eases the creation of RESTful APIs that follow the HATEOAS principle when working with Spring / Spring MVC."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/rest-hateoas/"
        description: "Building a Hypermedia-Driven RESTful Web Service"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-hateoas"
        templated: "true"
    - name: "Spring Web Services"
      id: "web-services"
      aliases:
      - "ws"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-web-services"
      scope: "compile"
      description: "Facilitates contract-first SOAP development. Allows for the creation of flexible web services using one of the many ways to manipulate XML payloads."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/producing-web-service/"
        description: "Producing a SOAP web service"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-webservices"
        templated: "true"
    - name: "Jersey"
      id: "jersey"
      facets:
      - "json"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-jersey"
      scope: "compile"
      description: "Framework for developing RESTful Web Services in Java that provides support for JAX-RS APIs."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-jersey"
        templated: "true"
    - name: "Vaadin"
      id: "vaadin"
      facets:
      - "web"
      groupId: "com.vaadin"
      artifactId: "vaadin-spring-boot-starter"
      scope: "compile"
      description: "Java framework for building rich client apps based on Web components."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "vaadin"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/crud-with-vaadin/"
        description: "Creating CRUD UI with Vaadin"
      - rel: "reference"
        href: "https://vaadin.com/spring"
  - name: "Template Engines"
    content:
    - name: "Thymeleaf"
      id: "thymeleaf"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-thymeleaf"
      scope: "compile"
      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."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/handling-form-submission/"
        description: "Handling Form Submission"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines"
        templated: "true"
    - name: "Apache Freemarker"
      id: "freemarker"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-freemarker"
      scope: "compile"
      description: "Java library to generate text output (HTML web pages, e-mails, configuration files, source code, etc.) based on templates and changing data."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines"
        templated: "true"
    - name: "Mustache"
      id: "mustache"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-mustache"
      scope: "compile"
      description: "Logic-less Templates. There are no if statements, else clauses, or for loops. Instead there are only tags."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines"
        templated: "true"
    - name: "Groovy Templates"
      id: "groovy-templates"
      facets:
      - "web"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-groovy-templates"
      scope: "compile"
      description: "Groovy templating engine."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines"
        templated: "true"
  - name: "Security"
    content:
    - name: "Spring Security"
      id: "security"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-security"
      scope: "compile"
      description: "Highly customizable authentication and access-control framework for Spring applications."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/securing-web/"
        description: "Securing a Web Application"
      - rel: "guide"
        href: "https://spring.io/guides/tutorials/spring-boot-oauth2/"
        description: "Spring Boot and OAuth2"
      - rel: "guide"
        href: "https://spring.io/guides/gs/authenticating-ldap/"
        description: "Authenticating a User with LDAP"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-security"
        templated: "true"
    - name: "OAuth2 Client"
      id: "oauth2-client"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-oauth2-client"
      scope: "compile"
      description: "Spring Boot integration for Spring Security's OAuth2/OpenID Connect client features."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-security-oauth2-client"
        templated: "true"
    - name: "OAuth2 Resource Server"
      id: "oauth2-resource-server"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-oauth2-resource-server"
      scope: "compile"
      description: "Spring Boot integration for Spring Security's OAuth2 resource server features."
      compatibilityRange: "2.1.0.M2"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-security-oauth2-server"
        templated: "true"
    - name: "Spring LDAP"
      id: "data-ldap"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-ldap"
      scope: "compile"
      description: "Makes it easier to build Spring based applications that use the Lightweight Directory Access Protocol."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-ldap"
        templated: "true"
    - name: "Okta"
      id: "okta"
      groupId: "com.okta.spring"
      artifactId: "okta-spring-boot-starter"
      mappings:
      - compatibilityRange: "[2.1.2.RELEASE,2.2.0.M1)"
        groupId:
        artifactId:
        version: "1.2.1"
        starter:
        repository:
      - compatibilityRange: "[2.2.0.M1,2.4.0-M1)"
        groupId:
        artifactId:
        version: "1.4.0"
        starter:
        repository:
      scope: "compile"
      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."
      compatibilityRange: "[2.1.2.RELEASE,2.4.0-M1)"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://github.com/okta/samples-java-spring/tree/master/okta-hosted-login"
        description: "Okta-Hosted Login Page Example"
      - rel: "guide"
        href: "https://github.com/okta/samples-java-spring/tree/master/custom-login"
        description: "Custom Login Page Example"
      - rel: "guide"
        href: "https://github.com/okta/samples-java-spring/tree/master/resource-server"
        description: "Okta Spring Security Resource Server Example"
      - rel: "reference"
        href: "https://github.com/okta/okta-spring-boot/blob/master/README.md"
  - name: "SQL"
    content:
    - name: "JDBC API"
      id: "jdbc"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-jdbc"
      scope: "compile"
      description: "Database Connectivity API that defines how a client may connect and query a database."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/relational-data-access/"
        description: "Accessing Relational Data using JDBC with Spring"
      - rel: "guide"
        href: "https://spring.io/guides/gs/managing-transactions/"
        description: "Managing Transactions"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-sql"
        templated: "true"
    - name: "Spring Data JPA"
      id: "data-jpa"
      aliases:
      - "jpa"
      facets:
      - "jpa"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-jpa"
      scope: "compile"
      description: "Persist data in SQL stores with Java Persistence API using Spring Data and Hibernate."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/accessing-data-jpa/"
        description: "Accessing Data with JPA"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-jpa-and-spring-data"
        templated: "true"
    - name: "Spring Data JDBC"
      id: "data-jdbc"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-jdbc"
      scope: "compile"
      description: "Persist data in SQL stores with plain JDBC using Spring Data."
      compatibilityRange: "2.1.0.RELEASE"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://github.com/spring-projects/spring-data-examples/tree/master/jdbc/basics"
        description: "Using Spring Data JDBC"
      - rel: "reference"
        href: "https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/"
    - name: "Spring Data R2DBC"
      id: "data-r2dbc"
      facets:
      - "reactive"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-r2dbc"
      scope: "compile"
      description: "Provides Reactive Relational Database Connectivity to persist data in SQL stores using Spring Data in reactive applications."
      compatibilityRange: "2.3.0.M3"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/accessing-data-r2dbc/"
        description: "Acessing data with R2DBC"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/html/spring-boot-features.html#boot-features-r2dbc"
        templated: "true"
      - rel: "home"
        href: "https://r2dbc.io"
        description: "R2DBC Homepage"
    - name: "MyBatis Framework"
      id: "mybatis"
      groupId: "org.mybatis.spring.boot"
      artifactId: "mybatis-spring-boot-starter"
      mappings:
      - compatibilityRange: "[2.0.0.RELEASE,2.1.0.RELEASE)"
        groupId:
        artifactId:
        version: "2.0.1"
        starter:
        repository:
      - compatibilityRange: "[2.1.0.RELEASE,2.4.0-M1)"
        groupId:
        artifactId:
        version: "2.1.3"
        starter:
        repository:
      scope: "compile"
      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."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start"
        description: "MyBatis Quick Start"
      - rel: "reference"
        href: "https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/"
    - name: "Liquibase Migration"
      id: "liquibase"
      groupId: "org.liquibase"
      artifactId: "liquibase-core"
      scope: "compile"
      description: "Liquibase database migration and source control library."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-execute-liquibase-database-migrations-on-startup"
        templated: "true"
    - name: "Flyway Migration"
      id: "flyway"
      groupId: "org.flywaydb"
      artifactId: "flyway-core"
      scope: "compile"
      description: "Version control for your database so you can migrate from any version (incl. an empty database) to the latest version of the schema."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-execute-flyway-database-migrations-on-startup"
        templated: "true"
    - name: "JOOQ Access Layer"
      id: "jooq"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-jooq"
      scope: "compile"
      description: "Generate Java code from your database and build type safe SQL queries through a fluent API."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-jooq"
        templated: "true"
    - name: "IBM DB2 Driver"
      id: "db2"
      groupId: "com.ibm.db2"
      artifactId: "jcc"
      scope: "runtime"
      description: "A JDBC driver that provides access to IBM DB2."
      compatibilityRange: "2.2.0.M6"
      starter: "false"
    - name: "Apache Derby Database"
      id: "derby"
      groupId: "org.apache.derby"
      artifactId: "derby"
      scope: "runtime"
      description: "An open source relational database implemented entirely in Java."
      starter: "false"
    - name: "H2 Database"
      id: "h2"
      groupId: "com.h2database"
      artifactId: "h2"
      scope: "runtime"
      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."
      starter: "false"
    - name: "HyperSQL Database"
      id: "hsql"
      groupId: "org.hsqldb"
      artifactId: "hsqldb"
      scope: "runtime"
      description: "Lightweight 100% Java SQL Database Engine."
      starter: "false"
    - name: "MS SQL Server Driver"
      id: "sqlserver"
      groupId: "com.microsoft.sqlserver"
      artifactId: "mssql-jdbc"
      scope: "runtime"
      description: "A JDBC and R2DBC driver that provides access to Microsoft SQL Server and Azure SQL Database from any Java application."
      starter: "false"
    - name: "MySQL Driver"
      id: "mysql"
      groupId: "mysql"
      artifactId: "mysql-connector-java"
      scope: "runtime"
      description: "MySQL JDBC and R2DBC driver."
      starter: "false"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/accessing-data-mysql/"
        description: "Accessing data with MySQL"
    - name: "Oracle Driver"
      id: "oracle"
      groupId: "com.oracle.database.jdbc"
      artifactId: "ojdbc8"
      mappings:
      - compatibilityRange: "[2.2.0.RC1,2.2.8.RELEASE)"
        groupId: "com.oracle.ojdbc"
        artifactId:
        version:
        starter:
        repository:
      scope: "runtime"
      description: "A JDBC driver that provides access to Oracle."
      compatibilityRange: "2.2.0.RC1"
      starter: "false"
    - name: "PostgreSQL Driver"
      id: "postgresql"
      groupId: "org.postgresql"
      artifactId: "postgresql"
      scope: "runtime"
      description: "A JDBC and R2DBC driver that allows Java programs to connect to a PostgreSQL database using standard, database independent Java code."
      starter: "false"
  - name: "NoSQL"
    content:
    - name: "Spring Data Redis (Access+Driver)"
      id: "data-redis"
      aliases:
      - "redis"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-redis"
      scope: "compile"
      description: "Advanced and thread-safe Java Redis client for synchronous, asynchronous, and reactive usage. Supports Cluster, Sentinel, Pipelining, Auto-Reconnect, Codecs and much more."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/messaging-redis/"
        description: "Messaging with Redis"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-redis"
        templated: "true"
    - name: "Spring Data Reactive Redis"
      id: "data-redis-reactive"
      facets:
      - "reactive"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-redis-reactive"
      scope: "compile"
      description: "Access Redis key-value data stores in a reactive fashion with Spring Data Redis."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/messaging-redis/"
        description: "Messaging with Redis"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-redis"
        templated: "true"
    - name: "Spring Data MongoDB"
      id: "data-mongodb"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-mongodb"
      scope: "compile"
      description: "Store data in flexible, JSON-like documents, meaning fields can vary from document to document and data structure can be changed over time."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/accessing-data-mongodb/"
        description: "Accessing Data with MongoDB"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-mongodb"
        templated: "true"
    - name: "Spring Data Reactive MongoDB"
      id: "data-mongodb-reactive"
      facets:
      - "reactive"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-mongodb-reactive"
      scope: "compile"
      description: "Provides asynchronous stream processing with non-blocking back pressure for MongoDB."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-mongodb"
        templated: "true"
    - name: "Spring Data Elasticsearch (Access+Driver)"
      id: "data-elasticsearch"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-elasticsearch"
      scope: "compile"
      description: "A distributed, RESTful search and analytics engine with Spring Data Elasticsearch."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-elasticsearch"
        templated: "true"
    - name: "Spring Data for Apache Solr"
      id: "data-solr"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-solr"
      scope: "compile"
      description: "Apache Solr is an open source enterprise search platform built on Apache Lucene."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-solr"
        templated: "true"
    - name: "Spring Data for Apache Cassandra"
      id: "data-cassandra"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-cassandra"
      scope: "compile"
      description: "A free and open-source, distributed, NoSQL database management system that offers high-scalability and high-performance."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-cassandra"
        templated: "true"
    - name: "Spring Data Reactive for Apache Cassandra"
      id: "data-cassandra-reactive"
      facets:
      - "reactive"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-cassandra-reactive"
      scope: "compile"
      description: "Access Cassandra NoSQL Database in a reactive fashion."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-cassandra"
        templated: "true"
    - name: "Spring for Apache Geode"
      id: "geode"
      groupId: "org.springframework.geode"
      artifactId: "spring-geode-starter"
      mappings:
      - compatibilityRange: "[2.2.0.M5,2.3.0.M1)"
        groupId:
        artifactId:
        version: "1.2.9.RELEASE"
        starter:
        repository:
      - compatibilityRange: "[2.3.0.M1,2.4.0-M1)"
        groupId:
        artifactId:
        version: "1.3.2.RELEASE"
        starter:
        repository:
      - compatibilityRange: "2.4.0-M1"
        groupId:
        artifactId:
        version: "1.4.0-M1"
        starter:
        repository: "spring-milestones"
      scope: "compile"
      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 that is compatible with Pivotal Cloud Cache."
      compatibilityRange: "2.2.0.M5"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot-data-geode-build/current/reference/html5/"
      - rel: "guide"
        href: "https://github.com/spring-projects/spring-boot-data-geode/tree/master/spring-geode-samples"
        description: "Using Spring for Apache Geode"
      - rel: "other"
        href: "https://docs.spring.io/spring-boot-data-geode-build/current/reference/html5/#geode-gemfire-switch"
        description: "Switch from Apache Geode to Pivotal Cloud Cache"
    - name: "Spring Data Couchbase"
      id: "data-couchbase"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-couchbase"
      scope: "compile"
      description: "NoSQL document-oriented database that offers in memory-first architecture, geo-distributed deployments, and workload isolation."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-couchbase"
        templated: "true"
    - name: "Spring Data Reactive Couchbase"
      id: "data-couchbase-reactive"
      facets:
      - "reactive"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-couchbase-reactive"
      scope: "compile"
      description: "Access Couchbase NoSQL database in a reactive fashion with Spring Data Couchbase."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-couchbase"
        templated: "true"
    - name: "Spring Data Neo4j"
      id: "data-neo4j"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-data-neo4j"
      scope: "compile"
      description: "An open source NoSQL database that stores data structured as graphs consisting of nodes, connected by relationships."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/accessing-data-neo4j/"
        description: "Accessing Data with Neo4j"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-neo4j"
        templated: "true"
  - name: "Messaging"
    content:
    - name: "Spring Integration"
      id: "integration"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-integration"
      scope: "compile"
      description: "Adds support for Enterprise Integration Patterns. Enables lightweight messaging and supports integration with external systems via declarative adapters."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/integration/"
        description: "Integrating Data"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-integration"
        templated: "true"
    - name: "Spring for RabbitMQ"
      id: "amqp"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-amqp"
      scope: "compile"
      description: "Gives your applications a common platform to send and receive messages, and your messages a safe place to live until received."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/messaging-rabbitmq/"
        description: "Messaging with RabbitMQ"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-amqp"
        templated: "true"
    - name: "Spring for Apache Kafka"
      id: "kafka"
      groupId: "org.springframework.kafka"
      artifactId: "spring-kafka"
      scope: "compile"
      description: "Publish, subscribe, store, and process streams of records."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-kafka"
        templated: "true"
    - name: "Spring for Apache Kafka Streams"
      id: "kafka-streams"
      groupId: "org.apache.kafka"
      artifactId: "kafka-streams"
      scope: "compile"
      description: "Building stream processing applications with Apache Kafka Streams."
      starter: "false"
      links:
      - rel: "guide"
        href: "https://github.com/spring-cloud/spring-cloud-stream-samples/tree/master/kafka-streams-samples"
        description: "Samples for using Apache Kafka Streams with Spring Cloud stream"
      - rel: "reference"
        href: "https://docs.spring.io/spring-kafka/docs/current/reference/html/_reference.html#kafka-streams"
        description: "Apache Kafka Streams Support"
      - rel: "reference"
        href: "https://docs.spring.io/spring-cloud-stream/docs/current/reference/htmlsingle/#_kafka_streams_binding_capabilities_of_spring_cloud_stream"
        description: "Apache Kafka Streams Binding Capabilities of Spring Cloud Stream"
    - name: "Spring for Apache ActiveMQ 5"
      id: "activemq"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-activemq"
      scope: "compile"
      description: "Spring JMS support with Apache ActiveMQ 'Classic'."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/messaging-jms/"
        description: "Java Message Service API via Apache ActiveMQ Classic."
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-activemq"
        templated: "true"
    - name: "Spring for Apache ActiveMQ Artemis"
      id: "artemis"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-artemis"
      scope: "compile"
      description: "Spring JMS support with Apache ActiveMQ Artemis."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/messaging-jms/"
        description: "Messaging with JMS"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-artemis"
        templated: "true"
    - name: "WebSocket"
      id: "websocket"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-websocket"
      scope: "compile"
      description: "Build WebSocket applications with SockJS and STOMP."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/messaging-stomp-websocket/"
        description: "Using WebSocket to build an interactive web application"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-websockets"
        templated: "true"
    - name: "RSocket"
      id: "rsocket"
      facets:
      - "reactive"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-rsocket"
      scope: "compile"
      description: "RSocket.io applications with Spring Messaging and Netty."
      compatibilityRange: "2.2.0.M2"
      starter: "true"
    - name: "Apache Camel"
      id: "camel"
      groupId: "org.apache.camel.springboot"
      artifactId: "camel-spring-boot-starter"
      mappings:
      - compatibilityRange: "[2.0.0.M1,2.1.0.M1)"
        groupId: "org.apache.camel"
        artifactId:
        version: "2.22.4"
        starter:
        repository:
      - compatibilityRange: "[2.1.0.M1,2.2.0.M1)"
        groupId: "org.apache.camel"
        artifactId:
        version: "2.25.1"
        starter:
        repository:
      - compatibilityRange: "[2.2.0.M1,2.3.0.M1)"
        groupId:
        artifactId:
        version: "3.3.0"
        starter:
        repository:
      - compatibilityRange: "[2.3.0.M1,2.4.0-M1)"
        groupId:
        artifactId:
        version: "3.4.2"
        starter:
        repository:
      scope: "compile"
      description: "Apache Camel is an open source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data."
      compatibilityRange: "[2.0.0.M1,2.4.0-M1)"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://camel.apache.org/camel-spring-boot/latest/spring-boot.html"
        description: "Using Apache Camel with Spring Boot"
    - name: "Solace PubSub+"
      id: "solace"
      groupId: "com.solace.spring.boot"
      artifactId: "solace-spring-boot-starter"
      scope: "compile"
      description: "Connect to a Solace PubSub+ Advanced Event Broker to publish, subscribe, request/reply and store/replay messages"
      compatibilityRange: "[2.2.0.RELEASE,2.4.0-M1)"
      bom: "solace-spring-boot"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://www.solace.dev/start-spring-io-help/"
        description: "Getting started with Solace and Spring"
      - rel: "reference"
        href: "https://solace.dev"
        description: "Solace Developer Portal"
  - name: "I/O"
    content:
    - name: "Spring Batch"
      id: "batch"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-batch"
      scope: "compile"
      description: "Batch applications with transactions, retry/skip and chunk based processing."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/batch-processing/"
        description: "Creating a Batch Service"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-batch-applications"
        templated: "true"
    - name: "Validation"
      id: "validation"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-validation"
      scope: "compile"
      description: "JSR-303 validation with Hibernate validator."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-validation"
        templated: "true"
    - name: "Java Mail Sender"
      id: "mail"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-mail"
      scope: "compile"
      description: "Send email using Java Mail and Spring Framework's JavaMailSender."
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-email"
        templated: "true"
    - name: "Quartz Scheduler"
      id: "quartz"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-quartz"
      scope: "compile"
      description: "Schedule jobs using Quartz."
      starter: "true"
    - name: "Spring cache abstraction"
      id: "cache"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-cache"
      scope: "compile"
      description: "Provides cache-related operations, such as the ability to update the content of the cache, but does not provide the actual data store."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/caching/"
        description: "Caching Data with Spring"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-caching"
        templated: "true"
  - name: "Ops"
    content:
    - name: "Spring Boot Actuator"
      id: "actuator"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-actuator"
      scope: "compile"
      description: "Supports built in (or custom) endpoints that let you monitor and manage your application - such as application health, metrics, sessions, etc."
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/actuator-service/"
        description: "Building a RESTful Web Service with Spring Boot Actuator"
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#production-ready"
        templated: "true"
    - name: "Spring Boot Admin (Client)"
      id: "codecentric-spring-boot-admin-client"
      groupId: "de.codecentric"
      artifactId: "spring-boot-admin-starter-client"
      scope: "compile"
      description: "Required for your application to register with a Spring Boot Admin Server instance."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "codecentric-spring-boot-admin"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://codecentric.github.io/spring-boot-admin/current/#getting-started"
    - name: "Spring Boot Admin (Server)"
      id: "codecentric-spring-boot-admin-server"
      groupId: "de.codecentric"
      artifactId: "spring-boot-admin-starter-server"
      scope: "compile"
      description: "A community project to manage and monitor your Spring Boot applications. Provides a UI on top of the Spring Boot Actuator endpoints."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "codecentric-spring-boot-admin"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://codecentric.github.io/spring-boot-admin/current/#getting-started"
  - name: "Observability"
    content:
    - name: "Datadog"
      id: "datadog"
      groupId: "io.micrometer"
      artifactId: "micrometer-registry-datadog"
      scope: "runtime"
      description: "Datadog is a dimensional time-series SAAS with built-in dashboarding and alerting."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/html/production-ready-features.html#production-ready-metrics-export-datadog"
        templated: "true"
    - name: "Influx"
      id: "influx"
      groupId: "io.micrometer"
      artifactId: "micrometer-registry-influx"
      scope: "runtime"
      description: "Support real-time stream processing and storage of time-series data."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/html/production-ready-features.html#production-ready-metrics-export-influx"
        templated: "true"
    - name: "Graphite"
      id: "graphite"
      groupId: "io.micrometer"
      artifactId: "micrometer-registry-graphite"
      scope: "runtime"
      description: "Hierarchical metrics systems backed by a fixed-size database."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/html/production-ready-features.html#production-ready-metrics-export-graphite"
        templated: "true"
    - name: "New Relic"
      id: "new-relic"
      groupId: "io.micrometer"
      artifactId: "micrometer-registry-new-relic"
      scope: "runtime"
      description: "SaaS offering with a full UI and a query language called NRQL."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/html/production-ready-features.html#production-ready-metrics-export-new-relic"
        templated: "true"
    - name: "Prometheus"
      id: "prometheus"
      groupId: "io.micrometer"
      artifactId: "micrometer-registry-prometheus"
      scope: "runtime"
      description: "An in-memory dimensional time series database with a simple built-in UI, a custom query language, and math operations."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/html/production-ready-features.html#production-ready-metrics-export-prometheus"
        templated: "true"
    - name: "Wavefront"
      id: "wavefront"
      groupId: "com.wavefront"
      artifactId: "wavefront-spring-boot-starter"
      scope: "compile"
      description: "Tanzu Observability by Wavefront is a SaaS-based metrics monitoring and analytics platform that lets you visualize, query, and alert over data from across your entire stack (infrastructure, network, custom app metrics, business KPIs, etc.)"
      bom: "wavefront"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.wavefront.com/wavefront_springboot.html"
        description: "Wavefront for Spring Boot documentation"
      - rel: "reference"
        href: "https://github.com/wavefrontHQ/wavefront-spring-boot"
        description: "Wavefront for Spring Boot repository"
  - name: "Testing"
    content:
    - name: "Spring REST Docs"
      id: "restdocs"
      groupId: "org.springframework.restdocs"
      artifactId: "spring-restdocs-mockmvc"
      scope: "test"
      description: "Document RESTful services by combining hand-written with Asciidoctor and auto-generated snippets produced with Spring MVC Test."
      starter: "false"
    - name: "Contract Verifier"
      id: "cloud-contract-verifier"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-contract-verifier"
      scope: "test"
      description: "Moves TDD to the level of software architecture by enabling Consumer Driven Contract (CDC) development."
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://cloud.spring.io/spring-cloud-contract/spring-cloud-contract.html#_spring_cloud_contract_verifier_setup"
        description: "Spring Cloud Contract Verifier Setup"
    - name: "Contract Stub Runner"
      id: "cloud-contract-stub-runner"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-contract-stub-runner"
      scope: "test"
      description: "Stub Runner for HTTP/Messaging based communication. Allows creating WireMock stubs from RestDocs tests."
      bom: "spring-cloud"
      starter: "true"
    - name: "Embedded LDAP Server"
      id: "unboundid-ldap"
      groupId: "com.unboundid"
      artifactId: "unboundid-ldapsdk"
      scope: "test"
      description: "Provides a platform neutral way for running a LDAP server in unit tests."
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/html/boot-features-nosql.html#boot-features-ldap-embedded"
        templated: "true"
    - name: "Embedded MongoDB Database"
      id: "flapdoodle-mongo"
      groupId: "de.flapdoodle.embed"
      artifactId: "de.flapdoodle.embed.mongo"
      scope: "test"
      description: "Provides a platform neutral way for running MongoDB in unit tests."
      starter: "false"
  - name: "Spring Cloud"
    content:
    - name: "Cloud Bootstrap"
      id: "cloud-starter"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter"
      scope: "compile"
      description: "Non-specific Spring Cloud features, unrelated to external libraries or integrations (e.g. Bootstrap context and @RefreshScope)."
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://spring.io/projects/spring-cloud-commons"
    - name: "Function"
      id: "cloud-function"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-function-context"
      scope: "compile"
      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)."
      bom: "spring-cloud"
      starter: "false"
      links:
      - rel: "reference"
        href: "https://cloud.spring.io/spring-cloud-function/"
      - rel: "sample"
        href: "https://github.com/spring-cloud/spring-cloud-function/tree/master/spring-cloud-function-samples"
        description: "Various sample apps using Spring Cloud Function"
    - name: "Task"
      id: "cloud-task"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-task"
      scope: "compile"
      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."
      bom: "spring-cloud"
      starter: "true"
  - name: "Spring Cloud Security"
    content:
    - name: "Cloud Security"
      id: "cloud-security"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-security"
      scope: "compile"
      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."
      bom: "spring-cloud"
      starter: "true"
    - name: "Cloud OAuth2"
      id: "cloud-oauth2"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-oauth2"
      scope: "compile"
      description: "OAuth2 and distributed application patterns with spring-cloud-security."
      bom: "spring-cloud"
      starter: "true"
  - name: "Spring Cloud Tools"
    content:
    - name: "Cloud Connectors"
      id: "cloud-connectors"
      groupId: "org.springframework.boot"
      artifactId: "spring-boot-starter-cloud-connectors"
      scope: "compile"
      description: "Simplifies the process of connecting to services and gaining operating environment awareness in cloud platforms such as Cloud Foundry and Heroku."
      compatibilityRange: "[2.0.0.RELEASE,2.3.0.M1)"
      starter: "true"
    - name: "Open Service Broker"
      id: "open-service-broker"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-open-service-broker"
      mappings:
      - compatibilityRange: "[2.0.0.RELEASE,2.1.0.M1)"
        groupId:
        artifactId: "spring-cloud-starter-open-service-broker-webmvc"
        version: "2.1.3.RELEASE"
        starter:
        repository:
      - compatibilityRange: "[2.1.0.M1,2.2.0.M1)"
        groupId:
        artifactId:
        version: "3.0.4.RELEASE"
        starter:
        repository:
      - compatibilityRange: "[2.2.0.M1,2.4.0-M1)"
        groupId:
        artifactId:
        version: "3.1.1.RELEASE"
        starter:
        repository:
      scope: "compile"
      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."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.spring.io/spring-cloud-open-service-broker/docs/current/reference/html5/"
      - rel: "guide"
        href: "https://github.com/spring-cloud-samples/bookstore-service-broker"
        description: "Using Spring Cloud Open Service Broker"
  - name: "Spring Cloud Config"
    content:
    - name: "Config Client"
      id: "cloud-config-client"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-config"
      scope: "compile"
      description: "Client that connects to a Spring Cloud Config Server to fetch the application's configuration."
      bom: "spring-cloud"
      starter: "true"
    - name: "Config Server"
      id: "cloud-config-server"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-config-server"
      scope: "compile"
      description: "Central management for configuration via Git, SVN, or HashiCorp Vault."
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/centralized-configuration/"
        description: "Centralized Configuration"
    - name: "Vault Configuration"
      id: "cloud-starter-vault-config"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-vault-config"
      scope: "compile"
      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."
      bom: "spring-cloud"
      starter: "true"
    - name: "Apache Zookeeper Configuration"
      id: "cloud-starter-zookeeper-config"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-zookeeper-config"
      mappings:
      - compatibilityRange: "[2.0.0.RELEASE,2.2.0.M4)"
        groupId:
        artifactId:
        version:
        starter: "false"
        repository:
      scope: "compile"
      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."
      bom: "spring-cloud"
      starter: "true"
    - name: "Consul Configuration"
      id: "cloud-starter-consul-config"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-consul-config"
      mappings:
      - compatibilityRange: "[2.0.0.RELEASE,2.2.0.M4)"
        groupId:
        artifactId:
        version:
        starter: "false"
        repository:
      scope: "compile"
      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."
      bom: "spring-cloud"
      starter: "true"
  - name: "Spring Cloud Discovery"
    content:
    - name: "Eureka Discovery Client"
      id: "cloud-eureka"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-netflix-eureka-client"
      scope: "compile"
      description: "a REST based service for locating services for the purpose of load balancing and failover of middle-tier servers."
      bom: "spring-cloud"
      starter: "true"
    - name: "Eureka Server"
      id: "cloud-eureka-server"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-netflix-eureka-server"
      scope: "compile"
      description: "spring-cloud-netflix Eureka Server."
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/service-registration-and-discovery/"
        description: "Service Registration and Discovery"
    - name: "Apache Zookeeper Discovery"
      id: "cloud-starter-zookeeper-discovery"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-zookeeper-discovery"
      scope: "compile"
      description: "Service discovery with Apache Zookeeper."
      bom: "spring-cloud"
      starter: "true"
    - name: "Cloud Foundry Discovery"
      id: "cloud-cloudfoundry-discovery"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-cloudfoundry-discovery"
      scope: "compile"
      description: "Service discovery with Cloud Foundry."
      bom: "spring-cloud"
      starter: "true"
    - name: "Consul Discovery"
      id: "cloud-starter-consul-discovery"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-consul-discovery"
      scope: "compile"
      description: "Service discovery with Hashicorp Consul."
      bom: "spring-cloud"
      starter: "true"
  - name: "Spring Cloud Routing"
    content:
    - name: "Zuul [Maintenance]"
      id: "cloud-zuul"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-netflix-zuul"
      scope: "compile"
      description: "Intelligent and programmable routing with Spring Cloud Netflix Zuul."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/routing-and-filtering/"
        description: "Routing and Filtering"
    - name: "Gateway"
      id: "cloud-gateway"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-gateway"
      scope: "compile"
      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."
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://github.com/spring-cloud-samples/spring-cloud-gateway-sample"
        description: "Using Spring Cloud Gateway"
    - name: "Ribbon [Maintenance]"
      id: "cloud-ribbon"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-netflix-ribbon"
      scope: "compile"
      description: "Client-side load-balancing with Spring Cloud Netflix and Ribbon."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/client-side-load-balancing/"
        description: "Client-side load-balancing with Ribbon and Spring Cloud"
    - name: "OpenFeign"
      id: "cloud-feign"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-openfeign"
      scope: "compile"
      description: "Declarative REST Client. OpenFeign creates a dynamic implementation of an interface decorated with JAX-RS or Spring MVC annotations."
      bom: "spring-cloud"
      starter: "true"
    - name: "Cloud LoadBalancer"
      id: "cloud-loadbalancer"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-loadbalancer"
      scope: "compile"
      description: "Client-side load-balancing with Spring Cloud LoadBalancer."
      compatibilityRange: "2.2.0.M4"
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/spring-cloud-loadbalancer/"
        description: "Client-side load-balancing with Spring Cloud LoadBalancer"
      - rel: "reference"
        href: "https://cloud.spring.io/spring-cloud-static/spring-cloud-commons/current/reference/html/#spring-cloud-loadbalancer"
  - name: "Spring Cloud Circuit Breaker"
    content:
    - name: "Resilience4J"
      id: "cloud-resilience4j"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-circuitbreaker-resilience4j"
      scope: "compile"
      description: "Spring Cloud Circuit breaker with Resilience4j as the underlying implementation."
      compatibilityRange: "2.2.0.RELEASE"
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://cloud.spring.io/spring-cloud-static/spring-cloud-circuitbreaker/current/reference/html"
    - name: "Hystrix [Maintenance]"
      id: "cloud-hystrix"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-netflix-hystrix"
      scope: "compile"
      description: "Circuit breaker with Spring Cloud Netflix Hystrix."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://spring.io/guides/gs/circuit-breaker/"
        description: "Circuit Breaker"
    - name: "Hystrix Dashboard [Maintenance]"
      id: "cloud-hystrix-dashboard"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-netflix-hystrix-dashboard"
      scope: "compile"
      description: "Circuit breaker dashboard with Spring Cloud Netflix Hystrix."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "true"
    - name: "Turbine [Maintenance]"
      id: "cloud-turbine"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-netflix-turbine"
      scope: "compile"
      description: "Circuit breaker metric aggregation using spring-cloud-netflix with Turbine and server-sent events."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "true"
    - name: "Turbine Stream [Maintenance]"
      id: "cloud-turbine-stream"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-netflix-turbine-stream"
      scope: "compile"
      description: "Circuit breaker metric aggregation using spring-cloud-netflix with Turbine and Spring Cloud Stream (requires a binder, e.g. Apache Kafka or RabbitMQ)."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "true"
  - name: "Spring Cloud Tracing"
    content:
    - name: "Sleuth"
      id: "cloud-starter-sleuth"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-sleuth"
      scope: "compile"
      description: "Distributed tracing via logs with Spring Cloud Sleuth."
      bom: "spring-cloud"
      starter: "true"
    - name: "Zipkin Client"
      id: "cloud-starter-zipkin"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-zipkin"
      scope: "compile"
      description: "Distributed tracing with an existing Zipkin installation and Spring Cloud Sleuth Zipkin."
      bom: "spring-cloud"
      starter: "true"
  - name: "Spring Cloud Messaging"
    content:
    - name: "Cloud Bus"
      id: "cloud-bus"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-bus"
      scope: "compile"
      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)."
      bom: "spring-cloud"
      starter: "true"
    - name: "Cloud Stream"
      id: "cloud-stream"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-stream"
      scope: "compile"
      description: "Framework for building highly scalable event-driven microservices connected with shared messaging systems (requires a binder, e.g. Apache Kafka, RabbitMQ or Solace PubSub+)."
      bom: "spring-cloud"
      starter: "true"
    - name: "Reactive Cloud Stream"
      id: "reactive-cloud-stream"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-stream-reactive"
      scope: "compile"
      description: "Reactive messaging microservices with Spring Cloud Stream (requires a binder, e.g. Apache Kafka or RabbitMQ)."
      compatibilityRange: "[2.0.0.RELEASE,2.2.0.M1)"
      bom: "spring-cloud"
      starter: "true"
  - name: "Pivotal Cloud Foundry"
    content:
    - name: "Config Client (PCF)"
      id: "scs-config-client"
      groupId: "io.pivotal.spring.cloud"
      artifactId: "spring-cloud-services-starter-config-client"
      scope: "compile"
      description: "Config client on Pivotal Cloud Foundry."
      compatibilityRange: "[2.0.0.RELEASE,2.3.0.M1)"
      bom: "spring-cloud-services"
      starter: "false"
      links:
      - rel: "reference"
        href: "https://docs.pivotal.io/spring-cloud-services/"
    - name: "Service Registry (PCF)"
      id: "scs-service-registry"
      groupId: "io.pivotal.spring.cloud"
      artifactId: "spring-cloud-services-starter-service-registry"
      scope: "compile"
      description: "Eureka service discovery client on Pivotal Cloud Foundry."
      compatibilityRange: "[2.0.0.RELEASE,2.3.0.M1)"
      bom: "spring-cloud-services"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.pivotal.io/spring-cloud-services/"
    - name: "Circuit Breaker (PCF)"
      id: "scs-circuit-breaker"
      groupId: "io.pivotal.spring.cloud"
      artifactId: "spring-cloud-services-starter-circuit-breaker"
      scope: "compile"
      description: "Hystrix circuit breaker client on Pivotal Cloud Foundry."
      compatibilityRange: "[2.0.0.RELEASE,2.3.0.M1)"
      bom: "spring-cloud-services"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://docs.pivotal.io/spring-cloud-services/"
  - name: "Amazon Web Services"
    content:
    - name: "AWS Core"
      id: "cloud-aws"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-aws"
      scope: "compile"
      description: "AWS native services from Spring Cloud for AWS."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "false"
    - name: "AWS RDS"
      id: "cloud-aws-jdbc"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-aws-jdbc"
      scope: "compile"
      description: "Relational databases on AWS with RDS and Spring Cloud AWS JDBC."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "false"
    - name: "AWS Simple Queue Service"
      id: "cloud-aws-messaging"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-starter-aws-messaging"
      scope: "compile"
      description: "Messaging on AWS with SQS and Spring Cloud AWS Messaging."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "false"
  - name: "Microsoft Azure"
    content:
    - name: "Azure Support"
      id: "azure-support"
      groupId: "com.microsoft.azure"
      artifactId: "azure-spring-boot-starter"
      scope: "compile"
      description: "Auto-configuration for Azure Services (Service Bus, Storage, Active Directory, Cosmos DB, Key Vault, and more)."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "azure"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot"
    - name: "Azure Active Directory"
      id: "azure-active-directory"
      groupId: "com.microsoft.azure"
      artifactId: "azure-active-directory-spring-boot-starter"
      scope: "compile"
      description: "Spring Security integration with Azure Active Directory for authentication."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "azure"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-samples/azure-active-directory-spring-boot-sample"
        description: "Using Active Directory"
      - rel: "reference"
        href: "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-starters/azure-active-directory-spring-boot-starter"
    - name: "Azure Key Vault"
      id: "azure-keyvault-secrets"
      groupId: "com.microsoft.azure"
      artifactId: "azure-keyvault-secrets-spring-boot-starter"
      scope: "compile"
      description: "Manage application secrets and keys."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "azure"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-samples/azure-keyvault-secrets-spring-boot-sample"
        description: "Using Key Vault"
      - rel: "reference"
        href: "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-starters/azure-keyvault-secrets-spring-boot-starter"
    - name: "Azure Storage"
      id: "azure-storage"
      groupId: "com.microsoft.azure"
      artifactId: "azure-storage-spring-boot-starter"
      scope: "compile"
      description: "Azure Storage service integration."
      compatibilityRange: "[2.0.0.RELEASE,2.3.0.M1)"
      bom: "azure"
      starter: "true"
      links:
      - rel: "guide"
        href: "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-samples/azure-storage-spring-boot-sample"
        description: "Using Azure Storage"
      - rel: "reference"
        href: "https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-starters/azure-storage-spring-boot-starter"
  - name: "Google Cloud Platform"
    content:
    - name: "GCP Support"
      id: "cloud-gcp"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-gcp-starter"
      scope: "compile"
      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."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://cloud.spring.io/spring-cloud-gcp/reference/html/"
      - rel: "guide"
        href: "https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples"
        description: "GCP Samples"
    - name: "GCP Messaging"
      id: "cloud-gcp-pubsub"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-gcp-starter-pubsub"
      scope: "compile"
      description: "Adds the GCP Support entry and all the required dependencies so that the Google Cloud Pub/Sub integration work out of the box."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://cloud.spring.io/spring-cloud-gcp/reference/html/#spring-integration"
      - rel: "guide"
        href: "https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample"
        description: "GCP Pub/Sub Sample"
    - name: "GCP Storage"
      id: "cloud-gcp-storage"
      groupId: "org.springframework.cloud"
      artifactId: "spring-cloud-gcp-starter-storage"
      scope: "compile"
      description: "Adds the GCP Support entry and all the required dependencies so that the Google Cloud Storage integration work out of the box."
      compatibilityRange: "[2.0.0.RELEASE,2.4.0-M1)"
      bom: "spring-cloud"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://cloud.spring.io/spring-cloud-gcp/reference/html/#spring-resources"
      - rel: "guide"
        href: "https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample"
        description: "GCP Storage Sample"
  - name: "Alibaba"
    content:
    - name: "Nacos Configuration"
      id: "alibaba-nacos-config"
      groupId: "com.alibaba.cloud"
      artifactId: "spring-cloud-starter-alibaba-nacos-config"
      scope: "compile"
      description: "Support for externalized configuration in a distributed system, auto refresh when configuration changes."
      compatibilityRange: "[2.2.0.RELEASE,2.3.0.M1)"
      bom: "spring-cloud-alibaba"
      starter: "false"
      links:
      - rel: "reference"
        href: "https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_config"
      - rel: "guide"
        href: "https://github.com/alibaba/spring-cloud-alibaba/tree/master/spring-cloud-alibaba-examples/nacos-example/nacos-config-example"
        description: "Nacos Configuration Example"
    - name: "Nacos Service Discovery"
      id: "alibaba-nacos-discovery"
      groupId: "com.alibaba.cloud"
      artifactId: "spring-cloud-starter-alibaba-nacos-discovery"
      scope: "compile"
      description: "Service discovery with Alibaba Nacos."
      compatibilityRange: "[2.2.0.RELEASE,2.3.0.M1)"
      bom: "spring-cloud-alibaba"
      starter: "true"
      links:
      - rel: "reference"
        href: "https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_nacos_discovery"
      - rel: "guide"
        href: "https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme.md"
        description: "Nacos Service Discovery Example"
    - name: "Sentinel"
      id: "alibaba-sentinel"
      groupId: "com.alibaba.cloud"
      artifactId: "spring-cloud-starter-alibaba-sentinel"
      scope: "compile"
      description: "Flow control and circuit breaking with Alibaba Sentinel."
      compatibilityRange: "[2.2.0.RELEASE,2.3.0.M1)"
      bom: "spring-cloud-alibaba"
      starter: "false"
      links:
      - rel: "reference"
        href: "https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_spring_cloud_alibaba_sentinel"
      - rel: "guide"
        href: "https://github.com/alibaba/spring-cloud-alibaba/tree/master/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example"
        description: "Sentinel Example"
  types:
  - name: "Maven Project"
    id: "maven-project"
    description: "Generate a Maven based project archive."
    action: "/starter.zip"
    tags:
      build: "maven"
      format: "project"
    default: "true"
  - name: "Maven POM"
    id: "maven-build"
    description: "Generate a Maven pom.xml."
    action: "/pom.xml"
    tags:
      build: "maven"
      format: "build"
    default: "false"
  - name: "Gradle Project"
    id: "gradle-project"
    description: "Generate a Gradle based project archive."
    action: "/starter.zip"
    tags:
      build: "gradle"
      format: "project"
    default: "false"
  - name: "Gradle Config"
    id: "gradle-build"
    description: "Generate a Gradle build file."
    action: "/build.gradle"
    tags:
      build: "gradle"
      format: "build"
    default: "false"
  bootVersions:
  - name: "2.4.0 (SNAPSHOT)"
    id: "2.4.0-SNAPSHOT"
    default: "false"
  - name: "2.4.0 (M1)"
    id: "2.4.0-M1"
    default: "false"
  - name: "2.3.3 (SNAPSHOT)"
    id: "2.3.3.BUILD-SNAPSHOT"
    default: "false"
  - name: "2.3.2"
    id: "2.3.2.RELEASE"
    default: "true"
  - name: "2.2.10 (SNAPSHOT)"
    id: "2.2.10.BUILD-SNAPSHOT"
    default: "false"
  - name: "2.2.9"
    id: "2.2.9.RELEASE"
    default: "false"
  - name: "2.1.17 (SNAPSHOT)"
    id: "2.1.17.BUILD-SNAPSHOT"
    default: "false"
  - name: "2.1.16"
    id: "2.1.16.RELEASE"
    default: "false"
  packagings:
  - name: "Jar"
    id: "jar"
    default: "true"
  - name: "War"
    id: "war"
    default: "false"
  javaVersions:
  - name: "14"
    id: "14"
    default: "false"
  - name: "11"
    id: "11"
    default: "true"
  - name: "8"
    id: "1.8"
    default: "false"
  languages:
  - name: "Java"
    id: "java"
    default: "true"
  - name: "Kotlin"
    id: "kotlin"
    default: "false"
  - name: "Groovy"
    id: "groovy"
    default: "false"
  group-id:
    value: org.acme
  artifact-id:
    description:

2.8.打包使用

至此,所有的工作就算完成了。
通过maven重新package,然后

java -jar 你的目录\initializr-service-custom\target\initializr-service-custom-0.9.0.jar

访问http://localhost:8080,一切正常
访问http://localhost:8080/metadata/config,和官网一样

打开IDEA,选择本地地址,OK,飞起来!



补充1

有同学需要这个打好的包,这里给一个连接
链接: https://百度网盘(这里得换一下真实地址)/s/1rwhuCjHTCL2paMkGlvcHUw
提取码: 52bb

补充2

今天在上传了jar包以后,突然觉得再啰嗦一句:前面贴出了application.yml的配置,其实这里都是可以自己修改的。具体修改起来,因为有了完整的内容,其实大家都可以很容易的修改出来,比如有了新的版本,就可以自己去改。

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值