diff --git a/README.adoc b/README.adoc index 0ac8e97..9801ece 100644 --- a/README.adoc +++ b/README.adoc @@ -13,23 +13,23 @@ Config clients with secret configuration values. To install, make sure you have https://github.com/spring-projects/spring-boot[Spring Boot CLI] -(1.2.0 or better): +(1.3.0 or better): $ spring version - Spring CLI v1.2.3.RELEASE + Spring CLI v1.3.2.RELEASE -E.g. for GVM users +E.g. for SDKMan users ``` -$ gvm install springboot 1.3.0.M5 -$ gvm use springboot 1.3.0.M5 +$ sdk install springboot 1.3.2.RELEASE +$ sdk use springboot 1.3.2.RELEASE ``` and install the Spring Cloud plugin: ``` $ mvn install -$ spring install org.springframework.cloud:spring-cloud-cli:1.1.0.BUILD-SNAPSHOT +$ spring install org.springframework.cloud:spring-cloud-cli:1.1.0.M5 ``` IMPORTANT: **Prerequisites:** to use the encryption and decryption features diff --git a/docs/README.adoc b/docs/README.adoc index 8ef6354..471d96a 100644 --- a/docs/README.adoc +++ b/docs/README.adoc @@ -37,5 +37,5 @@ and finally install the Spring Cloud plugin: ``` $ mvn install -$ spring install org.springframework.cloud:spring-cloud-cli:1.0.0.BUILD-SNAPSHOT +$ spring install org.springframework.cloud:spring-cloud-cli:1.0.0.M5 ``` diff --git a/docs/pom.xml b/docs/pom.xml index 7ccf5ad..e5d8121 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -3,11 +3,11 @@ 4.0.0 org.springframework.cloud spring-cloud-cli-docs - 1.1.0.BUILD-SNAPSHOT + 1.1.0.M5 org.springframework.cloud spring-cloud-build - 1.1.0.BUILD-SNAPSHOT + 1.1.0.M5 pom diff --git a/docs/src/main/asciidoc/install.adoc b/docs/src/main/asciidoc/install.adoc index e73bda9..1fb67c5 100644 --- a/docs/src/main/asciidoc/install.adoc +++ b/docs/src/main/asciidoc/install.adoc @@ -1,23 +1,23 @@ To install, make sure you have https://github.com/spring-projects/spring-boot[Spring Boot CLI] -(1.2.0 or better): +(1.3.0 or better): $ spring version - Spring CLI v1.2.3.RELEASE + Spring CLI v1.3.2.RELEASE -E.g. for GVM users +E.g. for SDKMan users ``` -$ gvm install springboot 1.3.0.M5 -$ gvm use springboot 1.3.0.M5 +$ sdk install springboot 1.3.2.RELEASE +$ sdk use springboot 1.3.2.RELEASE ``` and install the Spring Cloud plugin: ``` $ mvn install -$ spring install org.springframework.cloud:spring-cloud-cli:1.1.0.BUILD-SNAPSHOT +$ spring install org.springframework.cloud:spring-cloud-cli:1.1.0.M5 ``` IMPORTANT: **Prerequisites:** to use the encryption and decryption features diff --git a/pom.xml b/pom.xml index 4ace128..6d45743 100644 --- a/pom.xml +++ b/pom.xml @@ -3,11 +3,11 @@ 4.0.0 org.springframework.cloud spring-cloud-cli-parent - 1.1.0.BUILD-SNAPSHOT + 1.1.0.M5 org.springframework.cloud spring-cloud-build - 1.1.0.BUILD-SNAPSHOT + 1.1.0.M5 pom @@ -27,6 +27,7 @@ spring-cloud-cli + spring-cloud-cli-integration-tests docs @@ -83,14 +84,14 @@ org.springframework.cloud spring-cloud-config - 1.1.0.BUILD-SNAPSHOT + 1.1.0.M5 pom import org.springframework.cloud spring-cloud-netflix - 1.1.0.BUILD-SNAPSHOT + 1.1.0.M5 pom import diff --git a/spring-cloud-cli-integration-tests/.gitignore b/spring-cloud-cli-integration-tests/.gitignore new file mode 100644 index 0000000..b83d222 --- /dev/null +++ b/spring-cloud-cli-integration-tests/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/spring-cloud-cli-integration-tests/README.md b/spring-cloud-cli-integration-tests/README.md new file mode 100644 index 0000000..5e4c10c --- /dev/null +++ b/spring-cloud-cli-integration-tests/README.md @@ -0,0 +1,9 @@ +Spring Boot command line features for +[Spring Cloud](https://github.com/spring-cloud). To install, make +sure you have +[Spring Boot CLI](https://github.com/spring-projects/spring-boot) +(1.1.x with x>=5): + + $ spring version + Spring CLI v1.1.5.RELEASE + diff --git a/spring-cloud-cli-integration-tests/pom.xml b/spring-cloud-cli-integration-tests/pom.xml new file mode 100644 index 0000000..6de4a83 --- /dev/null +++ b/spring-cloud-cli-integration-tests/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + org.springframework.cloud + spring-cloud-cli-integration-tests + 1.1.0.M5 + jar + + spring-cloud-cli-integration-tests + Spring Patform Cli integration project + + + org.springframework.cloud + spring-cloud-cli-parent + 1.1.0.M5 + + + + + org.springframework.cloud + spring-cloud-cli + ${project.version} + provided + + + org.springframework.boot + spring-boot-cli + ${spring-boot.version} + provided + + + org.springframework.boot + spring-boot-starter-logging + test + + + org.springframework.boot + spring-boot-starter-test + test + + + + + UTF-8 + 1.7 + ${project.version} + + + + + + maven-deploy-plugin + + true + + + + + diff --git a/spring-cloud-cli-integration-tests/samples/app.groovy b/spring-cloud-cli-integration-tests/samples/app.groovy new file mode 100644 index 0000000..38a9d36 --- /dev/null +++ b/spring-cloud-cli-integration-tests/samples/app.groovy @@ -0,0 +1,22 @@ +package org.test + +@Component +class Example implements CommandLineRunner { + + @Autowired + private MyService myService + + void run(String... args) { + println "Hello ${this.myService.sayWorld()} From ${getClass().getClassLoader().getResource('samples/app.groovy')}" + } +} + + +@Service +class MyService { + + String sayWorld() { + return "World!" + } +} + diff --git a/spring-cloud-cli-integration-tests/samples/configserver.groovy b/spring-cloud-cli-integration-tests/samples/configserver.groovy new file mode 100644 index 0000000..3605efd --- /dev/null +++ b/spring-cloud-cli-integration-tests/samples/configserver.groovy @@ -0,0 +1,6 @@ +package org.test + +@EnableConfigServer +class Example { +} + diff --git a/spring-cloud-cli-integration-tests/samples/eureka.groovy b/spring-cloud-cli-integration-tests/samples/eureka.groovy new file mode 100644 index 0000000..ae2d2b4 --- /dev/null +++ b/spring-cloud-cli-integration-tests/samples/eureka.groovy @@ -0,0 +1,6 @@ +package org.test + +@EnableDiscoveryClient +class Example { +} + diff --git a/spring-cloud-cli-integration-tests/samples/eurekaserver.groovy b/spring-cloud-cli-integration-tests/samples/eurekaserver.groovy new file mode 100644 index 0000000..c2daa83 --- /dev/null +++ b/spring-cloud-cli-integration-tests/samples/eurekaserver.groovy @@ -0,0 +1,6 @@ +package org.test + +@EnableEurekaServer +class Example { +} + diff --git a/spring-cloud-cli-integration-tests/samples/rabbit.groovy b/spring-cloud-cli-integration-tests/samples/rabbit.groovy new file mode 100644 index 0000000..d9ecc17 --- /dev/null +++ b/spring-cloud-cli-integration-tests/samples/rabbit.groovy @@ -0,0 +1,6 @@ +package org.test + +@EnableBinding(transport="rabbit") +class Example { +} + diff --git a/spring-cloud-cli-integration-tests/samples/zuulproxy.groovy b/spring-cloud-cli-integration-tests/samples/zuulproxy.groovy new file mode 100644 index 0000000..5696e23 --- /dev/null +++ b/spring-cloud-cli-integration-tests/samples/zuulproxy.groovy @@ -0,0 +1,6 @@ +package org.test + +@EnableZuulProxy +class Example { +} + diff --git a/spring-cloud-cli-integration-tests/src/main/resources/META-INF/services/org.springframework.boot.cli.command.CommandFactory b/spring-cloud-cli-integration-tests/src/main/resources/META-INF/services/org.springframework.boot.cli.command.CommandFactory new file mode 100644 index 0000000..d7b5678 --- /dev/null +++ b/spring-cloud-cli-integration-tests/src/main/resources/META-INF/services/org.springframework.boot.cli.command.CommandFactory @@ -0,0 +1 @@ +org.springframework.cloud.cli.command.CloudCommandFactory diff --git a/spring-cloud-cli-integration-tests/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration b/spring-cloud-cli-integration-tests/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration new file mode 100644 index 0000000..1c2eb57 --- /dev/null +++ b/spring-cloud-cli-integration-tests/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.CompilerAutoConfiguration @@ -0,0 +1,12 @@ +org.springframework.cloud.cli.compiler.SpringCloudCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.ConfigServerCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.EurekaClientCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.EurekaServerCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.HystrixCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.HystrixDashboardCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.OAuth2LoadBalancedCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.RibbonClientCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.StreamKafkaCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.StreamRabbitCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.StreamRedisCompilerAutoConfiguration +org.springframework.cloud.cli.compiler.ZuulCompilerAutoConfiguration diff --git a/spring-cloud-cli-integration-tests/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.SpringBootAstTransformation b/spring-cloud-cli-integration-tests/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.SpringBootAstTransformation new file mode 100644 index 0000000..accdfba --- /dev/null +++ b/spring-cloud-cli-integration-tests/src/main/resources/META-INF/services/org.springframework.boot.cli.compiler.SpringBootAstTransformation @@ -0,0 +1 @@ +org.springframework.cloud.cli.compiler.SpringCloudBomAstTransformation \ No newline at end of file diff --git a/spring-cloud-cli-integration-tests/src/test/java/org/springframework/cloud/cli/CliTester.java b/spring-cloud-cli-integration-tests/src/test/java/org/springframework/cloud/cli/CliTester.java new file mode 100644 index 0000000..9fae672 --- /dev/null +++ b/spring-cloud-cli-integration-tests/src/test/java/org/springframework/cloud/cli/CliTester.java @@ -0,0 +1,228 @@ +/* + * Copyright 2012-2014 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 + * + * http://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.cli; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.Field; +import java.net.URI; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +import org.junit.Assume; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; +import org.springframework.boot.cli.command.AbstractCommand; +import org.springframework.boot.cli.command.OptionParsingCommand; +import org.springframework.boot.cli.command.archive.JarCommand; +import org.springframework.boot.cli.command.grab.GrabCommand; +import org.springframework.boot.cli.command.run.RunCommand; +import org.springframework.boot.cli.command.test.TestCommand; +import org.springframework.util.SocketUtils; + +/** + * {@link TestRule} that can be used to invoke CLI commands. + * + * @author Phillip Webb + * @author Dave Syer + * @author Andy Wilkinson + */ +public class CliTester implements TestRule { + + private final OutputCapture outputCapture = new OutputCapture(); + + private long timeout = TimeUnit.MINUTES.toMillis(6); + + private final List commands = new ArrayList(); + + private final String prefix; + + private final int port = SocketUtils.findAvailableTcpPort(); + + public CliTester(String prefix) { + this.prefix = prefix; + } + + public void setTimeout(long timeout) { + this.timeout = timeout; + } + + public String run(String... args) throws Exception { + Future future = submitCommand(new RunCommand(), args); + this.commands.add(future.get(this.timeout, TimeUnit.MILLISECONDS)); + return getOutput(); + } + + public String test(String... args) throws Exception { + Future future = submitCommand(new TestCommand(), args); + try { + this.commands.add(future.get(this.timeout, TimeUnit.MILLISECONDS)); + return getOutput(); + } + catch (Exception ex) { + return getOutput(); + } + } + + public String grab(String... args) throws Exception { + Future future = submitCommand(new GrabCommand(), args); + this.commands.add(future.get(this.timeout, TimeUnit.MILLISECONDS)); + return getOutput(); + } + + public String jar(String... args) throws Exception { + Future future = submitCommand(new JarCommand(), args); + this.commands.add(future.get(this.timeout, TimeUnit.MILLISECONDS)); + return getOutput(); + } + + private Future submitCommand(final T command, + String... args) { + clearUrlHandler(); + final String[] sources = getSources(args); + return Executors.newSingleThreadExecutor().submit(new Callable() { + @Override + public T call() throws Exception { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + System.setProperty("server.port", String.valueOf(CliTester.this.port)); + try { + command.run(sources); + return command; + } + finally { + System.clearProperty("server.port"); + Thread.currentThread().setContextClassLoader(loader); + } + } + }); + } + + /** + * The TomcatURLStreamHandlerFactory fails if the factory is already set, use + * reflection to reset it. + */ + private void clearUrlHandler() { + try { + Field field = URL.class.getDeclaredField("factory"); + field.setAccessible(true); + field.set(null, null); + } + catch (Exception ex) { + throw new IllegalStateException(ex); + } + } + + protected String[] getSources(String... args) { + final String[] sources = new String[args.length]; + for (int i = 0; i < args.length; i++) { + String arg = args[i]; + if (!arg.endsWith(".groovy") && !arg.endsWith(".xml")) { + if (new File(this.prefix + arg).isDirectory()) { + sources[i] = this.prefix + arg; + } + else { + sources[i] = arg; + } + } + else { + sources[i] = this.prefix + arg; + } + } + return sources; + } + + public String getOutput() { + return this.outputCapture.toString(); + } + + @Override + public Statement apply(final Statement base, final Description description) { + final Statement statement = CliTester.this.outputCapture + .apply(new RunLauncherStatement(base), description); + return new Statement() { + + @Override + public void evaluate() throws Throwable { + Assume.assumeTrue( + "Not running sample integration tests because integration profile not active", + System.getProperty("spring.profiles.active", "integration") + .contains("integration")); + statement.evaluate(); + } + }; + } + + public String getHttpOutput() { + return getHttpOutput("/"); + } + + public String getHttpOutput(String uri) { + try { + InputStream stream = URI.create("http://localhost:" + this.port + uri).toURL() + .openStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); + String line; + StringBuilder result = new StringBuilder(); + while ((line = reader.readLine()) != null) { + result.append(line); + } + return result.toString(); + } + catch (Exception ex) { + throw new IllegalStateException(ex); + } + } + + private final class RunLauncherStatement extends Statement { + + private final Statement base; + + private RunLauncherStatement(Statement base) { + this.base = base; + } + + @Override + public void evaluate() throws Throwable { + System.setProperty("disableSpringSnapshotRepos", "false"); + try { + try { + this.base.evaluate(); + } + finally { + for (AbstractCommand command : CliTester.this.commands) { + if (command != null && command instanceof RunCommand) { + ((RunCommand) command).stop(); + } + } + System.clearProperty("disableSpringSnapshotRepos"); + } + } + catch (Exception ex) { + throw new IllegalStateException(ex); + } + } + } + +} diff --git a/spring-cloud-cli-integration-tests/src/test/java/org/springframework/cloud/cli/OutputCapture.java b/spring-cloud-cli-integration-tests/src/test/java/org/springframework/cloud/cli/OutputCapture.java new file mode 100644 index 0000000..5f7b809 --- /dev/null +++ b/spring-cloud-cli-integration-tests/src/test/java/org/springframework/cloud/cli/OutputCapture.java @@ -0,0 +1,127 @@ +/* + * Copyright 2012-2014 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 + * + * http://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.cli; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +/** + * Capture output from System.out and System.err. + * + * @author Phillip Webb + */ +public class OutputCapture implements TestRule { + + private CaptureOutputStream captureOut; + + private CaptureOutputStream captureErr; + + private ByteArrayOutputStream copy; + + @Override + public Statement apply(final Statement base, Description description) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + captureOutput(); + try { + base.evaluate(); + } + finally { + releaseOutput(); + } + } + }; + } + + protected void captureOutput() { + this.copy = new ByteArrayOutputStream(); + this.captureOut = new CaptureOutputStream(System.out, this.copy); + this.captureErr = new CaptureOutputStream(System.err, this.copy); + System.setOut(new PrintStream(this.captureOut)); + System.setErr(new PrintStream(this.captureErr)); + } + + protected void releaseOutput() { + System.setOut(this.captureOut.getOriginal()); + System.setErr(this.captureErr.getOriginal()); + this.copy = null; + } + + public void flush() { + try { + this.captureOut.flush(); + this.captureErr.flush(); + } + catch (IOException ex) { + // ignore + } + } + + @Override + public String toString() { + flush(); + return this.copy.toString(); + } + + private static class CaptureOutputStream extends OutputStream { + + private final PrintStream original; + + private final OutputStream copy; + + CaptureOutputStream(PrintStream original, OutputStream copy) { + this.original = original; + this.copy = copy; + } + + @Override + public void write(int b) throws IOException { + this.copy.write(b); + this.original.write(b); + this.original.flush(); + } + + @Override + public void write(byte[] b) throws IOException { + write(b, 0, b.length); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + this.copy.write(b, off, len); + this.original.write(b, off, len); + } + + public PrintStream getOriginal() { + return this.original; + } + + @Override + public void flush() throws IOException { + this.copy.flush(); + this.original.flush(); + } + } + +} diff --git a/spring-cloud-cli-integration-tests/src/test/java/org/springframework/cloud/cli/SampleIntegrationTests.java b/spring-cloud-cli-integration-tests/src/test/java/org/springframework/cloud/cli/SampleIntegrationTests.java new file mode 100644 index 0000000..6536c28 --- /dev/null +++ b/spring-cloud-cli-integration-tests/src/test/java/org/springframework/cloud/cli/SampleIntegrationTests.java @@ -0,0 +1,79 @@ +/* + * Copyright 2013-2015 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 + * + * http://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.cli; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.net.URI; + +import org.junit.Rule; +import org.junit.Test; + +/** + * @author Dave Syer + * + */ +public class SampleIntegrationTests { + + @Rule + public CliTester cli = new CliTester("samples/"); + + @Test + public void appSample() throws Exception { + String output = this.cli.run("app.groovy"); + URI scriptUri = new File("samples/app.groovy").toURI(); + assertTrue("Wrong output: " + output, + output.contains("Hello World! From " + scriptUri)); + } + + @Test + public void eurekaSample() throws Exception { + String output = this.cli.run("eureka.groovy"); + assertTrue("Wrong output: " + output, + output.contains("Setting initial instance status as: STARTING")); + } + + @Test + public void eurekaServerSample() throws Exception { + String output = this.cli.run("eurekaserver.groovy"); + assertTrue("Wrong output: " + output, + output.contains("Setting the eureka configuration..")); + } + + @Test + public void rabbitSample() throws Exception { + String output = this.cli.run("rabbit.groovy"); + assertTrue("Wrong output: " + output, + output.contains("Registering MessageChannel errorChannel")); + } + + @Test + public void configServerSample() throws Exception { + String output = this.cli.run("configserver.groovy", "--", + "--spring.config.name=configserver"); + assertTrue("Wrong output: " + output, + output.contains("[/{name}/{profiles}/{label:.*}],methods=[GET]")); + } + + @Test + public void zuulProxySample() throws Exception { + String output = this.cli.run("zuulproxy.groovy"); + assertTrue("Wrong output: " + output, + output.contains("[/routes || /routes.json],methods=[GET]")); + } + +} diff --git a/spring-cloud-cli/pom.xml b/spring-cloud-cli/pom.xml index 1004dc6..d635e51 100644 --- a/spring-cloud-cli/pom.xml +++ b/spring-cloud-cli/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-cli - 1.1.0.BUILD-SNAPSHOT + 1.1.0.M5 jar spring-cloud-cli @@ -14,7 +14,7 @@ org.springframework.cloud spring-cloud-cli-parent - 1.1.0.BUILD-SNAPSHOT + 1.1.0.M5 @@ -40,119 +40,4 @@ - - UTF-8 - 1.7 - ${project.version} - - - - - milestone - - - repo.spring.io - Spring Milestone Repository - https://repo.spring.io/libs-milestone-local - - - - - central - - - sonatype-nexus-snapshots - Sonatype Nexus Snapshots - https://oss.sonatype.org/content/repositories/snapshots/ - - - sonatype-nexus-staging - Nexus Release Repository - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - - - - - - org.apache.maven.plugins - maven-gpg-plugin - - - sign-artifacts - verify - - sign - - - - - - - - - - - http://www.springsource.com/download/community - - - spring-docs - scp://static.springframework.org/var/www/domains/springframework.org/static/htdocs/spring-cloud-cli/docs/${project.version} - - - - repo.spring.io - Spring Release Repository - https://repo.spring.io/libs-release-local - - - repo.spring.io - Spring Snapshot Repository - https://repo.spring.io/libs-snapshot-local - - - - - - spring-snapshots - Spring Snapshots - http://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - http://repo.spring.io/milestone - - false - - - - spring-releases - Spring Releases - http://repo.spring.io/release - - false - - - - - - spring-snapshots - Spring Snapshots - http://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - http://repo.spring.io/milestone - - false - - - diff --git a/spring-cloud-cli/src/main/java/org/springframework/cloud/cli/compiler/SpringCloudBomAstTransformation.java b/spring-cloud-cli/src/main/java/org/springframework/cloud/cli/compiler/SpringCloudBomAstTransformation.java index 50c9f12..d3f3044 100644 --- a/spring-cloud-cli/src/main/java/org/springframework/cloud/cli/compiler/SpringCloudBomAstTransformation.java +++ b/spring-cloud-cli/src/main/java/org/springframework/cloud/cli/compiler/SpringCloudBomAstTransformation.java @@ -28,7 +28,7 @@ import org.springframework.boot.cli.compiler.GenericBomAstTransformation; @GroovyASTTransformation(phase = CompilePhase.CONVERSION) public class SpringCloudBomAstTransformation extends GenericBomAstTransformation { - private static final String SPRING_CLOUD_VERSION = "Brixton.BUILD-SNAPSHOT"; + private static final String SPRING_CLOUD_VERSION = "Brixton.M5"; @Override protected String getBomModule() {