diff --git a/README.adoc b/README.adoc
index ae6dde68..1939f145 100644
--- a/README.adoc
+++ b/README.adoc
@@ -338,6 +338,8 @@ be set there. Just provide a mapping for the `gradle-props-substition` looking l
Example: `"--releaser.pom.ignored-pom-regex=".{asterisk}\\.git/.{asterisk}$,.\{asterisk}spring-cloud-contract-maven-plugin/src/test/projects/.{asterisk}$,.{asterisk}spring-cloud-contract-maven-plugin/target/.{asterisk}$,.{asterisk}samples/standalone/[a-z]+/.{asterisk}$"`.
- `releaser.working-dir` - By default Releaser assumes running the program from the current working directory.
- `releaser.template.template-folder` - Tells which subfolder with templates to pick for blog, email etc. generation. Defaults to `cloud`.
+- `releaser.versions.all-versions-file-url` - Url to a file containing all the versions. Defaults to YAML from start.spring.io.
+- `releaser.versions.bom-name` - Name in the YAML from initilizr for BOM mappings. Defaults to `spring-cloud`.
TIP: You can pass the options either via system properties or via application arguments.
Example for system properties: `java -Dreleaser.pom.branch=Camden.SR6 -jar target/spring-cloud-release-tools-spring-1.0.0.M1.jar`
diff --git a/docs/src/main/asciidoc/spring-cloud-release-tools.adoc b/docs/src/main/asciidoc/spring-cloud-release-tools.adoc
index e1928589..7b8f9f70 100644
--- a/docs/src/main/asciidoc/spring-cloud-release-tools.adoc
+++ b/docs/src/main/asciidoc/spring-cloud-release-tools.adoc
@@ -324,6 +324,8 @@ be set there. Just provide a mapping for the `gradle-props-substition` looking l
Example: `"--releaser.pom.ignored-pom-regex=".{asterisk}\\.git/.{asterisk}$,.\{asterisk}spring-cloud-contract-maven-plugin/src/test/projects/.{asterisk}$,.{asterisk}spring-cloud-contract-maven-plugin/target/.{asterisk}$,.{asterisk}samples/standalone/[a-z]+/.{asterisk}$"`.
- `releaser.working-dir` - By default Releaser assumes running the program from the current working directory.
- `releaser.template.template-folder` - Tells which subfolder with templates to pick for blog, email etc. generation. Defaults to `cloud`.
+- `releaser.versions.all-versions-file-url` - Url to a file containing all the versions. Defaults to YAML from start.spring.io.
+- `releaser.versions.bom-name` - Name in the YAML from initilizr for BOM mappings. Defaults to `spring-cloud`.
TIP: You can pass the options either via system properties or via application arguments.
Example for system properties: `java -Dreleaser.pom.branch=Camden.SR6 -jar target/spring-cloud-release-tools-spring-1.0.0.M1.jar`
diff --git a/spring-cloud-release-tools-core/pom.xml b/spring-cloud-release-tools-core/pom.xml
index 31554509..42a4d9f3 100644
--- a/spring-cloud-release-tools-core/pom.xml
+++ b/spring-cloud-release-tools-core/pom.xml
@@ -96,6 +96,11 @@
handlebars
4.0.6
+
+ io.spring.initializr
+ initializr-metadata
+ 0.8.0.BUILD-SNAPSHOT
+
org.springframework.boot
spring-boot-starter-test
diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java
index 6a7bd747..f4430730 100644
--- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/ReleaserProperties.java
@@ -61,6 +61,8 @@ public class ReleaserProperties implements Serializable {
private Template template = new Template();
+ private Versions versions = new Versions();
+
/**
* Project name to its version - overrides all versions retrieved from a repository
* like Spring Cloud Release.
@@ -150,13 +152,21 @@ public class ReleaserProperties implements Serializable {
this.postReleaseTasksOnly = postReleaseTasksOnly;
}
+ public Versions getVersions() {
+ return this.versions;
+ }
+
+ public void setVersions(Versions versions) {
+ this.versions = versions;
+ }
+
@Override
public String toString() {
return "ReleaserProperties{" + "workingDir='" + this.workingDir + '\'' + ", git="
+ this.git + ", pom=" + this.pom + ", maven=" + this.maven + ", gradle="
+ this.gradle + ", sagan=" + this.sagan + ", fixedVersions="
+ this.fixedVersions + ", metaRelease=" + this.metaRelease + ", template="
- + this.template + '}';
+ + this.template + ", versions=" + this.versions + '}';
}
public ReleaserProperties copy() {
@@ -959,4 +969,41 @@ public class ReleaserProperties implements Serializable {
}
+ public static class Versions implements Serializable {
+
+ /**
+ * Url to a file containing all the versions. Defaults to YAML from
+ * start.spring.io.
+ */
+ private String allVersionsFileUrl = "https://raw.githubusercontent.com/spring-io/start.spring.io/master/start-site/src/main/resources/application.yml";
+
+ /**
+ * Name in the YAML from initilizr for BOM mappings.
+ */
+ private String bomName = "spring-cloud";
+
+ public String getAllVersionsFileUrl() {
+ return this.allVersionsFileUrl;
+ }
+
+ public void setAllVersionsFileUrl(String allVersionsFileUrl) {
+ this.allVersionsFileUrl = allVersionsFileUrl;
+ }
+
+ public String getBomName() {
+ return bomName;
+ }
+
+ public void setBomName(String bomName) {
+ this.bomName = bomName;
+ }
+
+ @Override
+ public String toString() {
+ return "Versions{" + "allVersionsFileUrl='" + this.allVersionsFileUrl + '\''
+ + ", bomName='" + this.bomName + '\'' + '}';
+ }
+
+ }
+
}
diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/ProjectPomUpdater.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/ProjectPomUpdater.java
index 927f6675..21d88c54 100644
--- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/ProjectPomUpdater.java
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/pom/ProjectPomUpdater.java
@@ -25,8 +25,10 @@ import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import java.util.Scanner;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -49,6 +51,10 @@ public class ProjectPomUpdater implements ReleaserPropertiesAware {
private static final Logger log = LoggerFactory.getLogger(ProjectPomUpdater.class);
+ private static final boolean UPDATE_FIXED_VERSIONS = true;
+
+ private static final Map CACHE = new ConcurrentHashMap<>();
+
private final ProjectGitHandler gitRepo;
private final PomUpdater pomUpdater = new PomUpdater();
@@ -71,13 +77,32 @@ public class ProjectPomUpdater implements ReleaserPropertiesAware {
* @return projects retrieved from the release train bom
*/
public Projects retrieveVersionsFromReleaseTrainBom() {
- File clonedScRelease = this.gitRepo.cloneReleaseTrainProject();
- this.gitRepo.checkout(clonedScRelease, this.properties.getPom().getBranch());
- BomParser sCReleasePomParser = new BomParser(this.properties, clonedScRelease);
- Versions versions = sCReleasePomParser.allVersions();
- log.info("Will update the following versions manually [{}]",
- this.properties.getFixedVersions());
- this.properties.getFixedVersions().forEach(versions::setVersion);
+ return retrieveVersionsFromReleaseTrainBom(this.properties.getPom().getBranch(),
+ UPDATE_FIXED_VERSIONS);
+ }
+
+ /**
+ * For the given root folder (typically the working directory) retrieves list of
+ * versions for a given release version.
+ * @param branch branch for which to pick the versions
+ * @param updateFixedVersions whether should update the retrieved versions with fixed
+ * ones
+ * @return projects retrieved from the release train bom
+ */
+ public Projects retrieveVersionsFromReleaseTrainBom(String branch,
+ boolean updateFixedVersions) {
+ Versions versions = CACHE.computeIfAbsent(branch, s -> {
+ File clonedScRelease = this.gitRepo.cloneReleaseTrainProject();
+ this.gitRepo.checkout(clonedScRelease, branch);
+ BomParser sCReleasePomParser = new BomParser(this.properties,
+ clonedScRelease);
+ return sCReleasePomParser.allVersions();
+ });
+ if (updateFixedVersions) {
+ log.info("Will update the following versions manually [{}]",
+ this.properties.getFixedVersions());
+ this.properties.getFixedVersions().forEach(versions::setVersion);
+ }
log.info("Retrieved the following versions\n{}", versions);
return versions.toProjectVersions();
}
diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/ProjectBuilder.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/ProjectBuilder.java
index 92957bd3..05b031aa 100644
--- a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/ProjectBuilder.java
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/project/ProjectBuilder.java
@@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
import org.springframework.cloud.release.internal.pom.ProjectVersion;
+import org.springframework.cloud.release.internal.versions.VersionsFetcher;
import org.springframework.util.StringUtils;
/**
@@ -50,8 +51,12 @@ public class ProjectBuilder implements ReleaserPropertiesAware {
private ReleaserProperties properties;
- public ProjectBuilder(ReleaserProperties properties) {
+ private final VersionsFetcher versionsFetcher;
+
+ public ProjectBuilder(ReleaserProperties properties,
+ VersionsFetcher versionsFetcher) {
this.properties = properties;
+ this.versionsFetcher = versionsFetcher;
}
public void build(ProjectVersion versionFromReleaseTrain) {
@@ -102,7 +107,7 @@ public class ProjectBuilder implements ReleaserPropertiesAware {
}
else if (version.isRelease() || version.isServiceRelease()) {
log.info("Adding the central profile to the Maven build");
- return trimmedCommand + " -Pcentral";
+ return trimmedCommand + " -Pcentral" + profilesForLatestVersion(version);
}
else {
log.info("The build is a snapshot one - will not add any profiles");
@@ -110,6 +115,16 @@ public class ProjectBuilder implements ReleaserPropertiesAware {
return trimmedCommand;
}
+ private String profilesForLatestVersion(ProjectVersion projectVersion) {
+ boolean latestGa = this.versionsFetcher.isLatestGa(projectVersion);
+ if (latestGa) {
+ log.info("Version [" + projectVersion.version
+ + "] is the latest GA! Will append additional profiles");
+ return " -Pguides";
+ }
+ return "";
+ }
+
private void assertNoHtmlFilesInDocsContainUnresolvedTags(String workingDir) {
try {
File docs = new File(workingDir, "docs");
diff --git a/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/versions/VersionsFetcher.java b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/versions/VersionsFetcher.java
new file mode 100644
index 00000000..87395acc
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/main/java/org/springframework/cloud/release/internal/versions/VersionsFetcher.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2013-2019 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.release.internal.versions;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+import io.spring.initializr.metadata.BillOfMaterials;
+import io.spring.initializr.metadata.InitializrProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
+import org.springframework.boot.context.properties.bind.Binder;
+import org.springframework.boot.context.properties.source.MapConfigurationPropertySource;
+import org.springframework.cloud.release.internal.ReleaserProperties;
+import org.springframework.cloud.release.internal.ReleaserPropertiesAware;
+import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
+import org.springframework.cloud.release.internal.pom.ProjectVersion;
+import org.springframework.cloud.release.internal.pom.Projects;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.util.StringUtils;
+
+/**
+ * Knows how to fetch the data related to versions. E.g. the latest release train, is this
+ * project's version the latest one etc.
+ *
+ * @author Marcin Grzejszczak
+ */
+public class VersionsFetcher implements ReleaserPropertiesAware {
+
+ private static final Logger log = LoggerFactory.getLogger(VersionsFetcher.class);
+
+ private ReleaserProperties properties;
+
+ private final ProjectPomUpdater projectPomUpdater;
+
+ private final ToPropertiesConverter toPropertiesConverter;
+
+ public VersionsFetcher(ReleaserProperties properties,
+ ProjectPomUpdater projectPomUpdater) {
+ this.properties = properties;
+ this.projectPomUpdater = projectPomUpdater;
+ this.toPropertiesConverter = new ToPropertiesConverter(new RawGithubRetriever());
+ }
+
+ /**
+ * Checks if the given project version is the latest GA available.
+ * @param version version to check
+ * @return {@code true} if this version is the latest GA
+ */
+ public boolean isLatestGa(ProjectVersion version) {
+ if (!version.isReleaseOrServiceRelease()) {
+ if (log.isDebugEnabled()) {
+ log.debug("Version [" + version.toString()
+ + "] is non GA, will not fetch any versions.");
+ }
+ return false;
+ }
+ String latestVersionsUrl = this.properties.getVersions().getAllVersionsFileUrl();
+ InitializrProperties initializrProperties = this.toPropertiesConverter
+ .toProperties(latestVersionsUrl);
+ if (initializrProperties == null) {
+ return false;
+ }
+ ProjectVersion bomVersion = latestBomVersion();
+ if (bomVersion == null) {
+ log.info("No BOM mapping with name [{}] found",
+ this.properties.getVersions().getBomName());
+ return false;
+ }
+ Projects projectVersions = this.projectPomUpdater
+ .retrieveVersionsFromReleaseTrainBom("v" + bomVersion.toString(), false);
+ boolean containsProject = projectVersions.containsProject(version.projectName);
+ if (containsProject) {
+ return bomVersion.compareTo(projectVersions.forName(version.projectName)) > 0;
+ }
+ log.info("The project [" + version.projectName
+ + "] is not present in the BOM with projects [" + projectVersions.stream()
+ .map(v -> v.projectName).collect(Collectors.joining(", "))
+ + "]");
+ return false;
+ }
+
+ private ProjectVersion latestBomVersion() {
+ String latestVersionsUrl = this.properties.getVersions().getAllVersionsFileUrl();
+ InitializrProperties initializrProperties = this.toPropertiesConverter
+ .toProperties(latestVersionsUrl);
+ if (initializrProperties == null) {
+ return null;
+ }
+ ProjectVersion springCloudVersion = initializrProperties.getEnv().getBoms()
+ .getOrDefault(
+ this.properties.getVersions().getBomName(), new BillOfMaterials())
+ .getMappings().stream()
+ .map(mapping -> new ProjectVersion(
+ this.properties.getVersions().getBomName(), mapping.getVersion()))
+ .filter(ProjectVersion::isReleaseOrServiceRelease)
+ .max(ProjectVersion::compareTo).orElse(new ProjectVersion(
+ this.properties.getVersions().getBomName(), ""));
+ log.info("Latest BOM version is [{}]", springCloudVersion.version);
+ return springCloudVersion;
+ }
+
+ @Override
+ public void setReleaserProperties(ReleaserProperties properties) {
+ this.properties = properties;
+ }
+
+}
+
+class RawGithubRetriever {
+
+ private static final Logger LOG = LoggerFactory.getLogger(RawGithubRetriever.class);
+
+ String raw(String stringUrl) {
+ try {
+ URL url = new URL(stringUrl);
+ URLConnection con = url.openConnection();
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(
+ con.getInputStream(), StandardCharsets.UTF_8))) {
+ return reader.lines().collect(Collectors.joining("\n"));
+ }
+ }
+ catch (IOException e) {
+ LOG.warn("Exception occurred while trying to fetch the URL [" + stringUrl
+ + "] contents");
+ return null;
+ }
+ }
+
+}
+
+class ToPropertiesConverter {
+
+ private static final Map CACHE = new ConcurrentHashMap<>();
+
+ private final RawGithubRetriever rawGithubRetriever;
+
+ ToPropertiesConverter(RawGithubRetriever rawGithubRetriever) {
+ this.rawGithubRetriever = rawGithubRetriever;
+ }
+
+ InitializrProperties toProperties(String url) {
+ return CACHE.computeIfAbsent(url, s -> {
+ String retrievedFile = this.rawGithubRetriever.raw(s);
+ if (StringUtils.isEmpty(retrievedFile)) {
+ return null;
+ }
+ YamlPropertiesFactoryBean yamlProcessor = new YamlPropertiesFactoryBean();
+ yamlProcessor.setResources(new InputStreamResource(new ByteArrayInputStream(
+ retrievedFile.getBytes(StandardCharsets.UTF_8))));
+ Properties properties = yamlProcessor.getObject();
+ return new Binder(
+ new MapConfigurationPropertySource(properties.entrySet().stream()
+ .collect(Collectors.toMap(e -> e.getKey().toString(),
+ e -> e.getValue().toString()))))
+ .bind("initializr",
+ InitializrProperties.class)
+ .get();
+ });
+ }
+
+}
diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/post/PostReleaseActionsTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/post/PostReleaseActionsTests.java
index 554f629e..cd355d95 100644
--- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/post/PostReleaseActionsTests.java
+++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/post/PostReleaseActionsTests.java
@@ -45,6 +45,7 @@ import org.springframework.cloud.release.internal.pom.Projects;
import org.springframework.cloud.release.internal.pom.TestPomReader;
import org.springframework.cloud.release.internal.pom.TestUtils;
import org.springframework.cloud.release.internal.project.ProjectBuilder;
+import org.springframework.cloud.release.internal.versions.VersionsFetcher;
import org.springframework.util.FileSystemUtils;
import org.springframework.util.LinkedMultiValueMap;
@@ -91,7 +92,9 @@ public class PostReleaseActionsTests {
ProjectPomUpdater updater = new ProjectPomUpdater(this.properties);
- ProjectBuilder builder = new ProjectBuilder(this.properties);
+ VersionsFetcher versionsFetcher = new VersionsFetcher(properties, updater);
+
+ ProjectBuilder builder = new ProjectBuilder(this.properties, versionsFetcher);
@Before
public void setup() throws Exception {
diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java
index 8ba56b41..29c9d8f0 100644
--- a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java
+++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/project/ProjectBuilderTests.java
@@ -32,8 +32,10 @@ import org.junit.rules.TemporaryFolder;
import org.springframework.boot.test.rule.OutputCapture;
import org.springframework.cloud.release.internal.PomUpdateAcceptanceTests;
import org.springframework.cloud.release.internal.ReleaserProperties;
+import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
import org.springframework.cloud.release.internal.pom.ProjectVersion;
import org.springframework.cloud.release.internal.pom.TestUtils;
+import org.springframework.cloud.release.internal.versions.VersionsFetcher;
import org.springframework.util.FileSystemUtils;
import static org.assertj.core.api.BDDAssertions.then;
@@ -61,7 +63,7 @@ public class ProjectBuilderTests {
}
ProjectBuilder projectBuilder(ReleaserProperties properties) {
- return new ProjectBuilder(properties) {
+ return new ProjectBuilder(properties, versionsFetcher(properties)) {
@Override
ProcessExecutor executor(String workingDir) {
return testExecutor(workingDir);
@@ -123,7 +125,7 @@ public class ProjectBuilderTests {
builder.build(new ProjectVersion("foo", "1.0.0.RC1"));
then(asString(tmpFile("/builder/resolved/resolved.log")))
- .contains("foo -Pmilestone");
+ .contains("foo -Pmilestone").doesNotContain("-Pguides");
}
@Test
@@ -137,7 +139,7 @@ public class ProjectBuilderTests {
builder.build(new ProjectVersion("foo", "1.0.0.RELEASE"));
then(asString(tmpFile("/builder/resolved/resolved.log")))
- .contains("foo -Pcentral");
+ .contains("foo -Pcentral -Pguides");
}
@Test
@@ -278,7 +280,7 @@ public class ProjectBuilderTests {
builder.deploy(new ProjectVersion("foo", "1.0.0.M1"));
then(asString(tmpFile("/builder/resolved/resolved.log")))
- .contains("foo -Pmilestone");
+ .contains("foo -Pmilestone").doesNotContain("-Pguides");
}
@Test
@@ -292,7 +294,7 @@ public class ProjectBuilderTests {
builder.deploy(new ProjectVersion("foo", "1.0.0.RC1"));
then(asString(tmpFile("/builder/resolved/resolved.log")))
- .contains("foo -Pmilestone");
+ .contains("foo -Pmilestone").doesNotContain("-Pguides");
}
@Test
@@ -306,7 +308,7 @@ public class ProjectBuilderTests {
builder.deploy(new ProjectVersion("foo", "1.0.0.RELEASE"));
then(asString(tmpFile("/builder/resolved/resolved.log")))
- .contains("foo -Pcentral");
+ .contains("foo -Pcentral -Pguides");
}
@Test
@@ -320,7 +322,7 @@ public class ProjectBuilderTests {
builder.deploy(new ProjectVersion("foo", "1.0.0.SR1"));
then(asString(tmpFile("/builder/resolved/resolved.log")))
- .contains("foo -Pcentral");
+ .contains("foo -Pcentral -Pguides");
}
@Test
@@ -373,7 +375,8 @@ public class ProjectBuilderTests {
properties.getMaven().setPublishDocsCommands(new String[] { "ls -al", "ls -al" });
properties.setWorkingDir(tmpFile("/builder/resolved").getPath());
TestProcessExecutor executor = testExecutor(properties.getWorkingDir());
- ProjectBuilder builder = new ProjectBuilder(properties) {
+ ProjectBuilder builder = new ProjectBuilder(properties,
+ versionsFetcher(properties)) {
@Override
ProcessExecutor executor(String workingDir) {
return executor;
@@ -387,6 +390,16 @@ public class ProjectBuilderTests {
then(executor.counter).isEqualTo(2);
}
+ private VersionsFetcher versionsFetcher(ReleaserProperties properties) {
+ ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
+ return new VersionsFetcher(properties, pomUpdater) {
+ @Override
+ public boolean isLatestGa(ProjectVersion version) {
+ return true;
+ }
+ };
+ }
+
@Test
public void should_successfully_execute_a_publish_docs_command_with_sys_props_placeholder()
throws Exception {
@@ -396,7 +409,8 @@ public class ProjectBuilderTests {
properties.getMaven().setSystemProperties("-Dhello=world -Dfoo=bar");
properties.setWorkingDir(tmpFile("/builder/resolved").getPath());
TestProcessExecutor executor = testExecutor(properties.getWorkingDir());
- ProjectBuilder builder = new ProjectBuilder(properties) {
+ ProjectBuilder builder = new ProjectBuilder(properties,
+ versionsFetcher(properties)) {
@Override
ProcessExecutor executor(String workingDir) {
return executor;
@@ -418,7 +432,8 @@ public class ProjectBuilderTests {
.setPublishDocsCommands(new String[] { "echo '{{version}}'" });
properties.setWorkingDir(tmpFile("/builder/resolved").getPath());
TestProcessExecutor executor = testExecutor(properties.getWorkingDir());
- ProjectBuilder builder = new ProjectBuilder(properties) {
+ ProjectBuilder builder = new ProjectBuilder(properties,
+ versionsFetcher(properties)) {
@Override
ProcessExecutor executor(String workingDir) {
return executor;
@@ -439,7 +454,8 @@ public class ProjectBuilderTests {
File resolved = tmpFile("/builder/resolved");
properties.setWorkingDir(resolved.getPath());
TestProcessExecutor executor = testExecutor(properties.getWorkingDir());
- ProjectBuilder builder = new ProjectBuilder(properties) {
+ ProjectBuilder builder = new ProjectBuilder(properties,
+ versionsFetcher(properties)) {
@Override
ProcessExecutor executor(String workingDir) {
return executor;
@@ -470,7 +486,8 @@ public class ProjectBuilderTests {
ReleaserProperties properties = new ReleaserProperties();
properties.getMaven().setBuildCommand("exit 1");
properties.setWorkingDir(tmpFile("/builder/unresolved").getPath());
- ProjectBuilder builder = new ProjectBuilder(properties) {
+ ProjectBuilder builder = new ProjectBuilder(properties,
+ versionsFetcher(properties)) {
@Override
ProcessExecutor executor(String workingDir) {
return new ProcessExecutor(properties.getWorkingDir()) {
diff --git a/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/versions/VersionsFetcherTests.java b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/versions/VersionsFetcherTests.java
new file mode 100644
index 00000000..290d17e7
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/test/java/org/springframework/cloud/release/internal/versions/VersionsFetcherTests.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2013-2019 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.release.internal.versions;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.assertj.core.api.BDDAssertions;
+import org.junit.jupiter.api.Test;
+
+import org.springframework.cloud.release.internal.ReleaserProperties;
+import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
+import org.springframework.cloud.release.internal.pom.ProjectVersion;
+
+class VersionsFetcherTests {
+
+ @Test
+ void should_return_true_when_current_version_is_the_latest_ga()
+ throws URISyntaxException {
+ ProjectVersion projectVersion = new ProjectVersion("spring-cloud-contract",
+ "2.5.0.RELEASE");
+ URI initilizrUri = VersionsFetcherTests.class.getResource("/raw/initializr.yml")
+ .toURI();
+ ReleaserProperties properties = new ReleaserProperties();
+ properties.getVersions().setAllVersionsFileUrl(initilizrUri.toString());
+ properties.getGit().setReleaseTrainBomUrl(
+ file("/projects/spring-cloud-release/").toURI().toString());
+ ProjectPomUpdater updater = new ProjectPomUpdater(properties);
+ VersionsFetcher versionsFetcher = new VersionsFetcher(properties, updater);
+
+ boolean latestGa = versionsFetcher.isLatestGa(projectVersion);
+
+ BDDAssertions.then(latestGa).isTrue();
+ }
+
+ @Test
+ void should_return_false_when_current_version_is_not_the_latest_ga()
+ throws URISyntaxException {
+ ProjectVersion projectVersion = new ProjectVersion("spring-cloud-contract",
+ "1.0.0.RELEASE");
+ URI initilizrUri = VersionsFetcherTests.class.getResource("/raw/initializr.yml")
+ .toURI();
+ ReleaserProperties properties = new ReleaserProperties();
+ properties.getVersions().setAllVersionsFileUrl(initilizrUri.toString());
+ properties.getGit().setReleaseTrainBomUrl(
+ file("/projects/spring-cloud-release/").toURI().toString());
+ ProjectPomUpdater updater = new ProjectPomUpdater(properties);
+ VersionsFetcher versionsFetcher = new VersionsFetcher(properties, updater);
+
+ boolean latestGa = versionsFetcher.isLatestGa(projectVersion);
+
+ BDDAssertions.then(latestGa).isTrue();
+ }
+
+ @Test
+ void should_return_false_when_current_version_is_not_present_in_the_bom()
+ throws URISyntaxException {
+ ProjectVersion projectVersion = new ProjectVersion("spring-cloud-non-existant",
+ "1.0.0.RELEASE");
+ URI initilizrUri = VersionsFetcherTests.class.getResource("/raw/initializr.yml")
+ .toURI();
+ ReleaserProperties properties = new ReleaserProperties();
+ properties.getVersions().setAllVersionsFileUrl(initilizrUri.toString());
+ properties.getGit().setReleaseTrainBomUrl(
+ file("/projects/spring-cloud-release/").toURI().toString());
+ ProjectPomUpdater updater = new ProjectPomUpdater(properties);
+ VersionsFetcher versionsFetcher = new VersionsFetcher(properties, updater);
+
+ boolean latestGa = versionsFetcher.isLatestGa(projectVersion);
+
+ BDDAssertions.then(latestGa).isFalse();
+ }
+
+ @Test
+ void should_return_false_when_current_version_is_not_ga() {
+ ProjectVersion projectVersion = new ProjectVersion("spring-cloud-contract",
+ "1.0.0.BUILD-SNAPSHOT");
+ ReleaserProperties properties = new ReleaserProperties();
+ ProjectPomUpdater updater = new ProjectPomUpdater(properties);
+ VersionsFetcher versionsFetcher = new VersionsFetcher(properties, updater);
+
+ boolean latestGa = versionsFetcher.isLatestGa(projectVersion);
+
+ BDDAssertions.then(latestGa).isFalse();
+ }
+
+ private File file(String relativePath) throws URISyntaxException {
+ return new File(VersionsFetcherTests.class.getResource(relativePath).toURI());
+ }
+
+}
diff --git a/spring-cloud-release-tools-core/src/test/resources/raw/initializr.yml b/spring-cloud-release-tools-core/src/test/resources/raw/initializr.yml
new file mode 100644
index 00000000..d21db668
--- /dev/null
+++ b/spring-cloud-release-tools-core/src/test/resources/raw/initializr.yml
@@ -0,0 +1,1266 @@
+local:
+ gcp:
+ version: 1.1.0.M3
+
+logging:
+ level:
+ org.springframework.core.env: warn
+ org.springframework.jndi: warn
+
+server:
+ compression:
+ enabled: true
+ mime-types: application/json,text/css,text/html
+ min-response-size: 2048
+ use-forward-headers: true
+
+spring:
+ jackson:
+ serialization:
+ write-dates-as-timestamps: false
+ task:
+ execution:
+ thread-name-prefix: initializr-
+ resources:
+ chain:
+ strategy:
+ content:
+ enabled: true
+
+initializr:
+ env:
+ boms:
+ azure:
+ groupId: com.microsoft.azure
+ artifactId: azure-spring-boot-bom
+ versionProperty: azure.version
+ mappings:
+ - versionRange: "[1.5.4.RELEASE,2.0.0.RELEASE)"
+ version: 0.2.4
+ - versionRange: "[2.0.0.RELEASE,2.1.0.RELEASE)"
+ version: 2.0.10
+ - versionRange: "2.1.0.RELEASE"
+ version: 2.1.2
+ codecentric-spring-boot-admin:
+ groupId: de.codecentric
+ artifactId: spring-boot-admin-dependencies
+ versionProperty: spring-boot-admin.version
+ mappings:
+ - versionRange: "[1.5.9.RELEASE,2.0.0.M1)"
+ version: 1.5.7
+ - versionRange: "[2.0.0.M1,2.1.0.M1)"
+ version: 2.0.6
+ - versionRange: "[2.1.0.M1,2.2.0.M1)"
+ version: 2.1.4
+ spring-cloud:
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-dependencies
+ versionProperty: spring-cloud.version
+ order: 50
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,1.5.x.RELEASE]"
+ version: Brixton.SR5
+ - versionRange: "[1.5.x.BUILD-SNAPSHOT,2.0.0.M1)"
+ version: Brixton.BUILD-SNAPSHOT
+ repositories: spring-snapshots,spring-milestones
+ - versionRange: "[2.0.0.M3, 2.0.0.M5)"
+ version: Camden.M2
+ repositories: spring-milestones
+ - versionRange: "[2.0.0.M5, 2.0.0.M5]"
+ version: Camden.SR4
+ repositories: spring-milestones
+ spring-cloud-services:
+ groupId: io.pivotal.spring.cloud
+ artifactId: spring-cloud-services-dependencies
+ versionProperty: spring-cloud-services.version
+ additionalBoms: [spring-cloud]
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,1.5.x.BUILD-SNAPSHOT]"
+ version: 1.6.6.RELEASE
+ - versionRange: "[2.0.0.RELEASE,2.0.x.BUILD-SNAPSHOT]"
+ version: 2.0.3.RELEASE
+ - versionRange: "2.1.0.RELEASE"
+ version: 2.1.2.RELEASE
+ spring-statemachine:
+ groupId: org.springframework.statemachine
+ artifactId: spring-statemachine-bom
+ versionProperty: spring-statemachine.version
+ mappings:
+ - versionRange: "[2.0.0.RC1,2.0.0.RC1]"
+ version: 2.0.0.M4
+ repositories: spring-milestones
+ - versionRange: "[2.0.0.RC2,2.0.0.RC2]"
+ version: 2.0.0.M5
+ repositories: spring-milestones
+ - versionRange: "2.0.0.RELEASE"
+ version: 2.0.1.RELEASE
+ vaadin:
+ groupId: com.vaadin
+ artifactId: vaadin-bom
+ versionProperty: vaadin.version
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ version: 8.7.2
+ - versionRange: "[2.0.0.M1,2.1.0.M1)"
+ version: 10.0.13
+ - versionRange: "2.1.0.M1"
+ version: 13.0.4
+ gradle:
+ dependency-management-plugin-version: 0.6.0.RELEASE
+ kotlin:
+ default-version: 1.3.30
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ version: 1.2.51
+ - versionRange: "[2.0.0.M1,2.2.0.M1)"
+ version: 1.2.71
+ repositories:
+ sonatype-snapshots:
+ name: Sonatype Snapshots
+ url: https://oss.sonatype.org/content/repositories/snapshots/
+ snapshotsEnabled: true
+ dependencies:
+ - name: Core
+ content:
+ - name: DevTools
+ id: devtools
+ groupId: org.springframework.boot
+ artifactId: spring-boot-devtools
+ scope: runtime
+ description: Spring Boot Development Tools
+ versionRange: 1.3.0.RELEASE
+ starter: false
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#using-boot-devtools
+ - name: Lombok
+ id: lombok
+ groupId: org.projectlombok
+ artifactId: lombok
+ scope: annotationProcessor
+ description: Java annotation library which helps to reduce boilerplate code and code faster
+ starter: false
+ - name: Configuration Processor
+ id: configuration-processor
+ groupId: org.springframework.boot
+ artifactId: spring-boot-configuration-processor
+ scope: annotationProcessor
+ description: Generate metadata for your custom configuration keys
+ versionRange: 1.2.0.RELEASE
+ starter: false
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#configuration-metadata-annotation-processor
+ - name: Session
+ id: session
+ groupId: org.springframework.session
+ artifactId: spring-session-core
+ description: API and implementations for managing a user’s session information
+ starter: false
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,2.0.0.M2]"
+ artifactId: spring-session
+ - name: Cache
+ id: cache
+ description: Spring's Cache abstraction
+ 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
+ - name: Validation
+ id: validation
+ description: JSR-303 validation infrastructure (already included with web)
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/validating-form-input/
+ description: Validating Form Input
+ - name: Retry
+ id: retry
+ groupId: org.springframework.retry
+ artifactId: spring-retry
+ description: Provide declarative retry support via spring-retry
+ starter: false
+ - name: Aspects
+ id: aop
+ description: Create your own Aspects using Spring AOP and AspectJ
+ - name: Web
+ content:
+ - name: Web
+ id: web
+ description: Servlet web application with Spring MVC and Tomcat
+ weight: 100
+ facets:
+ - web
+ - json
+ 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
+ - 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: Reactive Web
+ id: webflux
+ versionRange: 2.0.0.M1
+ description: Reactive web applications with Spring WebFlux and Netty
+ weight: 90
+ facets:
+ - json
+ - name: Rest Repositories
+ id: data-rest
+ weight: 10
+ facets:
+ - json
+ description: Exposing Spring Data repositories over REST via Spring Data REST
+ 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
+ - name: Rest Repositories HAL Browser
+ id: data-rest-hal
+ description: Browsing Spring Data REST repositories in your browser
+ groupId: org.springframework.data
+ artifactId: spring-data-rest-hal-browser
+ - name: HATEOAS
+ id: hateoas
+ description: HATEOAS-based RESTful services
+ 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
+ starter: false
+ - name: Web Services
+ id: web-services
+ description: Contract-first SOAP services with Spring Web Services
+ aliases:
+ - ws
+ 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
+ - name: Jersey
+ id: jersey
+ description: RESTful Web Services with JAX-RS
+ facets:
+ - json
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-jersey
+ - name: REST Docs
+ id: restdocs
+ description: Document RESTful services by combining hand-written and auto-generated documentation
+ groupId: org.springframework.restdocs
+ artifactId: spring-restdocs-mockmvc
+ scope: test
+ - name: Vaadin
+ id: vaadin
+ facets:
+ - web
+ groupId: com.vaadin
+ artifactId: vaadin-spring-boot-starter
+ description: Vaadin java web application framework
+ bom: vaadin
+ 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: Apache CXF
+ id: cxf-jaxrs
+ groupId: org.apache.cxf
+ artifactId: cxf-spring-boot-starter-jaxrs
+ version: 3.2.5
+ description: RESTful Web Services with JAX-RS
+ versionRange: "[1.5.0.RELEASE,2.1.0.M1)"
+ links:
+ - rel: reference
+ href: https://cxf.apache.org/docs/springboot.html#SpringBoot-SpringBootCXFJAX-RSStarter
+ - name: Ratpack
+ id: ratpack
+ description: Spring Boot integration for the Ratpack framework
+ groupId: io.ratpack
+ artifactId: ratpack-spring-boot
+ version: 1.1.1
+ versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ starter: false
+ - name: Mobile
+ id: mobile
+ description: Simplify the development of mobile web applications with Spring Mobile
+ versionRange : "[1.5.0.RELEASE, 2.0.0.M1)"
+ - name: Template Engines
+ content:
+ - name: Thymeleaf
+ id: thymeleaf
+ description: Thymeleaf templating engine
+ weight: 90
+ keywords:
+ - template
+ 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
+ - name: Freemarker
+ id: freemarker
+ description: FreeMarker templating engine
+ keywords:
+ - template
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines
+ - name: Mustache
+ id: mustache
+ description: Mustache templating engine
+ keywords:
+ - template
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines
+ - name: Groovy Templates
+ id: groovy-templates
+ description: Groovy templating engine
+ facets:
+ - web
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines
+ - name: Security
+ content:
+ - name: Security
+ id: security
+ description: Secure your application via spring-security
+ weight: 100
+ 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
+ - name: OAuth2 Client
+ id: oauth2-client
+ description: Spring Boot integration for Spring Security's OAuth2/OpenID Connect client features
+ versionRange: 2.0.0.M5
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-security-oauth2-client
+ - name: OAuth2 Resource Server
+ id: oauth2-resource-server
+ description: Spring Boot integration for Spring Security's OAuth2 resource server features
+ versionRange: 2.1.0.M2
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-security-oauth2-server
+ - name: Okta
+ id: okta
+ description: Okta specific configuration for Spring Security/Spring Boot OAuth2 features
+ groupId: com.okta.spring
+ artifactId: okta-spring-boot-starter
+ versionRange: 2.1.2.RELEASE
+ version: 1.1.0
+ links:
+ - rel: guide
+ href: https://github.com/okta/samples-java-spring/tree/master/okta-hosted-login
+ - rel: guide
+ href: https://github.com/okta/samples-java-spring/tree/master/custom-login
+ - rel: guide
+ href: https://github.com/okta/samples-java-spring/tree/master/resource-server
+ - rel: reference
+ href: https://github.com/okta/okta-spring-boot/blob/master/README.md
+ - name: SQL
+ content:
+ - name: JPA
+ id: data-jpa
+ description: Persist data in SQL stores with Java Persistence API using Spring Data and Hibernate
+ weight: 100
+ facets:
+ - jpa
+ aliases:
+ - jpa
+ 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
+ - name: MySQL
+ id: mysql
+ description: MySQL JDBC driver
+ groupId: mysql
+ artifactId: mysql-connector-java
+ scope: runtime
+ starter: false
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/accessing-data-mysql/
+ description: Accessing data with MySQL
+ - name: H2
+ id: h2
+ description: H2 database (with embedded support)
+ groupId: com.h2database
+ artifactId: h2
+ scope: runtime
+ starter: false
+ - name: JDBC
+ id: jdbc
+ description: Persistence support using JDBC
+ 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
+ - name: MyBatis
+ id: mybatis
+ description: Persistence support using MyBatis
+ links:
+ - rel: guide
+ href: https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start
+ description: Quick Start
+ - rel: reference
+ href: http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
+ groupId: org.mybatis.spring.boot
+ artifactId: mybatis-spring-boot-starter
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,2.0.0.RELEASE)"
+ version: 1.3.4
+ - versionRange: 2.0.0.RELEASE
+ version: 2.0.1
+ - name: PostgreSQL
+ id: postgresql
+ description: PostgreSQL JDBC driver
+ groupId: org.postgresql
+ artifactId: postgresql
+ scope: runtime
+ starter: false
+ - name: SQL Server
+ id: sqlserver
+ description: Microsoft SQL Server JDBC driver
+ groupId: com.microsoft.sqlserver
+ artifactId: mssql-jdbc
+ scope: runtime
+ starter: false
+ - name: HSQLDB
+ id: hsql
+ description: HSQLDB database (with embedded support)
+ groupId: org.hsqldb
+ artifactId: hsqldb
+ scope: runtime
+ starter: false
+ - name: Apache Derby
+ id: derby
+ description: Apache Derby database (with embedded support)
+ groupId: org.apache.derby
+ artifactId: derby
+ scope: runtime
+ starter: false
+ - name: Liquibase
+ id: liquibase
+ description: Liquibase Database Migrations library
+ groupId: org.liquibase
+ artifactId: liquibase-core
+ starter: false
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-execute-liquibase-database-migrations-on-startup
+ - name: Flyway
+ id: flyway
+ description: Flyway Database Migrations library
+ groupId: org.flywaydb
+ artifactId: flyway-core
+ starter: false
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-execute-flyway-database-migrations-on-startup
+ - name: JOOQ
+ id: jooq
+ description: Persistence support using Java Object Oriented Querying
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-jooq
+ - name: NoSQL
+ content:
+ - name: Redis
+ id: data-redis
+ description: Access Redis key-value data stores with Spring Data Redis
+ aliases:
+ - redis
+ 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
+ - name: Reactive Redis
+ id: data-redis-reactive
+ description: Access Redis key-value data stores in a reactive fashion with Spring Data Redis
+ versionRange: 2.0.0.M7
+ 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
+ - name: MongoDB
+ id: data-mongodb
+ description: Access MongoDB NoSQL Database with Spring Data MongoDB
+ weight: 50
+ 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
+ - name: Reactive MongoDB
+ id: data-mongodb-reactive
+ description: Access MongoDB NoSQL Database in a reactive fashion with Spring Data MongoDB
+ versionRange: 2.0.0.M1
+ weight: 50
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-mongodb
+ - name: Embedded MongoDB
+ id: flapdoodle-mongo
+ description: Embedded MongoDB for testing
+ groupId: de.flapdoodle.embed
+ artifactId: de.flapdoodle.embed.mongo
+ scope: test
+ starter: false
+ - name: Elasticsearch
+ id: data-elasticsearch
+ description: Elasticsearch search and analytics engine with Spring Data Elasticsearch
+ weight: 10
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-elasticsearch
+ - name: Solr
+ id: data-solr
+ description: Access Apache Solr search platform with Spring Data Solr
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-solr
+ - name: Cassandra
+ id: data-cassandra
+ description: Access Cassandra NoSQL Database with Spring Data Cassandra
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-cassandra
+ - name: Reactive Cassandra
+ id: data-cassandra-reactive
+ description: Access Cassandra NoSQL Database in a reactive fashion with Spring Data Cassandra
+ versionRange: 2.0.0.M1
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-cassandra
+ - name: Couchbase
+ id: data-couchbase
+ description: Access Couchbase NoSQL database with Spring Data Couchbase
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-couchbase
+ - name: Reactive Couchbase
+ id: data-couchbase-reactive
+ description: Access Couchbase NoSQL database in a reactive fashion with Spring Data Couchbase
+ versionRange: 2.0.0.M7
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-couchbase
+ - name: Neo4j
+ id: data-neo4j
+ description: Access Neo4j NoSQL graph database with Spring Data Neo4j
+ 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
+ - name: Gemfire
+ id: data-gemfire
+ description: Access GemFire distributed data store with Spring Data Gemfire
+ versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/accessing-data-gemfire/
+ description: Accessing Data with GemFire
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-gemfire
+ - name: Messaging
+ content:
+ - name: Spring Integration
+ id: integration
+ description: Common spring-integration modules
+ weight: 100
+ 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
+ - name: RabbitMQ
+ id: amqp
+ description: Advanced Message Queuing Protocol via Spring Rabbit
+ weight: 100
+ keywords:
+ - messaging
+ 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
+ - name: Kafka
+ id: kafka
+ weight: 100
+ description: Kafka messaging support using Spring Kafka
+ versionRange: 1.5.0.RELEASE
+ groupId: org.springframework.kafka
+ artifactId: spring-kafka
+ starter: false
+ keywords:
+ - messaging
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-kafka
+ - name: Kafka Streams
+ id: kafka-streams
+ weight: 90
+ description: Building stream processing applications with Apache Kafka Streams
+ versionRange: 2.0.0.RELEASE
+ groupId: org.apache.kafka
+ artifactId: 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 Kafka Streams with Spring Cloud stream
+ - rel: reference
+ href: https://docs.spring.io/spring-kafka/docs/current/reference/html/_reference.html#kafka-streams
+ description: Kafka Streams Support in Spring Kafka
+ - rel: reference
+ href: https://docs.spring.io/spring-cloud-stream/docs/current/reference/htmlsingle/#_kafka_streams_binding_capabilities_of_spring_cloud_stream
+ description: Kafka Streams Binding Capabilities of Spring Cloud Stream
+ - name: JMS (ActiveMQ)
+ id: activemq
+ description: Java Message Service API via Apache ActiveMQ
+ 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-activemq
+ - name: JMS (Artemis)
+ id: artemis
+ description: Java Message Service API via Apache Artemis
+ 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
+ - name: WebSocket
+ id: websocket
+ description: WebSocket applications with SockJS and STOMP
+ 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
+ - name: RSocket
+ id: rsocket
+ versionRange: 2.2.0.M2
+ description: RSocket.io applications with Spring Messaging and Netty
+ - name: Cloud Core
+ bom: spring-cloud
+ content:
+ - name: Cloud Bootstrap
+ id: cloud-starter
+ description: spring-cloud-context (e.g. Bootstrap context and @RefreshScope)
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter
+ weight: 100
+ - name: Cloud Function
+ id: cloud-function
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-function-context
+ description: Functions as Spring Beans
+ versionRange: 2.0.2.RELEASE
+ 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: Cloud Security
+ id: cloud-security
+ description: Secure load balancing and routing with spring-cloud-security
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-security
+ - name: Cloud OAuth2
+ id: cloud-oauth2
+ description: OAuth2 and distributed application patterns with spring-cloud-security
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-oauth2
+ - name: Cloud Task
+ id: cloud-task
+ description: Task result tracking with Spring Batch and Spring Cloud Stream integrations
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-task
+ starter: false
+ - name: Cloud Support
+ content:
+ - name: Cloud Connectors
+ id: cloud-connectors
+ description: Simplifies connecting to services in cloud platforms, including spring-cloud-connector and spring-cloud-cloudfoundry-connector
+ - name: Open Service Broker
+ id: open-service-broker
+ description: Create service brokers that conform to the Open Service Broker API specification
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-open-service-broker-webmvc
+ versionRange: 2.0.0.RELEASE
+ version: 2.1.1.RELEASE
+ 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: Cloud Config
+ bom: spring-cloud
+ content:
+ - name: Config Client
+ id: cloud-config-client
+ description: Spring Cloud Config Client
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-config
+ weight: 100
+ - name: Config Server
+ id: cloud-config-server
+ description: Central management for configuration via a git or svn backend
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-config-server
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/centralized-configuration/
+ description: Centralized Configuration
+ - name: Vault Configuration
+ id: cloud-starter-vault-config
+ description: Configuration management with HashiCorp Vault
+ versionRange: 1.5.3.RELEASE
+ starter: false
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-vault-config
+ - name: Zookeeper Configuration
+ id: cloud-starter-zookeeper-config
+ description: Configuration management with Zookeeper and spring-cloud-zookeeper-config
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-zookeeper-config
+ - name: Consul Configuration
+ id: cloud-starter-consul-config
+ description: Configuration management with Hashicorp Consul
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-consul-config
+ - name: Cloud Discovery
+ bom: spring-cloud
+ content:
+ - name: Eureka Discovery
+ id: cloud-eureka
+ description: Service discovery using spring-cloud-netflix and Eureka
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-eureka-client
+ weight: 100
+ - name: Eureka Server
+ id: cloud-eureka-server
+ description: spring-cloud-netflix Eureka Server
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-eureka-server
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/service-registration-and-discovery/
+ description: Service Registration and Discovery
+ - name: Zookeeper Discovery
+ id: cloud-starter-zookeeper-discovery
+ description: Service discovery with Zookeeper and spring-cloud-zookeeper-discovery
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-zookeeper-discovery
+ - name: Cloud Foundry Discovery
+ id: cloud-cloudfoundry-discovery
+ description: Service discovery with Cloud Foundry
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-cloudfoundry-discovery
+ - name: Consul Discovery
+ id: cloud-starter-consul-discovery
+ description: Service discovery with Hashicorp Consul
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-consul-discovery
+ - name: Cloud Routing
+ bom: spring-cloud
+ content:
+ - name: Zuul
+ id: cloud-zuul
+ description: Intelligent and programmable routing with spring-cloud-netflix Zuul
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-zuul
+ 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
+ description: Intelligent and programmable routing with the reactive Spring Cloud Gateway
+ versionRange: 2.0.0.M5
+ links:
+ - rel: guide
+ href: https://github.com/spring-cloud-samples/spring-cloud-gateway-sample
+ description: Using Spring Cloud Gateway
+ - name: Ribbon
+ id: cloud-ribbon
+ description: Client side load balancing with spring-cloud-netflix and Ribbon
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-ribbon
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/client-side-load-balancing/
+ description: Client Side Load Balancing with Ribbon and Spring Cloud
+ - name: Feign
+ id: cloud-feign
+ description: Declarative REST clients with spring-cloud-netflix Feign
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-openfeign
+ - name: Cloud Circuit Breaker
+ bom: spring-cloud
+ content:
+ - name: Hystrix
+ id: cloud-hystrix
+ description: Circuit breaker with spring-cloud-netflix Hystrix
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-hystrix
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/circuit-breaker/
+ description: Circuit Breaker
+ - name: Hystrix Dashboard
+ id: cloud-hystrix-dashboard
+ description: Circuit breaker dashboard with spring-cloud-netflix Hystrix
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-hystrix-dashboard
+ - name: Turbine
+ id: cloud-turbine
+ description: Circuit breaker metric aggregation using spring-cloud-netflix with Turbine and server-sent events
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-turbine
+ - name: Turbine Stream
+ id: cloud-turbine-stream
+ description: Circuit breaker metric aggregation using spring-cloud-netflix with Turbine and Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ)
+ versionRange: 1.3.0.RELEASE
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-turbine-stream
+ weight: -1
+ - name: Cloud Tracing
+ bom: spring-cloud
+ content:
+ - name: Sleuth
+ id: cloud-starter-sleuth
+ description: Distributed tracing via logs with spring-cloud-sleuth
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-sleuth
+ - name: Zipkin Client
+ id: cloud-starter-zipkin
+ description: Distributed tracing with an existing Zipkin installation and spring-cloud-sleuth-zipkin. Alternatively, consider Sleuth Stream.
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-zipkin
+ - name: Cloud Messaging
+ bom: spring-cloud
+ content:
+ - name: Cloud Bus
+ id: cloud-bus
+ description: A simple control bus using Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ)
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-bus
+ - name: Cloud Stream
+ id: cloud-stream
+ description: Messaging microservices with Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ)
+ weight: 90
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-stream
+ - name: Reactive Cloud Stream
+ id: reactive-cloud-stream
+ description: Reactive messaging microservices with Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ)
+ versionRange: 2.0.0.RC2
+ weight: 90
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-stream-reactive
+ - name: Cloud Contract
+ bom: spring-cloud
+ content:
+ - name: Cloud Contract Verifier
+ id: cloud-contract-verifier
+ description: Test dependencies required for autogenerated tests
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-contract-verifier
+ scope: test
+ starter: false
+ - name: Cloud Contract Stub Runner
+ id: cloud-contract-stub-runner
+ description: Stub Runner for HTTP/Messaging based communication. Allows creating WireMock stubs from RestDocs tests
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-contract-stub-runner
+ scope: test
+ starter: false
+ - name: Pivotal Cloud Foundry
+ bom: spring-cloud-services
+ content:
+ - name: Config Client (PCF)
+ id: scs-config-client
+ description: Config client on Pivotal Cloud Foundry
+ groupId: io.pivotal.spring.cloud
+ artifactId: spring-cloud-services-starter-config-client
+ links:
+ - rel: reference
+ href: https://docs.pivotal.io/spring-cloud-services/
+ description: Reference doc
+ - name: Service Registry Client (PCF)
+ id: scs-service-registry
+ description: Eureka service discovery client on Pivotal Cloud Foundry
+ groupId: io.pivotal.spring.cloud
+ artifactId: spring-cloud-services-starter-service-registry
+ links:
+ - rel: reference
+ href: https://docs.pivotal.io/spring-cloud-services/
+ description: Reference doc
+ - name: Circuit Breaker Client (PCF)
+ id: scs-circuit-breaker
+ description: Hystrix circuit breaker client on Pivotal Cloud Foundry
+ groupId: io.pivotal.spring.cloud
+ artifactId: spring-cloud-services-starter-circuit-breaker
+ links:
+ - rel: reference
+ href: https://docs.pivotal.io/spring-cloud-services/
+ description: Reference doc
+ - name: Amazon Web Services
+ bom: spring-cloud
+ content:
+ - name: AWS Core
+ id: cloud-aws
+ description: AWS native services from spring-cloud-aws
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-aws
+ - name: AWS JDBC
+ id: cloud-aws-jdbc
+ description: Relational databases on AWS with RDS and spring-cloud-aws-jdbc
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-aws-jdbc
+ - name: AWS Messaging
+ id: cloud-aws-messaging
+ description: Messaging on AWS with SQS and spring-cloud-aws-messaging
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-aws-messaging
+ - name: Azure
+ bom: azure
+ versionRange: "1.5.4.RELEASE"
+ content:
+ - name: Azure Support
+ id: azure-support
+ groupId: com.microsoft.azure
+ artifactId: azure-spring-boot-starter
+ description: Auto-configuration for Azure Services (service bus, storage, active directory, cosmos DB, key vault and more)
+ links:
+ - rel: reference
+ href: https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot
+ description: Reference doc
+ - name: Azure Active Directory
+ id: azure-active-directory
+ groupId: com.microsoft.azure
+ artifactId: azure-active-directory-spring-boot-starter
+ description: Spring Security integration with Azure Active Directory for authentication
+ 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
+ description: Reference doc
+ - name: Azure Key Vault
+ id: azure-keyvault-secrets
+ groupId: com.microsoft.azure
+ artifactId: azure-keyvault-secrets-spring-boot-starter
+ description: Spring value annotation integration with Azure Key Vault Secrets
+ 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
+ description: Reference doc
+ - name: Azure Storage
+ id: azure-storage
+ groupId: com.microsoft.azure
+ artifactId: azure-storage-spring-boot-starter
+ description: Azure Storage service integration
+ 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
+ description: Reference doc
+ - name: Google Cloud Platform
+ bom: spring-cloud
+ versionRange: 2.0.0.RELEASE
+ content:
+ - name: GCP Support
+ id: cloud-gcp
+ description: Support for Google Cloud Platform services
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-gcp-starter
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-cloud-gcp/docs/${local.gcp.version}/reference/htmlsingle/
+ description: Reference doc
+ - rel: guide
+ href: https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples
+ description: Samples
+ - name: GCP Messaging
+ id: cloud-gcp-pubsub
+ description: Publish to and subcribe from Google Cloud Pub/Sub topics
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-gcp-starter-pubsub
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-cloud-gcp/docs/${local.gcp.version}/reference/htmlsingle/#_spring_cloud_gcp_for_pub_sub
+ description: Reference doc
+ - rel: guide
+ href: https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample
+ description: Sample
+ - name: GCP Storage
+ id: cloud-gcp-storage
+ description: Access Google Cloud Storage objects
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-gcp-starter-storage
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-cloud-gcp/docs/${local.gcp.version}/reference/htmlsingle/#_spring_resources
+ description: Reference doc
+ - rel: guide
+ href: https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample
+ description: Sample
+ - name: I/O
+ content:
+ - name: Batch
+ id: batch
+ description: Spring Batch support
+ weight: 100
+ 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
+ - name: Mail
+ id: mail
+ description: Send email using Java Mail and Spring Framework's JavaMailSender
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-email
+ - name: Apache Camel
+ id: camel
+ versionRange: "1.5.0.RELEASE"
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ version: 2.21.5
+ - versionRange: "[2.0.0.M1,2.1.0.M1)"
+ version: 2.22.4
+ - versionRange: "2.1.0.M1"
+ version: 2.23.2
+ description: Integration using Apache Camel
+ groupId: org.apache.camel
+ artifactId: camel-spring-boot-starter
+ links:
+ - rel: guide
+ href: https://camel.apache.org/spring-boot
+ description: Using Apache Camel with Spring Boot
+ - name: LDAP
+ id: data-ldap
+ description: LDAP support, including spring-data-ldap
+ versionRange: 1.5.0.RELEASE
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-ldap
+ - name: Quartz Scheduler
+ id: quartz
+ versionRange: 2.0.0.M2
+ description: Schedule jobs using Quartz
+ - name: Spring Shell
+ id: spring-shell
+ groupId: org.springframework.shell
+ artifactId: spring-shell-starter
+ description: Build shell-based clients
+ version: 2.0.0.RELEASE
+ repository: spring-milestones
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-shell/docs/2.0.0.M2/reference/htmlsingle/
+ - name: Statemachine
+ id: statemachine
+ groupId: org.springframework.statemachine
+ artifactId: spring-statemachine-starter
+ description: Build applications using state machine concepts
+ versionRange: 2.0.0.RC1
+ bom: spring-statemachine
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-statemachine/docs/current-SNAPSHOT/reference/htmlsingle/
+ - rel: guide
+ href: https://docs.spring.io/spring-statemachine/docs/current-SNAPSHOT/reference/htmlsingle/#developing-your-first-spring-statemachine-application
+ description: Developing your first Spring Statemachine application
+ - name: Ops
+ content:
+ - name: Actuator
+ id: actuator
+ description: Production ready features to help you monitor and manage your application
+ 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
+ - name: Spring Boot Admin (Server)
+ id: codecentric-spring-boot-admin-server
+ groupId: de.codecentric
+ artifactId: spring-boot-admin-starter-server
+ description: An admin interface for Spring Boot applications
+ versionRange: "[1.5.9.RELEASE,2.2.0.M1)"
+ bom: codecentric-spring-boot-admin
+ links:
+ - rel: reference
+ href: https://codecentric.github.io/spring-boot-admin/current/#getting-started
+ - name: Spring Boot Admin (Client)
+ id: codecentric-spring-boot-admin-client
+ groupId: de.codecentric
+ artifactId: spring-boot-admin-starter-client
+ description: Register your application with a Spring Boot Admin instance
+ versionRange: "[1.5.9.RELEASE,2.2.0.M1)"
+ bom: codecentric-spring-boot-admin
+ links:
+ - rel: reference
+ href: https://codecentric.github.io/spring-boot-admin/current/#getting-started
+ - name: Actuator Docs
+ id: actuator-docs
+ description: API documentation for the Actuator endpoints
+ versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ groupId: org.springframework.boot
+ artifactId: spring-boot-actuator-docs
+ types:
+ - name: Maven Project
+ id: maven-project
+ description: Generate a Maven based project archive
+ tags:
+ build: maven
+ format: project
+ default: true
+ action: /starter.zip
+ - name: Maven POM
+ id: maven-build
+ description: Generate a Maven pom.xml
+ tags:
+ build: maven
+ format: build
+ default: false
+ action: /pom.xml
+ - name: Gradle Project
+ id: gradle-project
+ description: Generate a Gradle based project archive
+ tags:
+ build: gradle
+ format: project
+ default: false
+ action: /starter.zip
+ - name: Gradle Config
+ id: gradle-build
+ description: Generate a Gradle build file
+ tags:
+ build: gradle
+ format: build
+ default: false
+ action: /build.gradle
+ packagings:
+ - name: Jar
+ id: jar
+ default: true
+ - name: War
+ id: war
+ default: false
+ javaVersions:
+ - id: 12
+ default: false
+ - id: 11
+ default: false
+ - id: 1.8
+ name: 8
+ default: true
+ languages:
+ - name: Java
+ id: java
+ default: true
+ - name: Kotlin
+ id: kotlin
+ default: false
+ - name: Groovy
+ id: groovy
+ default: false
+ bootVersions:
+ - name : Latest SNAPSHOT
+ id: 2.2.0.BUILD-SNAPSHOT
+ default: false
+ - name : 2.1.1.
+ id: 2.1.1.RELEASE
+ default: true
+
+---
+
+spring:
+ profiles: dev
+ resources:
+ static_locations:
+ - file:start-client/build/
+ chain:
+ strategy:
+ content:
+ enabled: false
+ devtools:
+ restart:
+ additional_paths:
+ - start-client/build/
+ additional_exclude: "**/*.js,**/*.css"
+
diff --git a/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/ReleaserConfiguration.java b/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/ReleaserConfiguration.java
index 29ed45ad..464c7d6c 100644
--- a/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/ReleaserConfiguration.java
+++ b/spring-cloud-release-tools-spring/src/main/java/org/springframework/cloud/release/internal/spring/ReleaserConfiguration.java
@@ -30,6 +30,7 @@ import org.springframework.cloud.release.internal.project.ProjectBuilder;
import org.springframework.cloud.release.internal.sagan.SaganClient;
import org.springframework.cloud.release.internal.sagan.SaganUpdater;
import org.springframework.cloud.release.internal.template.TemplateGenerator;
+import org.springframework.cloud.release.internal.versions.VersionsFetcher;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
@@ -55,8 +56,8 @@ class ReleaserConfiguration {
}
@Bean
- ProjectBuilder projectBuilder() {
- return new ProjectBuilder(this.properties);
+ ProjectBuilder projectBuilder(VersionsFetcher versionsFetcher) {
+ return new ProjectBuilder(this.properties, versionsFetcher);
}
@Bean
@@ -64,6 +65,11 @@ class ReleaserConfiguration {
return new ProjectPomUpdater(this.properties);
}
+ @Bean
+ VersionsFetcher versionsFetcher(ProjectPomUpdater updater) {
+ return new VersionsFetcher(this.properties, updater);
+ }
+
@Bean
ProjectGitHandler projectGitHandler() {
return new ProjectGitHandler(this.properties);
diff --git a/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/AcceptanceTests.java b/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/AcceptanceTests.java
index 24090865..61e71036 100644
--- a/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/AcceptanceTests.java
+++ b/spring-cloud-release-tools-spring/src/test/java/org/springframework/cloud/release/internal/spring/AcceptanceTests.java
@@ -18,6 +18,7 @@ package org.springframework.cloud.release.internal.spring;
import java.io.File;
import java.io.IOException;
+import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.util.ArrayList;
@@ -64,6 +65,7 @@ import org.springframework.cloud.release.internal.sagan.Release;
import org.springframework.cloud.release.internal.sagan.SaganClient;
import org.springframework.cloud.release.internal.sagan.SaganUpdater;
import org.springframework.cloud.release.internal.template.TemplateGenerator;
+import org.springframework.cloud.release.internal.versions.VersionsFetcher;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.util.FileSystemUtils;
@@ -694,7 +696,8 @@ public class AcceptanceTests {
private Releaser defaultReleaser(String expectedVersion, String projectName,
ReleaserProperties properties) {
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
- ProjectBuilder projectBuilder = new ProjectBuilder(properties);
+ VersionsFetcher versionsFetcher = new VersionsFetcher(properties, pomUpdater);
+ ProjectBuilder projectBuilder = new ProjectBuilder(properties, versionsFetcher);
TestProjectGitHandler handler = new TestProjectGitHandler(properties,
expectedVersion, projectName);
TemplateGenerator templateGenerator = new TemplateGenerator(properties, handler);
@@ -724,7 +727,8 @@ public class AcceptanceTests {
private Releaser defaultMetaReleaser(ReleaserProperties properties) {
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
- ProjectBuilder projectBuilder = new ProjectBuilder(properties);
+ VersionsFetcher versionsFetcher = new VersionsFetcher(properties, pomUpdater);
+ ProjectBuilder projectBuilder = new ProjectBuilder(properties, versionsFetcher);
NonAssertingTestProjectGitHandler handler = new NonAssertingTestProjectGitHandler(
properties);
TemplateGenerator templateGenerator = Mockito
@@ -781,6 +785,9 @@ public class AcceptanceTests {
.setSpringProjectUrl(tmpFile("spring-cloud").getAbsolutePath() + "/");
releaserProperties.getGit().setReleaseTrainWikiUrl(
tmpFile("spring-cloud-wiki").getAbsolutePath() + "/");
+ URI initilizrUri = AcceptanceTests.class.getResource("/raw/initializr.yml")
+ .toURI();
+ releaserProperties.getVersions().setAllVersionsFileUrl(initilizrUri.toString());
this.releaserProperties = releaserProperties;
return releaserProperties;
}
@@ -810,6 +817,9 @@ public class AcceptanceTests {
releaserProperties.getGit().setReleaseTrainWikiUrl(
tmpFile("spring-cloud-wiki").getAbsolutePath() + "/");
releaserProperties.setFixedVersions(versions);
+ URI initilizrUri = AcceptanceTests.class.getResource("/raw/initializr.yml")
+ .toURI();
+ releaserProperties.getVersions().setAllVersionsFileUrl(initilizrUri.toString());
this.releaserProperties = releaserProperties;
return releaserProperties;
}
@@ -821,6 +831,9 @@ public class AcceptanceTests {
file("/projects/spring-cloud-release-with-snapshot/").toURI().toString());
releaserProperties.getGit().setDocumentationUrl(
file("/projects/spring-cloud-static/").toURI().toString());
+ URI initilizrUri = AcceptanceTests.class.getResource("/raw/initializr.yml")
+ .toURI();
+ releaserProperties.getVersions().setAllVersionsFileUrl(initilizrUri.toString());
this.releaserProperties = releaserProperties;
return releaserProperties;
}
diff --git a/spring-cloud-release-tools-spring/src/test/resources/raw/initializr.yml b/spring-cloud-release-tools-spring/src/test/resources/raw/initializr.yml
new file mode 100644
index 00000000..d21db668
--- /dev/null
+++ b/spring-cloud-release-tools-spring/src/test/resources/raw/initializr.yml
@@ -0,0 +1,1266 @@
+local:
+ gcp:
+ version: 1.1.0.M3
+
+logging:
+ level:
+ org.springframework.core.env: warn
+ org.springframework.jndi: warn
+
+server:
+ compression:
+ enabled: true
+ mime-types: application/json,text/css,text/html
+ min-response-size: 2048
+ use-forward-headers: true
+
+spring:
+ jackson:
+ serialization:
+ write-dates-as-timestamps: false
+ task:
+ execution:
+ thread-name-prefix: initializr-
+ resources:
+ chain:
+ strategy:
+ content:
+ enabled: true
+
+initializr:
+ env:
+ boms:
+ azure:
+ groupId: com.microsoft.azure
+ artifactId: azure-spring-boot-bom
+ versionProperty: azure.version
+ mappings:
+ - versionRange: "[1.5.4.RELEASE,2.0.0.RELEASE)"
+ version: 0.2.4
+ - versionRange: "[2.0.0.RELEASE,2.1.0.RELEASE)"
+ version: 2.0.10
+ - versionRange: "2.1.0.RELEASE"
+ version: 2.1.2
+ codecentric-spring-boot-admin:
+ groupId: de.codecentric
+ artifactId: spring-boot-admin-dependencies
+ versionProperty: spring-boot-admin.version
+ mappings:
+ - versionRange: "[1.5.9.RELEASE,2.0.0.M1)"
+ version: 1.5.7
+ - versionRange: "[2.0.0.M1,2.1.0.M1)"
+ version: 2.0.6
+ - versionRange: "[2.1.0.M1,2.2.0.M1)"
+ version: 2.1.4
+ spring-cloud:
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-dependencies
+ versionProperty: spring-cloud.version
+ order: 50
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,1.5.x.RELEASE]"
+ version: Brixton.SR5
+ - versionRange: "[1.5.x.BUILD-SNAPSHOT,2.0.0.M1)"
+ version: Brixton.BUILD-SNAPSHOT
+ repositories: spring-snapshots,spring-milestones
+ - versionRange: "[2.0.0.M3, 2.0.0.M5)"
+ version: Camden.M2
+ repositories: spring-milestones
+ - versionRange: "[2.0.0.M5, 2.0.0.M5]"
+ version: Camden.SR4
+ repositories: spring-milestones
+ spring-cloud-services:
+ groupId: io.pivotal.spring.cloud
+ artifactId: spring-cloud-services-dependencies
+ versionProperty: spring-cloud-services.version
+ additionalBoms: [spring-cloud]
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,1.5.x.BUILD-SNAPSHOT]"
+ version: 1.6.6.RELEASE
+ - versionRange: "[2.0.0.RELEASE,2.0.x.BUILD-SNAPSHOT]"
+ version: 2.0.3.RELEASE
+ - versionRange: "2.1.0.RELEASE"
+ version: 2.1.2.RELEASE
+ spring-statemachine:
+ groupId: org.springframework.statemachine
+ artifactId: spring-statemachine-bom
+ versionProperty: spring-statemachine.version
+ mappings:
+ - versionRange: "[2.0.0.RC1,2.0.0.RC1]"
+ version: 2.0.0.M4
+ repositories: spring-milestones
+ - versionRange: "[2.0.0.RC2,2.0.0.RC2]"
+ version: 2.0.0.M5
+ repositories: spring-milestones
+ - versionRange: "2.0.0.RELEASE"
+ version: 2.0.1.RELEASE
+ vaadin:
+ groupId: com.vaadin
+ artifactId: vaadin-bom
+ versionProperty: vaadin.version
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ version: 8.7.2
+ - versionRange: "[2.0.0.M1,2.1.0.M1)"
+ version: 10.0.13
+ - versionRange: "2.1.0.M1"
+ version: 13.0.4
+ gradle:
+ dependency-management-plugin-version: 0.6.0.RELEASE
+ kotlin:
+ default-version: 1.3.30
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ version: 1.2.51
+ - versionRange: "[2.0.0.M1,2.2.0.M1)"
+ version: 1.2.71
+ repositories:
+ sonatype-snapshots:
+ name: Sonatype Snapshots
+ url: https://oss.sonatype.org/content/repositories/snapshots/
+ snapshotsEnabled: true
+ dependencies:
+ - name: Core
+ content:
+ - name: DevTools
+ id: devtools
+ groupId: org.springframework.boot
+ artifactId: spring-boot-devtools
+ scope: runtime
+ description: Spring Boot Development Tools
+ versionRange: 1.3.0.RELEASE
+ starter: false
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#using-boot-devtools
+ - name: Lombok
+ id: lombok
+ groupId: org.projectlombok
+ artifactId: lombok
+ scope: annotationProcessor
+ description: Java annotation library which helps to reduce boilerplate code and code faster
+ starter: false
+ - name: Configuration Processor
+ id: configuration-processor
+ groupId: org.springframework.boot
+ artifactId: spring-boot-configuration-processor
+ scope: annotationProcessor
+ description: Generate metadata for your custom configuration keys
+ versionRange: 1.2.0.RELEASE
+ starter: false
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#configuration-metadata-annotation-processor
+ - name: Session
+ id: session
+ groupId: org.springframework.session
+ artifactId: spring-session-core
+ description: API and implementations for managing a user’s session information
+ starter: false
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,2.0.0.M2]"
+ artifactId: spring-session
+ - name: Cache
+ id: cache
+ description: Spring's Cache abstraction
+ 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
+ - name: Validation
+ id: validation
+ description: JSR-303 validation infrastructure (already included with web)
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/validating-form-input/
+ description: Validating Form Input
+ - name: Retry
+ id: retry
+ groupId: org.springframework.retry
+ artifactId: spring-retry
+ description: Provide declarative retry support via spring-retry
+ starter: false
+ - name: Aspects
+ id: aop
+ description: Create your own Aspects using Spring AOP and AspectJ
+ - name: Web
+ content:
+ - name: Web
+ id: web
+ description: Servlet web application with Spring MVC and Tomcat
+ weight: 100
+ facets:
+ - web
+ - json
+ 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
+ - 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: Reactive Web
+ id: webflux
+ versionRange: 2.0.0.M1
+ description: Reactive web applications with Spring WebFlux and Netty
+ weight: 90
+ facets:
+ - json
+ - name: Rest Repositories
+ id: data-rest
+ weight: 10
+ facets:
+ - json
+ description: Exposing Spring Data repositories over REST via Spring Data REST
+ 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
+ - name: Rest Repositories HAL Browser
+ id: data-rest-hal
+ description: Browsing Spring Data REST repositories in your browser
+ groupId: org.springframework.data
+ artifactId: spring-data-rest-hal-browser
+ - name: HATEOAS
+ id: hateoas
+ description: HATEOAS-based RESTful services
+ 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
+ starter: false
+ - name: Web Services
+ id: web-services
+ description: Contract-first SOAP services with Spring Web Services
+ aliases:
+ - ws
+ 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
+ - name: Jersey
+ id: jersey
+ description: RESTful Web Services with JAX-RS
+ facets:
+ - json
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-jersey
+ - name: REST Docs
+ id: restdocs
+ description: Document RESTful services by combining hand-written and auto-generated documentation
+ groupId: org.springframework.restdocs
+ artifactId: spring-restdocs-mockmvc
+ scope: test
+ - name: Vaadin
+ id: vaadin
+ facets:
+ - web
+ groupId: com.vaadin
+ artifactId: vaadin-spring-boot-starter
+ description: Vaadin java web application framework
+ bom: vaadin
+ 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: Apache CXF
+ id: cxf-jaxrs
+ groupId: org.apache.cxf
+ artifactId: cxf-spring-boot-starter-jaxrs
+ version: 3.2.5
+ description: RESTful Web Services with JAX-RS
+ versionRange: "[1.5.0.RELEASE,2.1.0.M1)"
+ links:
+ - rel: reference
+ href: https://cxf.apache.org/docs/springboot.html#SpringBoot-SpringBootCXFJAX-RSStarter
+ - name: Ratpack
+ id: ratpack
+ description: Spring Boot integration for the Ratpack framework
+ groupId: io.ratpack
+ artifactId: ratpack-spring-boot
+ version: 1.1.1
+ versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ starter: false
+ - name: Mobile
+ id: mobile
+ description: Simplify the development of mobile web applications with Spring Mobile
+ versionRange : "[1.5.0.RELEASE, 2.0.0.M1)"
+ - name: Template Engines
+ content:
+ - name: Thymeleaf
+ id: thymeleaf
+ description: Thymeleaf templating engine
+ weight: 90
+ keywords:
+ - template
+ 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
+ - name: Freemarker
+ id: freemarker
+ description: FreeMarker templating engine
+ keywords:
+ - template
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines
+ - name: Mustache
+ id: mustache
+ description: Mustache templating engine
+ keywords:
+ - template
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines
+ - name: Groovy Templates
+ id: groovy-templates
+ description: Groovy templating engine
+ facets:
+ - web
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-spring-mvc-template-engines
+ - name: Security
+ content:
+ - name: Security
+ id: security
+ description: Secure your application via spring-security
+ weight: 100
+ 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
+ - name: OAuth2 Client
+ id: oauth2-client
+ description: Spring Boot integration for Spring Security's OAuth2/OpenID Connect client features
+ versionRange: 2.0.0.M5
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-security-oauth2-client
+ - name: OAuth2 Resource Server
+ id: oauth2-resource-server
+ description: Spring Boot integration for Spring Security's OAuth2 resource server features
+ versionRange: 2.1.0.M2
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-security-oauth2-server
+ - name: Okta
+ id: okta
+ description: Okta specific configuration for Spring Security/Spring Boot OAuth2 features
+ groupId: com.okta.spring
+ artifactId: okta-spring-boot-starter
+ versionRange: 2.1.2.RELEASE
+ version: 1.1.0
+ links:
+ - rel: guide
+ href: https://github.com/okta/samples-java-spring/tree/master/okta-hosted-login
+ - rel: guide
+ href: https://github.com/okta/samples-java-spring/tree/master/custom-login
+ - rel: guide
+ href: https://github.com/okta/samples-java-spring/tree/master/resource-server
+ - rel: reference
+ href: https://github.com/okta/okta-spring-boot/blob/master/README.md
+ - name: SQL
+ content:
+ - name: JPA
+ id: data-jpa
+ description: Persist data in SQL stores with Java Persistence API using Spring Data and Hibernate
+ weight: 100
+ facets:
+ - jpa
+ aliases:
+ - jpa
+ 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
+ - name: MySQL
+ id: mysql
+ description: MySQL JDBC driver
+ groupId: mysql
+ artifactId: mysql-connector-java
+ scope: runtime
+ starter: false
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/accessing-data-mysql/
+ description: Accessing data with MySQL
+ - name: H2
+ id: h2
+ description: H2 database (with embedded support)
+ groupId: com.h2database
+ artifactId: h2
+ scope: runtime
+ starter: false
+ - name: JDBC
+ id: jdbc
+ description: Persistence support using JDBC
+ 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
+ - name: MyBatis
+ id: mybatis
+ description: Persistence support using MyBatis
+ links:
+ - rel: guide
+ href: https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start
+ description: Quick Start
+ - rel: reference
+ href: http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
+ groupId: org.mybatis.spring.boot
+ artifactId: mybatis-spring-boot-starter
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,2.0.0.RELEASE)"
+ version: 1.3.4
+ - versionRange: 2.0.0.RELEASE
+ version: 2.0.1
+ - name: PostgreSQL
+ id: postgresql
+ description: PostgreSQL JDBC driver
+ groupId: org.postgresql
+ artifactId: postgresql
+ scope: runtime
+ starter: false
+ - name: SQL Server
+ id: sqlserver
+ description: Microsoft SQL Server JDBC driver
+ groupId: com.microsoft.sqlserver
+ artifactId: mssql-jdbc
+ scope: runtime
+ starter: false
+ - name: HSQLDB
+ id: hsql
+ description: HSQLDB database (with embedded support)
+ groupId: org.hsqldb
+ artifactId: hsqldb
+ scope: runtime
+ starter: false
+ - name: Apache Derby
+ id: derby
+ description: Apache Derby database (with embedded support)
+ groupId: org.apache.derby
+ artifactId: derby
+ scope: runtime
+ starter: false
+ - name: Liquibase
+ id: liquibase
+ description: Liquibase Database Migrations library
+ groupId: org.liquibase
+ artifactId: liquibase-core
+ starter: false
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-execute-liquibase-database-migrations-on-startup
+ - name: Flyway
+ id: flyway
+ description: Flyway Database Migrations library
+ groupId: org.flywaydb
+ artifactId: flyway-core
+ starter: false
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#howto-execute-flyway-database-migrations-on-startup
+ - name: JOOQ
+ id: jooq
+ description: Persistence support using Java Object Oriented Querying
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-jooq
+ - name: NoSQL
+ content:
+ - name: Redis
+ id: data-redis
+ description: Access Redis key-value data stores with Spring Data Redis
+ aliases:
+ - redis
+ 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
+ - name: Reactive Redis
+ id: data-redis-reactive
+ description: Access Redis key-value data stores in a reactive fashion with Spring Data Redis
+ versionRange: 2.0.0.M7
+ 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
+ - name: MongoDB
+ id: data-mongodb
+ description: Access MongoDB NoSQL Database with Spring Data MongoDB
+ weight: 50
+ 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
+ - name: Reactive MongoDB
+ id: data-mongodb-reactive
+ description: Access MongoDB NoSQL Database in a reactive fashion with Spring Data MongoDB
+ versionRange: 2.0.0.M1
+ weight: 50
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-mongodb
+ - name: Embedded MongoDB
+ id: flapdoodle-mongo
+ description: Embedded MongoDB for testing
+ groupId: de.flapdoodle.embed
+ artifactId: de.flapdoodle.embed.mongo
+ scope: test
+ starter: false
+ - name: Elasticsearch
+ id: data-elasticsearch
+ description: Elasticsearch search and analytics engine with Spring Data Elasticsearch
+ weight: 10
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-elasticsearch
+ - name: Solr
+ id: data-solr
+ description: Access Apache Solr search platform with Spring Data Solr
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-solr
+ - name: Cassandra
+ id: data-cassandra
+ description: Access Cassandra NoSQL Database with Spring Data Cassandra
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-cassandra
+ - name: Reactive Cassandra
+ id: data-cassandra-reactive
+ description: Access Cassandra NoSQL Database in a reactive fashion with Spring Data Cassandra
+ versionRange: 2.0.0.M1
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-cassandra
+ - name: Couchbase
+ id: data-couchbase
+ description: Access Couchbase NoSQL database with Spring Data Couchbase
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-couchbase
+ - name: Reactive Couchbase
+ id: data-couchbase-reactive
+ description: Access Couchbase NoSQL database in a reactive fashion with Spring Data Couchbase
+ versionRange: 2.0.0.M7
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-couchbase
+ - name: Neo4j
+ id: data-neo4j
+ description: Access Neo4j NoSQL graph database with Spring Data Neo4j
+ 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
+ - name: Gemfire
+ id: data-gemfire
+ description: Access GemFire distributed data store with Spring Data Gemfire
+ versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/accessing-data-gemfire/
+ description: Accessing Data with GemFire
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-gemfire
+ - name: Messaging
+ content:
+ - name: Spring Integration
+ id: integration
+ description: Common spring-integration modules
+ weight: 100
+ 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
+ - name: RabbitMQ
+ id: amqp
+ description: Advanced Message Queuing Protocol via Spring Rabbit
+ weight: 100
+ keywords:
+ - messaging
+ 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
+ - name: Kafka
+ id: kafka
+ weight: 100
+ description: Kafka messaging support using Spring Kafka
+ versionRange: 1.5.0.RELEASE
+ groupId: org.springframework.kafka
+ artifactId: spring-kafka
+ starter: false
+ keywords:
+ - messaging
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-kafka
+ - name: Kafka Streams
+ id: kafka-streams
+ weight: 90
+ description: Building stream processing applications with Apache Kafka Streams
+ versionRange: 2.0.0.RELEASE
+ groupId: org.apache.kafka
+ artifactId: 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 Kafka Streams with Spring Cloud stream
+ - rel: reference
+ href: https://docs.spring.io/spring-kafka/docs/current/reference/html/_reference.html#kafka-streams
+ description: Kafka Streams Support in Spring Kafka
+ - rel: reference
+ href: https://docs.spring.io/spring-cloud-stream/docs/current/reference/htmlsingle/#_kafka_streams_binding_capabilities_of_spring_cloud_stream
+ description: Kafka Streams Binding Capabilities of Spring Cloud Stream
+ - name: JMS (ActiveMQ)
+ id: activemq
+ description: Java Message Service API via Apache ActiveMQ
+ 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-activemq
+ - name: JMS (Artemis)
+ id: artemis
+ description: Java Message Service API via Apache Artemis
+ 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
+ - name: WebSocket
+ id: websocket
+ description: WebSocket applications with SockJS and STOMP
+ 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
+ - name: RSocket
+ id: rsocket
+ versionRange: 2.2.0.M2
+ description: RSocket.io applications with Spring Messaging and Netty
+ - name: Cloud Core
+ bom: spring-cloud
+ content:
+ - name: Cloud Bootstrap
+ id: cloud-starter
+ description: spring-cloud-context (e.g. Bootstrap context and @RefreshScope)
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter
+ weight: 100
+ - name: Cloud Function
+ id: cloud-function
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-function-context
+ description: Functions as Spring Beans
+ versionRange: 2.0.2.RELEASE
+ 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: Cloud Security
+ id: cloud-security
+ description: Secure load balancing and routing with spring-cloud-security
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-security
+ - name: Cloud OAuth2
+ id: cloud-oauth2
+ description: OAuth2 and distributed application patterns with spring-cloud-security
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-oauth2
+ - name: Cloud Task
+ id: cloud-task
+ description: Task result tracking with Spring Batch and Spring Cloud Stream integrations
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-task
+ starter: false
+ - name: Cloud Support
+ content:
+ - name: Cloud Connectors
+ id: cloud-connectors
+ description: Simplifies connecting to services in cloud platforms, including spring-cloud-connector and spring-cloud-cloudfoundry-connector
+ - name: Open Service Broker
+ id: open-service-broker
+ description: Create service brokers that conform to the Open Service Broker API specification
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-open-service-broker-webmvc
+ versionRange: 2.0.0.RELEASE
+ version: 2.1.1.RELEASE
+ 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: Cloud Config
+ bom: spring-cloud
+ content:
+ - name: Config Client
+ id: cloud-config-client
+ description: Spring Cloud Config Client
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-config
+ weight: 100
+ - name: Config Server
+ id: cloud-config-server
+ description: Central management for configuration via a git or svn backend
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-config-server
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/centralized-configuration/
+ description: Centralized Configuration
+ - name: Vault Configuration
+ id: cloud-starter-vault-config
+ description: Configuration management with HashiCorp Vault
+ versionRange: 1.5.3.RELEASE
+ starter: false
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-vault-config
+ - name: Zookeeper Configuration
+ id: cloud-starter-zookeeper-config
+ description: Configuration management with Zookeeper and spring-cloud-zookeeper-config
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-zookeeper-config
+ - name: Consul Configuration
+ id: cloud-starter-consul-config
+ description: Configuration management with Hashicorp Consul
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-consul-config
+ - name: Cloud Discovery
+ bom: spring-cloud
+ content:
+ - name: Eureka Discovery
+ id: cloud-eureka
+ description: Service discovery using spring-cloud-netflix and Eureka
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-eureka-client
+ weight: 100
+ - name: Eureka Server
+ id: cloud-eureka-server
+ description: spring-cloud-netflix Eureka Server
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-eureka-server
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/service-registration-and-discovery/
+ description: Service Registration and Discovery
+ - name: Zookeeper Discovery
+ id: cloud-starter-zookeeper-discovery
+ description: Service discovery with Zookeeper and spring-cloud-zookeeper-discovery
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-zookeeper-discovery
+ - name: Cloud Foundry Discovery
+ id: cloud-cloudfoundry-discovery
+ description: Service discovery with Cloud Foundry
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-cloudfoundry-discovery
+ - name: Consul Discovery
+ id: cloud-starter-consul-discovery
+ description: Service discovery with Hashicorp Consul
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-consul-discovery
+ - name: Cloud Routing
+ bom: spring-cloud
+ content:
+ - name: Zuul
+ id: cloud-zuul
+ description: Intelligent and programmable routing with spring-cloud-netflix Zuul
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-zuul
+ 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
+ description: Intelligent and programmable routing with the reactive Spring Cloud Gateway
+ versionRange: 2.0.0.M5
+ links:
+ - rel: guide
+ href: https://github.com/spring-cloud-samples/spring-cloud-gateway-sample
+ description: Using Spring Cloud Gateway
+ - name: Ribbon
+ id: cloud-ribbon
+ description: Client side load balancing with spring-cloud-netflix and Ribbon
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-ribbon
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/client-side-load-balancing/
+ description: Client Side Load Balancing with Ribbon and Spring Cloud
+ - name: Feign
+ id: cloud-feign
+ description: Declarative REST clients with spring-cloud-netflix Feign
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-openfeign
+ - name: Cloud Circuit Breaker
+ bom: spring-cloud
+ content:
+ - name: Hystrix
+ id: cloud-hystrix
+ description: Circuit breaker with spring-cloud-netflix Hystrix
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-hystrix
+ links:
+ - rel: guide
+ href: https://spring.io/guides/gs/circuit-breaker/
+ description: Circuit Breaker
+ - name: Hystrix Dashboard
+ id: cloud-hystrix-dashboard
+ description: Circuit breaker dashboard with spring-cloud-netflix Hystrix
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-hystrix-dashboard
+ - name: Turbine
+ id: cloud-turbine
+ description: Circuit breaker metric aggregation using spring-cloud-netflix with Turbine and server-sent events
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-turbine
+ - name: Turbine Stream
+ id: cloud-turbine-stream
+ description: Circuit breaker metric aggregation using spring-cloud-netflix with Turbine and Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ)
+ versionRange: 1.3.0.RELEASE
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-netflix-turbine-stream
+ weight: -1
+ - name: Cloud Tracing
+ bom: spring-cloud
+ content:
+ - name: Sleuth
+ id: cloud-starter-sleuth
+ description: Distributed tracing via logs with spring-cloud-sleuth
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-sleuth
+ - name: Zipkin Client
+ id: cloud-starter-zipkin
+ description: Distributed tracing with an existing Zipkin installation and spring-cloud-sleuth-zipkin. Alternatively, consider Sleuth Stream.
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-zipkin
+ - name: Cloud Messaging
+ bom: spring-cloud
+ content:
+ - name: Cloud Bus
+ id: cloud-bus
+ description: A simple control bus using Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ)
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-bus
+ - name: Cloud Stream
+ id: cloud-stream
+ description: Messaging microservices with Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ)
+ weight: 90
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-stream
+ - name: Reactive Cloud Stream
+ id: reactive-cloud-stream
+ description: Reactive messaging microservices with Spring Cloud Stream (requires a binder, e.g. Kafka or RabbitMQ)
+ versionRange: 2.0.0.RC2
+ weight: 90
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-stream-reactive
+ - name: Cloud Contract
+ bom: spring-cloud
+ content:
+ - name: Cloud Contract Verifier
+ id: cloud-contract-verifier
+ description: Test dependencies required for autogenerated tests
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-contract-verifier
+ scope: test
+ starter: false
+ - name: Cloud Contract Stub Runner
+ id: cloud-contract-stub-runner
+ description: Stub Runner for HTTP/Messaging based communication. Allows creating WireMock stubs from RestDocs tests
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-contract-stub-runner
+ scope: test
+ starter: false
+ - name: Pivotal Cloud Foundry
+ bom: spring-cloud-services
+ content:
+ - name: Config Client (PCF)
+ id: scs-config-client
+ description: Config client on Pivotal Cloud Foundry
+ groupId: io.pivotal.spring.cloud
+ artifactId: spring-cloud-services-starter-config-client
+ links:
+ - rel: reference
+ href: https://docs.pivotal.io/spring-cloud-services/
+ description: Reference doc
+ - name: Service Registry Client (PCF)
+ id: scs-service-registry
+ description: Eureka service discovery client on Pivotal Cloud Foundry
+ groupId: io.pivotal.spring.cloud
+ artifactId: spring-cloud-services-starter-service-registry
+ links:
+ - rel: reference
+ href: https://docs.pivotal.io/spring-cloud-services/
+ description: Reference doc
+ - name: Circuit Breaker Client (PCF)
+ id: scs-circuit-breaker
+ description: Hystrix circuit breaker client on Pivotal Cloud Foundry
+ groupId: io.pivotal.spring.cloud
+ artifactId: spring-cloud-services-starter-circuit-breaker
+ links:
+ - rel: reference
+ href: https://docs.pivotal.io/spring-cloud-services/
+ description: Reference doc
+ - name: Amazon Web Services
+ bom: spring-cloud
+ content:
+ - name: AWS Core
+ id: cloud-aws
+ description: AWS native services from spring-cloud-aws
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-aws
+ - name: AWS JDBC
+ id: cloud-aws-jdbc
+ description: Relational databases on AWS with RDS and spring-cloud-aws-jdbc
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-aws-jdbc
+ - name: AWS Messaging
+ id: cloud-aws-messaging
+ description: Messaging on AWS with SQS and spring-cloud-aws-messaging
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-starter-aws-messaging
+ - name: Azure
+ bom: azure
+ versionRange: "1.5.4.RELEASE"
+ content:
+ - name: Azure Support
+ id: azure-support
+ groupId: com.microsoft.azure
+ artifactId: azure-spring-boot-starter
+ description: Auto-configuration for Azure Services (service bus, storage, active directory, cosmos DB, key vault and more)
+ links:
+ - rel: reference
+ href: https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot
+ description: Reference doc
+ - name: Azure Active Directory
+ id: azure-active-directory
+ groupId: com.microsoft.azure
+ artifactId: azure-active-directory-spring-boot-starter
+ description: Spring Security integration with Azure Active Directory for authentication
+ 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
+ description: Reference doc
+ - name: Azure Key Vault
+ id: azure-keyvault-secrets
+ groupId: com.microsoft.azure
+ artifactId: azure-keyvault-secrets-spring-boot-starter
+ description: Spring value annotation integration with Azure Key Vault Secrets
+ 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
+ description: Reference doc
+ - name: Azure Storage
+ id: azure-storage
+ groupId: com.microsoft.azure
+ artifactId: azure-storage-spring-boot-starter
+ description: Azure Storage service integration
+ 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
+ description: Reference doc
+ - name: Google Cloud Platform
+ bom: spring-cloud
+ versionRange: 2.0.0.RELEASE
+ content:
+ - name: GCP Support
+ id: cloud-gcp
+ description: Support for Google Cloud Platform services
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-gcp-starter
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-cloud-gcp/docs/${local.gcp.version}/reference/htmlsingle/
+ description: Reference doc
+ - rel: guide
+ href: https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples
+ description: Samples
+ - name: GCP Messaging
+ id: cloud-gcp-pubsub
+ description: Publish to and subcribe from Google Cloud Pub/Sub topics
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-gcp-starter-pubsub
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-cloud-gcp/docs/${local.gcp.version}/reference/htmlsingle/#_spring_cloud_gcp_for_pub_sub
+ description: Reference doc
+ - rel: guide
+ href: https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-pubsub-sample
+ description: Sample
+ - name: GCP Storage
+ id: cloud-gcp-storage
+ description: Access Google Cloud Storage objects
+ groupId: org.springframework.cloud
+ artifactId: spring-cloud-gcp-starter-storage
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-cloud-gcp/docs/${local.gcp.version}/reference/htmlsingle/#_spring_resources
+ description: Reference doc
+ - rel: guide
+ href: https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-samples/spring-cloud-gcp-storage-resource-sample
+ description: Sample
+ - name: I/O
+ content:
+ - name: Batch
+ id: batch
+ description: Spring Batch support
+ weight: 100
+ 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
+ - name: Mail
+ id: mail
+ description: Send email using Java Mail and Spring Framework's JavaMailSender
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-email
+ - name: Apache Camel
+ id: camel
+ versionRange: "1.5.0.RELEASE"
+ mappings:
+ - versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ version: 2.21.5
+ - versionRange: "[2.0.0.M1,2.1.0.M1)"
+ version: 2.22.4
+ - versionRange: "2.1.0.M1"
+ version: 2.23.2
+ description: Integration using Apache Camel
+ groupId: org.apache.camel
+ artifactId: camel-spring-boot-starter
+ links:
+ - rel: guide
+ href: https://camel.apache.org/spring-boot
+ description: Using Apache Camel with Spring Boot
+ - name: LDAP
+ id: data-ldap
+ description: LDAP support, including spring-data-ldap
+ versionRange: 1.5.0.RELEASE
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-boot/docs/{bootVersion}/reference/htmlsingle/#boot-features-ldap
+ - name: Quartz Scheduler
+ id: quartz
+ versionRange: 2.0.0.M2
+ description: Schedule jobs using Quartz
+ - name: Spring Shell
+ id: spring-shell
+ groupId: org.springframework.shell
+ artifactId: spring-shell-starter
+ description: Build shell-based clients
+ version: 2.0.0.RELEASE
+ repository: spring-milestones
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-shell/docs/2.0.0.M2/reference/htmlsingle/
+ - name: Statemachine
+ id: statemachine
+ groupId: org.springframework.statemachine
+ artifactId: spring-statemachine-starter
+ description: Build applications using state machine concepts
+ versionRange: 2.0.0.RC1
+ bom: spring-statemachine
+ links:
+ - rel: reference
+ href: https://docs.spring.io/spring-statemachine/docs/current-SNAPSHOT/reference/htmlsingle/
+ - rel: guide
+ href: https://docs.spring.io/spring-statemachine/docs/current-SNAPSHOT/reference/htmlsingle/#developing-your-first-spring-statemachine-application
+ description: Developing your first Spring Statemachine application
+ - name: Ops
+ content:
+ - name: Actuator
+ id: actuator
+ description: Production ready features to help you monitor and manage your application
+ 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
+ - name: Spring Boot Admin (Server)
+ id: codecentric-spring-boot-admin-server
+ groupId: de.codecentric
+ artifactId: spring-boot-admin-starter-server
+ description: An admin interface for Spring Boot applications
+ versionRange: "[1.5.9.RELEASE,2.2.0.M1)"
+ bom: codecentric-spring-boot-admin
+ links:
+ - rel: reference
+ href: https://codecentric.github.io/spring-boot-admin/current/#getting-started
+ - name: Spring Boot Admin (Client)
+ id: codecentric-spring-boot-admin-client
+ groupId: de.codecentric
+ artifactId: spring-boot-admin-starter-client
+ description: Register your application with a Spring Boot Admin instance
+ versionRange: "[1.5.9.RELEASE,2.2.0.M1)"
+ bom: codecentric-spring-boot-admin
+ links:
+ - rel: reference
+ href: https://codecentric.github.io/spring-boot-admin/current/#getting-started
+ - name: Actuator Docs
+ id: actuator-docs
+ description: API documentation for the Actuator endpoints
+ versionRange: "[1.5.0.RELEASE,2.0.0.M1)"
+ groupId: org.springframework.boot
+ artifactId: spring-boot-actuator-docs
+ types:
+ - name: Maven Project
+ id: maven-project
+ description: Generate a Maven based project archive
+ tags:
+ build: maven
+ format: project
+ default: true
+ action: /starter.zip
+ - name: Maven POM
+ id: maven-build
+ description: Generate a Maven pom.xml
+ tags:
+ build: maven
+ format: build
+ default: false
+ action: /pom.xml
+ - name: Gradle Project
+ id: gradle-project
+ description: Generate a Gradle based project archive
+ tags:
+ build: gradle
+ format: project
+ default: false
+ action: /starter.zip
+ - name: Gradle Config
+ id: gradle-build
+ description: Generate a Gradle build file
+ tags:
+ build: gradle
+ format: build
+ default: false
+ action: /build.gradle
+ packagings:
+ - name: Jar
+ id: jar
+ default: true
+ - name: War
+ id: war
+ default: false
+ javaVersions:
+ - id: 12
+ default: false
+ - id: 11
+ default: false
+ - id: 1.8
+ name: 8
+ default: true
+ languages:
+ - name: Java
+ id: java
+ default: true
+ - name: Kotlin
+ id: kotlin
+ default: false
+ - name: Groovy
+ id: groovy
+ default: false
+ bootVersions:
+ - name : Latest SNAPSHOT
+ id: 2.2.0.BUILD-SNAPSHOT
+ default: false
+ - name : 2.1.1.
+ id: 2.1.1.RELEASE
+ default: true
+
+---
+
+spring:
+ profiles: dev
+ resources:
+ static_locations:
+ - file:start-client/build/
+ chain:
+ strategy:
+ content:
+ enabled: false
+ devtools:
+ restart:
+ additional_paths:
+ - start-client/build/
+ additional_exclude: "**/*.js,**/*.css"
+