From 26c7dc4312768a4b6fa52d2ed1a47a461fca3fee Mon Sep 17 00:00:00 2001 From: Scott Frederick Date: Thu, 15 Jun 2017 12:10:42 -0500 Subject: [PATCH] Add Gradle build files. --- .gitignore | 2 + build.gradle | 174 ++++++++++++++++++++ gradle.properties | 17 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54783 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 +++++++++++++++++++ gradlew.bat | 84 ++++++++++ pom.xml | 109 ++++++------ publish-maven.gradle | 59 +++++++ settings.gradle | 11 ++ spring-credhub-cloud-connector/build.gradle | 28 ++++ spring-credhub-core/build.gradle | 37 +++++ spring-credhub-demo/build.gradle | 40 +++++ spring-credhub-demo/manifest.yml | 2 +- 14 files changed, 690 insertions(+), 51 deletions(-) create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 publish-maven.gradle create mode 100644 settings.gradle create mode 100644 spring-credhub-cloud-connector/build.gradle create mode 100644 spring-credhub-core/build.gradle create mode 100644 spring-credhub-demo/build.gradle diff --git a/.gitignore b/.gitignore index f2f370a..d19c93b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ .project .settings +.gradle + .checkstyle bin diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..46664b5 --- /dev/null +++ b/build.gradle @@ -0,0 +1,174 @@ +/* + * Copyright 2016-2017 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. + */ + +description = "Spring CredHub" + +buildscript { + repositories { + jcenter() + maven { url 'https://repo.spring.io/plugins-release' } + } + dependencies { + classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.7' + classpath 'io.spring.gradle:spring-io-plugin:0.0.7.RELEASE' + classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3' + } +} + +ext { + springVersion = "4.3.8.RELEASE" + + junitVersion = "4.12" + mockitoVersion = "2.7.22" + + javadocLinks = [ + 'http://docs.oracle.com/javase/7/docs/api/', + 'http://docs.oracle.com/javaee/6/api/', + 'http://docs.spring.io/spring/docs/current/javadoc-api/', + ] as String[] +} + +allprojects { + apply plugin: 'java' + apply plugin: 'maven' + apply plugin: 'eclipse' + + apply plugin: 'propdeps' + apply plugin: 'propdeps-maven' + apply plugin: 'propdeps-idea' + apply plugin: 'propdeps-eclipse' + apply plugin: "org.asciidoctor.gradle.asciidoctor" + + group = 'org.springframework.credhub' + + asciidoctor { + sourceDir = new File("docs/src/main/asciidoc") + outputDir = new File("docs/target/generated-docs") + options = [ + 'doctype': 'book' + ] + attributes = [ + 'source-highlighter': 'coderay' + ] + } + + apply from: "${rootProject.projectDir}/publish-maven.gradle" + + if (project.hasProperty('platformVersion')) { + apply plugin: 'spring-io' + + // necessary to resolve the Spring IO versions (which may include snapshots) + repositories { + maven { url "https://repo.spring.io/libs-snapshot" } + } + + dependencyManagement { + springIoTestRuntime { + imports { + mavenBom "io.spring.platform:platform-bom:${platformVersion}" + } + } + } + } + + dependencies { + testCompile("junit:junit:$junitVersion") + testCompile("org.mockito:mockito-core:$mockitoVersion") + } +} + +subprojects { + sourceCompatibility = 1.6 + targetCompatibility = 1.6 + + tasks.withType(JavaCompile) { + options.encoding = 'UTF-8' + } + + task packageSources(type: Jar) { + classifier = 'sources' + from sourceSets.main.allSource + } + + task javadocJar(type: Jar) { + classifier = "javadoc" + from javadoc + } + + artifacts { + archives packageSources + archives javadocJar + } + + javadoc { + options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED + options.author = true + options.header = project.name + } + + repositories { + mavenCentral() + maven { url "https://repo.spring.io/libs-snapshot-local" } + maven { url "https://repo.spring.io/libs-milestone-local" } + } +} + +configure(rootProject) { + task api(type: Javadoc) { + group = "Documentation" + description = "Generates aggregated Javadoc API documentation." + title = "${rootProject.description} ${version} API" + options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED + options.author = true + options.header = rootProject.description + options.links(project.ext.javadocLinks) + + source subprojects.collect { project -> + project.sourceSets.main.allJava + } + + classpath = files(subprojects.collect { project -> + project.sourceSets.main.compileClasspath + }) + + maxMemory = "1024m" + destinationDir = new File(buildDir, "api") + } + + task docsZip(type: Zip) { + group = 'Distribution' + classifier = 'docs' + description = "Builds -${classifier} archive containing api and reference " + + "for deployment at docs.spring.io/spring-credhub/docs." + + from(api) { + into 'api' + } + } + + artifacts { + archives docsZip + } +} + +task dist(dependsOn: assemble) { + group = 'Distribution' + description = 'Builds -dist and -docs distribution archives.' +} + +task wrapper(type: Wrapper) { + gradleVersion = '3.5' +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..de413af --- /dev/null +++ b/gradle.properties @@ -0,0 +1,17 @@ +# +# Copyright 2016-2017 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. +# + +version=1.0.0.BUILD-SNAPSHOT diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..56251e0265c76089916b7bb4e59f1f48855ac60e GIT binary patch literal 54783 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 C!}r?& literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..a8155d5 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Jun 15 09:57:07 CDT 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-bin.zip diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..4453cce --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save ( ) { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/pom.xml b/pom.xml index 2bc21ea..b279783 100644 --- a/pom.xml +++ b/pom.xml @@ -56,6 +56,7 @@ sfrederick Scott Frederick + sfrederick@pivotal.io @@ -305,6 +306,7 @@ + - - + + - springNext + - - 4.3.8.BUILD-SNAPSHOT - + + + - - - spring-libs-snapshot - https://repo.spring.io/libs-snapshot - - true - - - - + + + + + + + + + + - + - spring5 + - - 5.0.0.BUILD-SNAPSHOT - + + + - - - spring-libs-snapshot - https://repo.spring.io/libs-snapshot - - true - - - - + + + + + + + + + + + + + <!– Profile to be run on the CI server, JARs JavaDocs –> ci @@ -395,13 +401,15 @@ +--> + + –> distribute @@ -413,9 +421,9 @@ - + –> org.apache.maven.plugins @@ -438,9 +446,9 @@ - + –> org.apache.maven.plugins @@ -459,16 +467,16 @@ - + –> org.apache.maven.plugins maven-antrun-plugin + false - copy-documentation-resources generate-resources @@ -502,9 +510,9 @@ - - - + + + <!––> @@ -517,9 +525,9 @@ - + –> org.apache.maven.plugins @@ -532,7 +540,7 @@ ${shared.resources}/javadoc ${shared.resources}/javadoc/overview.html ${shared.resources}/javadoc/spring-javadoc.css - + <!– copies doc-files subdirectory which contains image resources –> true http://docs.spring.io/spring/docs/current/javadoc-api/ @@ -542,9 +550,9 @@ - + –> org.asciidoctor @@ -607,5 +615,6 @@ - +--> + diff --git a/publish-maven.gradle b/publish-maven.gradle new file mode 100644 index 0000000..8d78049 --- /dev/null +++ b/publish-maven.gradle @@ -0,0 +1,59 @@ +apply plugin: 'maven' + +install { + repositories.mavenInstaller { + customizePom(pom, project) + } +} + +def customizePom(pom, gradleProject) { + pom.whenConfigured { generatedPom -> + // eliminate test-scoped dependencies (no need in maven central poms) + generatedPom.dependencies.removeAll { dep -> + dep.scope == 'test' + } + + // Ensure consistent ordering of dependencies to ease comparison with older poms + generatedPom.dependencies = generatedPom.dependencies.sort { dep -> + "$dep.scope:$dep.groupId:$dep.artifactId" + } + + // add all items necessary for maven central publication + generatedPom.project { + name = gradleProject.description + description = gradleProject.description + url = 'http://projects.spring.io/spring-credhub' + organization { + name = 'Spring IO' + url = 'https://spring.io' + } + licenses { + license { + name 'The Apache Software License, Version 2.0' + url 'http://www.apache.org/licenses/LICENSE-2.0.txt' + distribution 'repo' + } + } + + scm { + url = 'https://github.com/spring-projects/spring-credhub' + connection = 'scm:git:https://github.com/spring-projects/spring-credhub.git' + developerConnection = 'scm:git:https://github.com/spring-projects/spring-credhub.git' + } + + issueManagement { + system = 'GitHub' + url = 'https://github.com/spring-projects/spring-credhub/issues' + } + + developers { + developer { + id = 'sfrederick' + name = 'Scott Frederick' + email = 'sfrederick@pivotal.io' + } + } + } + } +} + diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..f6592e3 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,11 @@ +rootProject.name = 'spring-credhub' + +include ':spring-credhub-dependencies' +include ':spring-credhub-core' +include ':spring-credhub-cloud-connector' +include ':spring-credhub-demo' + +project(':spring-credhub-dependencies').projectDir = "$rootDir/spring-credhub-dependencies" as File +project(':spring-credhub-core').projectDir = "$rootDir/spring-credhub-core" as File +project(':spring-credhub-cloud-connector').projectDir = "$rootDir/spring-credhub-cloud-connector" as File +project(':spring-credhub-demo').projectDir = "$rootDir/spring-credhub-demo" as File \ No newline at end of file diff --git a/spring-credhub-cloud-connector/build.gradle b/spring-credhub-cloud-connector/build.gradle new file mode 100644 index 0000000..67f08d1 --- /dev/null +++ b/spring-credhub-cloud-connector/build.gradle @@ -0,0 +1,28 @@ +/* + * Copyright 2016-2017 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. + */ + +description = 'Spring CredHub Cloud Connector' + +dependencies { + compile project(':spring-credhub-core') + + compile group: 'org.springframework', name: 'spring-core', version: "${springVersion}" + compile group: 'org.springframework.cloud', name: 'spring-cloud-cloudfoundry-connector', version: '1.2.5.RC1' + + testCompile group: 'org.springframework', name: 'spring-test', version: "${springVersion}" + testCompile group: 'junit', name: 'junit', version: "${junitVersion}" + testCompile group: 'org.mockito', name: 'mockito-core', version: "${mockitoVersion}" +} diff --git a/spring-credhub-core/build.gradle b/spring-credhub-core/build.gradle new file mode 100644 index 0000000..95be200 --- /dev/null +++ b/spring-credhub-core/build.gradle @@ -0,0 +1,37 @@ +/* + * Copyright 2016-2017 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. + */ + +description = 'Spring CredHub Core' + +dependencies { + compile group: 'org.springframework', name: 'spring-core', version: "${springVersion}" + compile group: 'org.springframework', name: 'spring-beans', version: "${springVersion}" + compile group: 'org.springframework', name: 'spring-web', version: "${springVersion}" + compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.8.7' + + optional(group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3') { + exclude(module: 'commons-logging') + } + optional group: 'com.squareup.okhttp', name: 'okhttp', version: '2.7.5' + optional group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.6.0' + optional group: 'io.netty', name: 'netty-all', version: '4.1.8.Final' + + testCompile group: 'org.springframework', name: 'spring-test', version: "${springVersion}" + testCompile group: 'junit', name: 'junit', version: "${junitVersion}" + testCompile group: 'org.mockito', name: 'mockito-core', version: "${mockitoVersion}" + testCompile group: 'org.assertj', name: 'assertj-core', version: '3.6.1' + testCompile group: 'org.valid4j', name: 'json-path-matchers', version: '1.1' +} diff --git a/spring-credhub-demo/build.gradle b/spring-credhub-demo/build.gradle new file mode 100644 index 0000000..69092f6 --- /dev/null +++ b/spring-credhub-demo/build.gradle @@ -0,0 +1,40 @@ +/* + * Copyright 2016-2017 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. + */ + +description = 'Spring CredHub Demo' + +buildscript { + ext { + springBootVersion = "1.5.4.RELEASE" + } + + dependencies { + classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") + } + + repositories { + mavenCentral() + maven { url "https://repo.spring.io/plugins-release" } + } +} + +apply plugin: "org.springframework.boot" + +dependencies { + compile project(':spring-credhub-core') + compile group: 'org.springframework.boot', name: 'spring-boot-starter-web' + compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator' +} \ No newline at end of file diff --git a/spring-credhub-demo/manifest.yml b/spring-credhub-demo/manifest.yml index 06c685f..5c18bb0 100644 --- a/spring-credhub-demo/manifest.yml +++ b/spring-credhub-demo/manifest.yml @@ -2,5 +2,5 @@ applications: - name: spring-credhub-demo memory: 1G - path: target/spring-credhub-demo-1.0.0.BUILD-SNAPSHOT.jar + path: build/libs/spring-credhub-demo-1.0.0.BUILD-SNAPSHOT.jar