Fixed broken release process

This commit is contained in:
Marcin Grzejszczak
2017-03-10 10:54:26 +01:00
parent ffda2c3e41
commit 5af438fd87
28 changed files with 527 additions and 42 deletions

View File

@@ -38,10 +38,12 @@ public class Releaser {
log.info("\n\n\n=== UPDATING POMS ===\n\nWill run the application "
+ "for root folder [{}]. \n\nPress ENTER to continue {}", workingDir, MSG);
boolean skipPoms = skipStep();
ProjectVersion version = new ProjectVersion(project);
ProjectVersion originalVersion = new ProjectVersion(project);
ProjectVersion changedVersion = new ProjectVersion(project);
if (!skipPoms) {
this.projectPomUpdater.updateProject(project);
log.info("\n\nProject was successfully updated");
changedVersion = new ProjectVersion(project);
log.info("\n\nProject was successfully updated to [{}]", originalVersion);
}
log.info("\n\n\n=== BUILD PROJECT ===\n\nPress ENTER to build the project {}", MSG);
boolean skipBuild = skipStep();
@@ -52,7 +54,7 @@ public class Releaser {
log.info("\n\n\n=== COMMITTING AND PUSHING TAGS ===\n\nPress ENTER to commit, tag and push the tag {}", MSG);
boolean skipCommit = skipStep();
if (!skipCommit) {
this.projectGitUpdater.commitAndTagIfApplicable(project, version);
this.projectGitUpdater.commitAndTagIfApplicable(project, changedVersion);
}
log.info("\n\n\n=== ARTIFACT DEPLOYMENT ===\n\nPress ENTER to deploy the artifacts {}", MSG);
boolean skipDeployment = skipStep();
@@ -64,12 +66,13 @@ public class Releaser {
if (!skipDocs) {
this.project.publishDocs();
}
if (!version.isSnapshot()) {
log.info("\n\n\n=== REVERTING CHANGES & BUMPING VERSION===\n\nPress ENTER to go back to snapshots and bump version by patch {}", MSG);
if (!changedVersion.isSnapshot()) {
log.info("\n\n\n=== REVERTING CHANGES & BUMPING VERSION===\n\nPress ENTER to go back to snapshots and bump originalVersion by patch {}", MSG);
boolean skipRevert = skipStep();
if (!skipRevert) {
this.projectGitUpdater.revertChangesIfApplicable(project, version);
this.project.bumpVersions(version.bumpedVersion());
this.projectGitUpdater.revertChangesIfApplicable(project, changedVersion);
this.project.bumpVersions(originalVersion.bumpedVersion());
this.projectGitUpdater.commitAfterBumpingVersions(project, originalVersion);
}
}
log.info("\n\n\n=== PUSHING CHANGES===\n\nPress ENTER to push the commits {}", MSG);

View File

@@ -129,6 +129,11 @@ public class ReleaserProperties {
*/
private String deployCommand = "./mvnw deploy -DskipTests -Pfast";
/**
* Command to be executed to bump versions. The new version will be passed under %s param
*/
private String bumpVersionsCommand = "./mvnw versions:set -DnewVersion=%s";
/**
* Command to be executed to deploy a built project
*/
@@ -174,6 +179,14 @@ public class ReleaserProperties {
public void setPublishDocsCommands(String[] publishDocsCommands) {
this.publishDocsCommands = publishDocsCommands;
}
public String getBumpVersionsCommand() {
return this.bumpVersionsCommand;
}
public void setBumpVersionsCommand(String bumpVersionsCommand) {
this.bumpVersionsCommand = bumpVersionsCommand;
}
}
public String getWorkingDir() {

View File

@@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;
/**
* Abstraction over a Git repo. Can clonea repo from a given location
* Abstraction over a Git repo. Can cloned repo from a given location
* and check its branch.
*
* @author Marcin Grzejszczak
@@ -104,6 +104,7 @@ class GitRepo {
*/
void commit(File project, String message) {
try(Git git = this.gitFactory.open(file(project))) {
git.add().addFilepattern(".").call();
git.commit().setMessage(message).call();
} catch (Exception e) {
throw new IllegalStateException(e);
@@ -168,6 +169,7 @@ class GitRepo {
void revert(File project, String message) {
try(Git git = this.gitFactory.open(file(project))) {
RevCommit commit = git.log().setMaxCount(1).call().iterator().next();
log.debug("The commit to be reverted is [{}]", commit);
git.revert().include(commit).call();
git.commit().setAmend(true).setMessage(message).call();
} catch (Exception e) {

View File

@@ -22,6 +22,7 @@ public class ProjectGitUpdater {
private static final String MSG = "Bumping versions";
private static final String PRE_RELEASE_MSG = "Bumping versions before release";
private static final String POST_RELEASE_MSG = "Going back to snapshots";
private static final String POST_RELEASE_BUMP_MSG = MSG + " after release";
private final ReleaserProperties properties;
@@ -43,6 +44,16 @@ public class ProjectGitUpdater {
}
}
public void commitAfterBumpingVersions(File project, ProjectVersion version) {
GitRepo gitRepo = gitRepo(project);
if (version.isSnapshot()) {
log.info("Snapshot version [{}] found. Will only commit the changed poms", version);
gitRepo.commit(project, POST_RELEASE_BUMP_MSG);
} else {
log.info("Non snapshot version [{}] found. Won't do anything", version);
}
}
public File cloneScReleaseProject() {
try {
File destinationDir = properties.getGit().getCloneDestinationDir() != null ?
@@ -65,6 +76,7 @@ public class ProjectGitUpdater {
log.info("Won't revert a snapshot version");
return;
}
log.info("Reverting last commit");
gitRepo(project).revert(project, POST_RELEASE_MSG);
}

View File

@@ -20,7 +20,6 @@ import org.springframework.cloud.release.internal.ReleaserProperties;
public class Project {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final String BUMP_VERSIONS = "./mvnw versions:set -DnewVersion=%s";
private final ReleaserProperties properties;
private final ProcessExecutor executor;
@@ -95,7 +94,7 @@ public class Project {
}
String bumpVersionsCommand() {
return BUMP_VERSIONS;
return this.properties.getMaven().getBumpVersionsCommand();
}
}

View File

@@ -0,0 +1,107 @@
package org.springframework.cloud.release.internal;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.util.Iterator;
import org.eclipse.jgit.revwalk.RevCommit;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.springframework.cloud.release.internal.git.GitRepoTests;
import org.springframework.cloud.release.internal.git.ProjectGitUpdater;
import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
import org.springframework.cloud.release.internal.pom.TestPomReader;
import org.springframework.cloud.release.internal.pom.TestUtils;
import org.springframework.cloud.release.internal.project.Project;
import org.springframework.util.FileSystemUtils;
import static org.assertj.core.api.BDDAssertions.then;
import static org.springframework.cloud.release.internal.git.GitTestUtils.clonedProject;
import static org.springframework.cloud.release.internal.git.GitTestUtils.openGitProject;
import static org.springframework.cloud.release.internal.git.GitTestUtils.setOriginOnProjectToTmp;
/**
* @author Marcin Grzejszczak
*/
public class AcceptanceTests {
@Rule public TemporaryFolder tmp = new TemporaryFolder();
TestPomReader testPomReader = new TestPomReader();
File springCloudConsulProject;
File temporaryFolder;
@Before
public void setup() throws Exception {
this.temporaryFolder = this.tmp.newFolder();
this.springCloudConsulProject = new File(GitRepoTests.class.getResource("/projects/spring-cloud-consul").toURI());
TestUtils.prepareLocalRepo();
FileSystemUtils.copyRecursively(file("/projects/"), this.temporaryFolder);
}
@Test
public void should_perform_a_release_of_consul() throws Exception {
File origin = clonedProject(this.tmp.newFolder(), this.springCloudConsulProject);
File project = clonedProject(this.tmp.newFolder(), tmpFile("spring-cloud-consul"));
setOriginOnProjectToTmp(origin, project);
Releaser releaser = releaser(project);
releaser.release();
then(this.temporaryFolder).exists();
File afterProcessing = new File(project, "bumped");
then(afterProcessing).exists();
Iterable<RevCommit> commits = openGitProject(project).log().call();
Iterator<RevCommit> iterator = commits.iterator();
RevCommit afterRelease = iterator.next();
RevCommit goingBackToSnapshots = iterator.next();
RevCommit bumping = iterator.next();
then(openGitProject(origin).tagList().call().iterator().next().getName()).endsWith("v1.1.2.RELEASE");
then(afterRelease.getShortMessage()).isEqualTo("Bumping versions after release");
then(goingBackToSnapshots.getShortMessage()).isEqualTo("Going back to snapshots");
then(bumping.getShortMessage()).isEqualTo("Bumping versions before release");
}
private ReleaserProperties releaserProperties(File project) throws URISyntaxException {
ReleaserProperties releaserProperties = new ReleaserProperties();
releaserProperties.getGit().setSpringCloudReleaseGitUrl(file("/projects/spring-cloud-release/").toURI().getPath());
releaserProperties.getPom().setBranch("vCamden.SR5");
releaserProperties.setWorkingDir(project.getPath());
releaserProperties.getMaven().setBuildCommand("touch build");
releaserProperties.getMaven().setDeployCommand("touch deploy");
releaserProperties.getMaven().setPublishDocsCommands(new String[] { "touch docs"} );
releaserProperties.getMaven().setBumpVersionsCommand("touch bumped");
return releaserProperties;
}
private Releaser releaser(File projectFile) throws Exception {
ReleaserProperties properties = releaserProperties(projectFile);
ProjectPomUpdater pomUpdater = new ProjectPomUpdater(properties);
Project project = new Project(properties);
ProjectGitUpdater gitUpdater = new ProjectGitUpdater(properties);
return new Releaser(properties, pomUpdater, project, gitUpdater) {
@Override boolean skipStep() {
return false;
}
};
}
private File tmpFile(String relativePath) {
return new File(this.temporaryFolder, relativePath);
}
private File file(String relativePath) throws URISyntaxException {
return new File(AcceptanceTests.class.getResource(relativePath).toURI());
}
private File pom(String relativePath) throws URISyntaxException {
return new File(new File(AcceptanceTests.class.getResource(relativePath).toURI()), "pom.xml");
}
private String asString(File file) throws IOException {
return new String(Files.readAllBytes(file.toPath()));
}
}

View File

@@ -1,4 +1,4 @@
package org.springframework.cloud.release;
package org.springframework.cloud.release.internal;
import java.io.File;
import java.io.IOException;
@@ -11,7 +11,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.springframework.cloud.release.internal.pom.ProjectPomUpdater;
import org.springframework.cloud.release.internal.ReleaserProperties;
import org.springframework.cloud.release.internal.pom.TestPomReader;
import org.springframework.cloud.release.internal.pom.TestUtils;
import org.springframework.util.FileSystemUtils;
@@ -21,7 +20,7 @@ import static org.assertj.core.api.BDDAssertions.then;
/**
* @author Marcin Grzejszczak
*/
public class AcceptanceTests {
public class PomUpdateAcceptanceTests {
@Rule public TemporaryFolder tmp = new TemporaryFolder();
TestPomReader testPomReader = new TestPomReader();
@@ -83,11 +82,11 @@ public class AcceptanceTests {
}
private File file(String relativePath) throws URISyntaxException {
return new File(AcceptanceTests.class.getResource(relativePath).toURI());
return new File(PomUpdateAcceptanceTests.class.getResource(relativePath).toURI());
}
private File pom(String relativePath) throws URISyntaxException {
return new File(new File(AcceptanceTests.class.getResource(relativePath).toURI()), "pom.xml");
return new File(new File(PomUpdateAcceptanceTests.class.getResource(relativePath).toURI()), "pom.xml");
}
private String asString(File file) throws IOException {

View File

@@ -4,19 +4,15 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.util.List;
import org.eclipse.jgit.api.CloneCommand;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.RemoteRemoveCommand;
import org.eclipse.jgit.api.RemoteSetUrlCommand;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.transport.URIish;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -26,6 +22,8 @@ import org.springframework.cloud.release.internal.pom.TestUtils;
import static org.assertj.core.api.Assertions.fail;
import static org.assertj.core.api.BDDAssertions.then;
import static org.assertj.core.api.BDDAssertions.thenThrownBy;
import static org.springframework.cloud.release.internal.git.GitTestUtils.clonedProject;
import static org.springframework.cloud.release.internal.git.GitTestUtils.setOriginOnProjectToTmp;
/**
* @author Marcin Grzejszczak
@@ -133,7 +131,7 @@ public class GitRepoTests {
@Test
public void should_push_changes_to_master_branch() throws Exception {
File origin = clonedProject();
File origin = clonedProject(this.tmp.newFolder(), this.springCloudReleaseProject);
File project = this.gitRepo.cloneProject(this.springCloudReleaseProject.toURI());
setOriginOnProjectToTmp(origin, project);
createNewFile(project);
@@ -149,7 +147,7 @@ public class GitRepoTests {
@Test
public void should_push_changes_to_current_branch() throws Exception {
File origin = clonedProject();
File origin = clonedProject(this.tmp.newFolder(), this.springCloudReleaseProject);
File project = this.gitRepo.cloneProject(this.springCloudReleaseProject.toURI());
setOriginOnProjectToTmp(origin, project);
createNewFile(project);
@@ -165,7 +163,7 @@ public class GitRepoTests {
@Test
public void should_push_a_tag_to_new_branch_in_origin() throws Exception {
File origin = clonedProject();
File origin = clonedProject(this.tmp.newFolder(), this.springCloudReleaseProject);
File project = this.gitRepo.cloneProject(this.springCloudReleaseProject.toURI());
setOriginOnProjectToTmp(origin, project);
createNewFile(project);
@@ -182,31 +180,11 @@ public class GitRepoTests {
}
}
private void setOriginOnProjectToTmp(File origin, File project)
throws GitAPIException, MalformedURLException {
try(Git git = openGitProject(project)) {
RemoteRemoveCommand remove = git.remoteRemove();
remove.setName("origin");
remove.call();
RemoteSetUrlCommand command = git.remoteSetUrl();
command.setUri(new URIish(origin.toURI().toURL()));
command.setName("origin");
command.setPush(true);
command.call();
}
}
private Git openGitProject(File project) {
return new GitRepo.JGitFactory().open(project);
}
private File clonedProject() throws IOException {
File anotherFolder = this.tmp.newFolder();
GitRepo projectRepo = new GitRepo(anotherFolder);
projectRepo.cloneProject(this.springCloudReleaseProject.toURI());
return anotherFolder;
}
private void createNewFile(File project) throws Exception {
File newFile = new File(this.tmpFolder, "newFile");
newFile.createNewFile();

View File

@@ -0,0 +1,41 @@
package org.springframework.cloud.release.internal.git;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.RemoteRemoveCommand;
import org.eclipse.jgit.api.RemoteSetUrlCommand;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.transport.URIish;
/**
* @author Marcin Grzejszczak
*/
public class GitTestUtils {
public static void setOriginOnProjectToTmp(File origin, File project)
throws GitAPIException, MalformedURLException {
try(Git git = openGitProject(project)) {
RemoteRemoveCommand remove = git.remoteRemove();
remove.setName("origin");
remove.call();
RemoteSetUrlCommand command = git.remoteSetUrl();
command.setUri(new URIish(origin.toURI().toURL()));
command.setName("origin");
command.setPush(true);
command.call();
}
}
public static Git openGitProject(File project) {
return new GitRepo.JGitFactory().open(project);
}
public static File clonedProject(File baseDir, File projectToClone) throws IOException {
GitRepo projectRepo = new GitRepo(baseDir);
projectRepo.cloneProject(projectToClone.toURI());
return baseDir;
}
}

View File

@@ -46,6 +46,22 @@ public class ProjectGitUpdaterTests {
then(this.gitRepo).should().pushTag(any(File.class), eq("v1.0.0.RELEASE"));
}
@Test
public void should_commit_when_snapshot_version_is_present_with_post_release_msg() {
this.updater.commitAfterBumpingVersions(this.file, new ProjectVersion("1.0.0.BUILD-SNAPSHOT"));
then(this.gitRepo).should().commit(any(File.class), eq("Bumping versions after release"));
then(this.gitRepo).should(never()).tag(any(File.class), anyString());
}
@Test
public void should_not_commit_when_non_snapshot_version_is_present() {
this.updater.commitAfterBumpingVersions(this.file, new ProjectVersion("1.0.0.RELEASE"));
then(this.gitRepo).should(never()).commit(any(File.class), eq("Bumping versions after release"));
then(this.gitRepo).should(never()).tag(any(File.class), anyString());
}
@Test
public void should_not_revert_changes_for_snapshots() {
this.updater.revertChangesIfApplicable(this.file, new ProjectVersion("1.0.0.BUILD-SNAPSHOT"));

View File

@@ -9,6 +9,7 @@ public class TestUtils {
public static void prepareLocalRepo() throws IOException {
prepareLocalRepo("target/test-classes/projects/", "spring-cloud-release");
prepareLocalRepo("target/test-classes/projects/", "spring-cloud-consul");
}
private static void prepareLocalRepo(String buildDir, String repoPath) throws IOException {

View File

@@ -0,0 +1,16 @@
*~
#*
*#
.#*
.classpath
.project
.settings/
.springBeans
target/
_site/
.idea
*.iml
*.ipr
.factorypath
*.swp
/consul

View File

@@ -0,0 +1 @@
ref: refs/heads/master

View File

@@ -0,0 +1,7 @@
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true

View File

@@ -0,0 +1 @@
Unnamed repository; edit this file 'description' to name the repository.

View File

@@ -0,0 +1 @@
0000000000000000000000000000000000000000 2e289de071592d4d361957e59cc0485c5e1941a0 Marcin Grzejszczak <marcin@grzejszczak.pl> 1489136624 +0100 commit (initial): Initial commit

View File

@@ -0,0 +1 @@
0000000000000000000000000000000000000000 2e289de071592d4d361957e59cc0485c5e1941a0 Marcin Grzejszczak <marcin@grzejszczak.pl> 1489136624 +0100 commit (initial): Initial commit

View File

@@ -0,0 +1,2 @@
x<01><>1<0E>0 @Q<><51><EFBFBD>;<12><><EFBFBD>"<12><><03>0<EFBFBD><30><10><><1E> <1C><><0F>˜s<CB9C><73>1<EFBFBD>jQ<05>L<EFBFBD>:[7D
<EFBFBD><EFBFBD><EFBFBD>CV78<37><38><EFBFBD>!FQ1<51><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <0E><><EFBFBD>դ<EFBFBD>vyi<79><69><EFBFBD>m<EFBFBD>c<0F><>Q<>am<61>Z#˻<><EFBFBD>9N<39>&<1E>˙W<>B<EFBFBD>

View File

@@ -0,0 +1,4 @@
x<01>U<EFBFBD>o<EFBFBD>0<10><><EFBFBD>+L<>#<23>ۍV<><56>`1ic<69><63>!^<5E><><EFBFBD>;<3B>n<EFBFBD>
<EFBFBD><EFBFBD>sv<EFBFBD><1F><>
<09>><3E><>ww<77>}<7D><><EFBFBD><EFBFBD>*!<21><>ӳ<17><><EFBFBD><EFBFBD><EFBFBD><02>J<0E>><3E>d<>2!<21><><EFBFBD><EFBFBD><EFBFBD>c<EFBFBD>68<36><38>Q<EFBFBD><51>7H-A<>4<EFBFBD>`fm9`<60><> <0B><><EFBFBD><<3C>Uz<55>F7<46><37>
<EFBFBD><EFBFBD>,9X<1A>FWUE<55>S<EFBFBD>;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 

View File

@@ -0,0 +1 @@
2e289de071592d4d361957e59cc0485c5e1941a0

View File

@@ -0,0 +1,222 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-consul</artifactId>
<version>1.2.0.BUILD-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Spring Cloud Consul</name>
<description>Spring Cloud Consul</description>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-build</artifactId>
<version>1.3.1.BUILD-SNAPSHOT</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<properties>
<spring-cloud-bus.version>1.3.0.BUILD-SNAPSHOT</spring-cloud-bus.version>
<spring-cloud-commons.version>1.2.0.BUILD-SNAPSHOT</spring-cloud-commons.version>
<spring-cloud-config.version>1.3.0.BUILD-SNAPSHOT</spring-cloud-config.version>
<spring-cloud-netflix.version>1.3.0.BUILD-SNAPSHOT</spring-cloud-netflix.version>
<spring-cloud-deployer.version>1.0.3.BUILD-SNAPSHOT</spring-cloud-deployer.version>
<spring-cloud-stream.version>Chelsea.BUILD-SNAPSHOT</spring-cloud-stream.version>
<gson.version>2.3.1</gson.version>
<httpclient.version>4.5.2</httpclient.version>
<httpcore.version>4.4.5</httpcore.version>
<joda-time.version>2.7</joda-time.version>
</properties>
<scm>
<url>https://github.com/spring-cloud/spring-cloud-consul</url>
<connection>scm:git:git://github.com/spring-cloud/spring-cloud-consul.git</connection>
<developerConnection>scm:git:ssh://git@github.com/spring-cloud/spring-cloud-consul.git</developerConnection>
<tag>HEAD</tag>
</scm>
<modules>
<module>spring-cloud-consul-dependencies</module>
<module>spring-cloud-consul-core</module>
<module>spring-cloud-consul-config</module>
<module>spring-cloud-consul-discovery</module>
<module>spring-cloud-consul-binder</module>
<module>spring-cloud-consul-sample</module>
<module>spring-cloud-starter-consul</module>
<module>spring-cloud-starter-consul-bus</module>
<module>spring-cloud-starter-consul-config</module>
<module>spring-cloud-starter-consul-discovery</module>
<module>spring-cloud-starter-consul-all</module>
<module>docs</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-consul-dependencies</artifactId>
<version>${project.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-deployer-local</artifactId>
<version>${spring-cloud-deployer.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-test</artifactId>
<version>${spring-cloud-stream.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-dependencies</artifactId>
<version>${spring-cloud-stream.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus-dependencies</artifactId>
<version>${spring-cloud-bus.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons-dependencies</artifactId>
<version>${spring-cloud-commons.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-dependencies</artifactId>
<version>${spring-cloud-config.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-dependencies</artifactId>
<version>${spring-cloud-netflix.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<!-- required by com.ecwid.consul but not as a pom dependency -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
<!-- force httpclient version -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpcore.version}</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<profiles>
<profile>
<id>spring</id>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot-local</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/release</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/libs-snapshot-local</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release-local</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</project>

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-consul</artifactId>
<version>1.2.0.BUILD-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
<artifactId>spring-cloud-starter-consul</artifactId>
<name>Spring Cloud Starter Consul</name>
<description>Spring Cloud Starter Consul</description>
<url>https://projects.spring.io/spring-cloud</url>
<organization>
<name>Pivotal Software, Inc.</name>
<url>https://www.spring.io</url>
</organization>
<properties>
<main.basedir>${basedir}/../..</main.basedir>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-consul-core</artifactId>
</dependency>
<dependency>
<groupId>com.ecwid.consul</groupId>
<artifactId>consul-api</artifactId>
</dependency>
<!-- required by com.ecwid.consul but not as a pom dependency -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
</dependency>
</dependencies>
</project>