diff --git a/spring-cloud-dataflow-apps-plugin/.mvn/jvm.config b/spring-cloud-dataflow-apps-plugin/.mvn/jvm.config index 0e7dabeff..b6022414f 100644 --- a/spring-cloud-dataflow-apps-plugin/.mvn/jvm.config +++ b/spring-cloud-dataflow-apps-plugin/.mvn/jvm.config @@ -1 +1 @@ --Xmx1024m -XX:CICompilerCount=1 -XX:TieredStopAtLevel=1 -Djava.security.egd=file:/dev/./urandom \ No newline at end of file +-Xmx1024m -XX:CICompilerCount=1 -XX:TieredStopAtLevel=1 -Djava.security.egd=file:/dev/./urandom --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED diff --git a/spring-cloud-dataflow-apps-plugin/.mvn/maven.config b/spring-cloud-dataflow-apps-plugin/.mvn/maven.config index 3b8cf46e1..e69de29bb 100644 --- a/spring-cloud-dataflow-apps-plugin/.mvn/maven.config +++ b/spring-cloud-dataflow-apps-plugin/.mvn/maven.config @@ -1 +0,0 @@ --DaltSnapshotDeploymentRepository=repo.spring.io::default::https://repo.spring.io/libs-snapshot-local -P spring diff --git a/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/MavenWrapperDownloader.java b/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index e76d1f324..000000000 --- a/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2007-present 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. - */ -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/maven-wrapper.jar index 2cc7d4a55..7967f30dd 100644 Binary files a/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/maven-wrapper.jar and b/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/maven-wrapper.jar differ diff --git a/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/maven-wrapper.properties index 642d572ce..9548abd8e 100644 --- a/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/maven-wrapper.properties +++ b/spring-cloud-dataflow-apps-plugin/.mvn/wrapper/maven-wrapper.properties @@ -1,2 +1,20 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +wrapperVersion=3.3.2 +distributionType=bin +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.2/maven-wrapper-3.3.2.jar diff --git a/spring-cloud-dataflow-apps-plugin/etc/checkstyle/checkstyle-suppressions.xml b/spring-cloud-dataflow-apps-plugin/etc/checkstyle/checkstyle-suppressions.xml index 9d3a0b2d8..72da692c6 100644 --- a/spring-cloud-dataflow-apps-plugin/etc/checkstyle/checkstyle-suppressions.xml +++ b/spring-cloud-dataflow-apps-plugin/etc/checkstyle/checkstyle-suppressions.xml @@ -4,6 +4,7 @@ "https://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> + diff --git a/spring-cloud-dataflow-apps-plugin/etc/checkstyle/checkstyle.xml b/spring-cloud-dataflow-apps-plugin/etc/checkstyle/checkstyle.xml index c3e1de404..ab23c11d4 100644 --- a/spring-cloud-dataflow-apps-plugin/etc/checkstyle/checkstyle.xml +++ b/spring-cloud-dataflow-apps-plugin/etc/checkstyle/checkstyle.xml @@ -1,7 +1,7 @@ + "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" + "https://checkstyle.org/dtds/configuration_1_3.dtd"> @@ -20,9 +20,8 @@ - - - + + diff --git a/spring-cloud-dataflow-apps-plugin/mvnw b/spring-cloud-dataflow-apps-plugin/mvnw index a16b5431b..5e9618cac 100755 --- a/spring-cloud-dataflow-apps-plugin/mvnw +++ b/spring-cloud-dataflow-apps-plugin/mvnw @@ -8,7 +8,7 @@ # "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 +# 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 @@ -19,7 +19,7 @@ # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- -# Maven Start Up Batch script +# Apache Maven Wrapper startup batch script, version 3.3.2 # # Required ENV vars: # ------------------ @@ -27,284 +27,306 @@ # # Optional ENV vars # ----------------- -# M2_HOME - location of maven2's installed home dir # MAVEN_OPTS - parameters passed to the Java VM when running Maven # e.g. to debug Maven itself, use # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 # MAVEN_SKIP_RC - flag to disable loading of mavenrc files # ---------------------------------------------------------------------------- -if [ -z "$MAVEN_SKIP_RC" ] ; then +if [ -z "$MAVEN_SKIP_RC" ]; then - if [ -f /etc/mavenrc ] ; then + if [ -f /usr/local/etc/mavenrc ]; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ]; then . /etc/mavenrc fi - if [ -f "$HOME/.mavenrc" ] ; then + if [ -f "$HOME/.mavenrc" ]; then . "$HOME/.mavenrc" fi fi # OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; +cygwin=false +darwin=false mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi +case "$(uname)" in +CYGWIN*) cygwin=true ;; +MINGW*) mingw=true ;; +Darwin*) + darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)" + export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home" + export JAVA_HOME fi - ;; + fi + ;; esac -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` +if [ -z "$JAVA_HOME" ]; then + if [ -r /etc/gentoo-release ]; then + JAVA_HOME=$(java-config --jre-home) fi fi -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - 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 - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - # For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +if $cygwin; then + [ -n "$JAVA_HOME" ] \ + && JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] \ + && CLASSPATH=$(cygpath --path --unix "$CLASSPATH") fi # For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +if $mingw; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] \ + && JAVA_HOME="$( + cd "$JAVA_HOME" || ( + echo "cannot cd into $JAVA_HOME." >&2 + exit 1 + ) + pwd + )" fi if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "$javaExecutable" : '\([^ ]*\)')" = "no" ]; then # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin; then + javaHome="$(dirname "$javaExecutable")" + javaExecutable="$(cd "$javaHome" && pwd -P)/javac" else - javaExecutable="`readlink -f \"$javaExecutable\"`" + javaExecutable="$(readlink -f "$javaExecutable")" fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` + javaHome="$(dirname "$javaExecutable")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') JAVA_HOME="$javaHome" export JAVA_HOME fi fi fi -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then +if [ -z "$JAVACMD" ]; then + 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 else - JAVACMD="`which java`" + JAVACMD="$( + \unset -f command 2>/dev/null + \command -v java + )" fi fi -if [ ! -x "$JAVACMD" ] ; then +if [ ! -x "$JAVACMD" ]; then echo "Error: JAVA_HOME is not defined correctly." >&2 echo " We cannot execute $JAVACMD" >&2 exit 1 fi -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." +if [ -z "$JAVA_HOME" ]; then + echo "Warning: JAVA_HOME environment variable is not set." >&2 fi -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - # traverses directory structure from process work directory to filesystem root # first directory with .mvn subdirectory is considered project base directory find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" + if [ -z "$1" ]; then + echo "Path not specified to find_maven_basedir" >&2 return 1 fi basedir="$1" wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then + while [ "$wdir" != '/' ]; do + if [ -d "$wdir"/.mvn ]; then basedir=$wdir break fi # workaround for JBEAP-8937 (on Solaris 10/Sparc) if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` + wdir=$( + cd "$wdir/.." || exit 1 + pwd + ) fi # end of workaround done - echo "${basedir}" + printf '%s' "$( + cd "$basedir" || exit 1 + pwd + )" } # concatenates all lines of a file concat_lines() { if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' <"$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" fi } -BASE_DIR=`find_maven_basedir "$(pwd)"` +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") if [ -z "$BASE_DIR" ]; then - exit 1; + exit 1 fi +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + ########################################################################################## # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central # This allows using the maven wrapper in projects that prohibit checking in binary data. ########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.3.2/maven-wrapper-3.3.2.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.2/maven-wrapper-3.3.2.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in wrapperUrl) + wrapperUrl="$safeValue" + break + ;; + esac + done <"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget >/dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" + elif command -v curl >/dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi fi + fi fi ########################################################################################## # End of extension ########################################################################################## -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in wrapperSha256Sum) + wrapperSha256Sum=$value + break + ;; + esac +done <"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum >/dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c >/dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c >/dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi fi + MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` + [ -n "$JAVA_HOME" ] \ + && JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] \ + && CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] \ + && MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") fi # Provide a "standardized" way to retrieve the CLI args that will # work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" export MAVEN_CMD_LINE_ARGS WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain +# shellcheck disable=SC2086 # safe args exec "$JAVACMD" \ $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/spring-cloud-dataflow-apps-plugin/mvnw.cmd b/spring-cloud-dataflow-apps-plugin/mvnw.cmd index 86115719e..4136715f0 100644 --- a/spring-cloud-dataflow-apps-plugin/mvnw.cmd +++ b/spring-cloud-dataflow-apps-plugin/mvnw.cmd @@ -18,13 +18,12 @@ @REM ---------------------------------------------------------------------------- @REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script +@REM Apache Maven Wrapper startup batch script, version 3.3.2 @REM @REM Required ENV vars: @REM JAVA_HOME - location of a JDK home dir @REM @REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven @@ -46,8 +45,8 @@ if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") @REM Execute a user defined script before this one if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre @REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* :skipRcPre @setlocal @@ -60,22 +59,22 @@ set ERROR_CODE=0 @REM ==== START VALIDATION ==== if not "%JAVA_HOME%" == "" goto OkJHome -echo. +echo. >&2 echo Error: JAVA_HOME not found in your environment. >&2 echo Please set the JAVA_HOME variable in your environment to match the >&2 echo location of your Java installation. >&2 -echo. +echo. >&2 goto error :OkJHome if exist "%JAVA_HOME%\bin\java.exe" goto init -echo. +echo. >&2 echo Error: JAVA_HOME is set to an invalid directory. >&2 echo JAVA_HOME = "%JAVA_HOME%" >&2 echo Please set the JAVA_HOME variable in your environment to match the >&2 echo location of your Java installation. >&2 -echo. +echo. >&2 goto error @REM ==== END VALIDATION ==== @@ -120,10 +119,10 @@ SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.3.2/maven-wrapper-3.3.2.jar" -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B ) @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central @@ -134,11 +133,11 @@ if exist %WRAPPER_JAR% ( ) ) else ( if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.3.2/maven-wrapper-3.3.2.jar" ) if "%MVNW_VERBOSE%" == "true" ( echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% + echo Downloading from: %WRAPPER_URL% ) powershell -Command "&{"^ @@ -146,7 +145,7 @@ if exist %WRAPPER_JAR% ( "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ "}" if "%MVNW_VERBOSE%" == "true" ( echo Finished downloading %WRAPPER_JAR% @@ -154,11 +153,36 @@ if exist %WRAPPER_JAR% ( ) @REM End of extension +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash;"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Error 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Error 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Error 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + @REM Provide a "standardized" way to retrieve the CLI args that will @REM work with both Windows and non-Windows executions. set MAVEN_CMD_LINE_ARGS=%* -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* if ERRORLEVEL 1 goto error goto end @@ -168,15 +192,15 @@ set ERROR_CODE=1 :end @endlocal & set ERROR_CODE=%ERROR_CODE% -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost @REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" :skipRcPost @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause +if "%MAVEN_BATCH_PAUSE%"=="on" pause -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% -exit /B %ERROR_CODE% +cmd /C exit /B %ERROR_CODE% diff --git a/spring-cloud-dataflow-apps-plugin/pom.xml b/spring-cloud-dataflow-apps-plugin/pom.xml index 1a481422f..c282e7de4 100644 --- a/spring-cloud-dataflow-apps-plugin/pom.xml +++ b/spring-cloud-dataflow-apps-plugin/pom.xml @@ -3,41 +3,44 @@ 4.0.0 org.springframework.cloud spring-cloud-dataflow-apps-plugin-parent - 1.0.15-SNAPSHOT + 1.1.0-SNAPSHOT spring-cloud-dataflow-apps-plugin-parent Spring Cloud Dataflow Apps Plugin Parent pom - 17 - 3.4.1 - 3.2.1 - 2.22.2 UTF-8 UTF-8 + 3.2.0 + 3.5.0 + 3.15.1 + 3.2.1 + 3.0.0 ${java.version} ${java.version} - 3.1.0 false true true true - 8.29 - https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow-apps-plugin/master/etc/checkstyle - - ${checkstyle.location}/checkstyle-suppressions.xml - - - ${checkstyle.location}/nohttp-checkstyle.xml - - - ${checkstyle.location}/checkstyle-suppressions.xml + 10.3.4 + + ${maven.multiModuleProjectDirectory}/etc/checkstyle + ${checkstyle.location}/checkstyle-suppressions.xml + ${checkstyle.location}/nohttp-checkstyle.xml + ${checkstyle.location}/checkstyle-suppressions.xml - 0.0.2.RELEASE + 0.0.11 true - 0.0.7 + 0.0.43 + + 3.9.9 + 3.15.1 + 2.16.1 + 1.12.0 + 3.3.6 + 6.1.15 + 2023.0.4 - spring-cloud-dataflow-apps-generator-plugin spring-cloud-dataflow-apps-metadata-plugin @@ -56,12 +59,11 @@ - Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 - Copyright 2014-2020 the original author or authors. + Copyright 2014-2024 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. @@ -83,11 +85,79 @@ scm:git:ssh://git@github.com/spring-cloud/spring-cloud-dataflow-apps-plugin.git https://github.com/spring-cloud/spring-cloud-dataflow-apps-plugin + + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + org.apache.maven + maven-core + ${maven-api.version} + + + org.apache.maven + maven-plugin-api + ${maven-api.version} + + + org.apache.maven.plugin-tools + maven-plugin-annotations + ${maven-plugin-annotations.version} + + + commons-io + commons-io + ${commons.io.version} + + + org.apache.commons + commons-text + ${commons-text.version} + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + + + org.apache.maven.plugins + maven-plugin-plugin + ${maven-plugin-plugin.version} + + + org.apache.maven.plugins + maven-source-plugin + ${maven-source-plugin.version} + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${maven-checkstyle-plugin.version} + + + + org.apache.maven.plugins maven-javadoc-plugin - ${maven-javadoc-plugin.version} javadoc @@ -98,13 +168,13 @@ - 1.8 true + syntax + org.apache.maven.plugins maven-source-plugin - ${maven-source-plugin.version} attach-sources @@ -118,10 +188,10 @@ org.apache.maven.plugins maven-surefire-plugin - ${maven-surefire-plugin.version} 1 1 + true **/*Tests.java **/*Test.java @@ -134,7 +204,6 @@ org.apache.maven.plugins maven-checkstyle-plugin - ${maven-checkstyle-plugin.version} com.puppycrawl.tools @@ -241,8 +310,6 @@ - - milestone diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/README.adoc b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/README.adoc index cbd50246b..fb2f3e4d6 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/README.adoc +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/README.adoc @@ -1,44 +1,36 @@ = Spring Cloud Stream & Task Maven Documentation Plugin -Maven plugin for generating documentation for Spring Cloud stream and task app starters. +Maven plugin for generating documentation for https://github.com/spring-cloud/stream-applications[Spring Cloud Stream Applications]. -Assuming a Spring Cloud Stream / Task app (or app starter) has -specified selected configuration properties to be visible (i.e., providing src/main/resources/META-INF/dataflow-configuration-metadata.properties), -this plugin will help automate the documentation of such properties. -https://docs.spring.io/spring-cloud-dataflow/docs/1.1.0.M2/reference/html/spring-cloud-dataflow-register-apps.html#spring-cloud-dataflow-stream-app-whitelisting[whitelisted] -some configuration properties, this plugin will help automate the documentation of such properties. +Assuming a Spring Cloud Stream / Spring Cloud Task app has exposed application properties to be visible (i.e. provided a https://dataflow.spring.io/docs/applications/application-metadata/#exposing-application-properties-for-data-flow[dataflow-configuration-metadata.properties]), this plugin will help generate documentation for the properties. == Usage - To use this plugin, simply add the following markers to your project `README.adoc` file: - -``` +[source, properties] +---- //tag::configuration-properties[] //end::configuration-properties[] -``` - - +---- Then, configure this plugin for your app project (either directly or through a parent POM): -``` - - - - org.springframework.cloud.stream.app.plugin - spring-cloud-stream-app-documentation-maven-plugin - 1.0.0.BUILD-SNAPSHOT - - - generate-documentation - verify - - generate-documentation - - - - - - -``` - -Documentation for the visible properties shall appear on next build, which should be committed under VCS. - +[source, xml] +---- + + + + org.springframework.cloud + spring-cloud-dataflow-apps-docs-plugin + 1.1.0-SNAPSHOT + + + generate-documentation + verify + + generate-documentation + + + + + + +---- +Documentation for the visible properties shall appear on next build, which should then be committed to source control. diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/pom.xml b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/pom.xml index 07f5991af..2c52d87d4 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/pom.xml +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/pom.xml @@ -5,90 +5,66 @@ org.springframework.cloud spring-cloud-dataflow-apps-plugin-parent - 1.0.15-SNAPSHOT + 1.1.0-SNAPSHOT .. - spring-cloud-dataflow-apps-docs-plugin maven-plugin - - - org.apache.maven - maven-plugin-api - 3.5.2 - org.apache.maven maven-core - 3.5.2 + provided - org.springframework.cloud - spring-cloud-dataflow-configuration-metadata - 2.7.0 + org.apache.maven + maven-plugin-api + provided - org.apache.maven.plugin-tools maven-plugin-annotations - 3.4 provided - - junit - junit - 4.12 - test + org.springframework.boot + spring-boot-loader-classic - org.assertj - assertj-core - 3.15.0 + org.springframework.cloud + spring-cloud-dataflow-configuration-metadata + 2.11.5 + + + org.springframework.boot + spring-boot-starter-test test - org.apache.maven.plugins maven-plugin-plugin - 3.5 - - - org.apache.maven.plugins - maven-compiler-plugin - 1.8 - 1.8 + generate-app + true + + + mojo-descriptor + + descriptor + + + + help-goal + + helpmojo + + + - - - - spring - - - - true - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - - - false - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - - - diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/ConfigurationMetadataDocumentationMojo.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/ConfigurationMetadataDocumentationMojo.java index 714baf085..8fd9117ce 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/ConfigurationMetadataDocumentationMojo.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/ConfigurationMetadataDocumentationMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 the original author or authors. + * Copyright 2016-2024 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. @@ -418,14 +418,14 @@ public Manifest getManifest() { } @Override - public List getNestedArchives(EntryFilter ignored) throws IOException { + public Iterator getNestedArchives(EntryFilter ignored, EntryFilter ignored2) throws IOException { try { List archives = new ArrayList<>(mavenProject.getRuntimeClasspathElements().size()); for (String dep : mavenProject.getRuntimeClasspathElements()) { File file = new File(dep); archives.add(file.isDirectory() ? new ExplodedArchive(file) : new JarFileArchive(file)); } - return archives; + return archives.iterator(); } catch (DependencyResolutionRequiredException e) { throw new IOException("Could not create boot archive", e); diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/ConfigurationMetadataDocumentationMojoTests.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/ConfigurationMetadataDocumentationMojoTests.java index f5b72ced9..afb7c1494 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/ConfigurationMetadataDocumentationMojoTests.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-docs-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/ConfigurationMetadataDocumentationMojoTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2024 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. @@ -16,21 +16,19 @@ package org.springframework.cloud.dataflow.app.plugin; -import org.junit.Test; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; public class ConfigurationMetadataDocumentationMojoTests { @Test - public void testJavaTypeBeautifier() { + void javaTypeBeautifier() { ConfigurationMetadataDocumentationMojo mojo = new ConfigurationMetadataDocumentationMojo(); String s = mojo.niceType("java.lang.String"); assertThat(s).isEqualTo("String"); - s = mojo.niceType("java.lang.Class"); assertThat(s).isEqualTo("Class"); - s = mojo.niceType("java.util.Map$Entry>>"); assertThat(s).isEqualTo("Entry>>"); } diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/README.adoc b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/README.adoc index e7cf35922..2bf440a11 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/README.adoc +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/README.adoc @@ -1,14 +1,14 @@ = spring-cloud-dataflow-apps-generator-plugin -Maven plugin for generating spring cloud stream applications: https://github.com/spring-cloud/stream-applications +Maven plugin for generating https://github.com/spring-cloud/stream-applications[Spring Cloud Stream Applications]. + It generates a separate maven project for every configured binder. -Plugin `Application` section helps to configure the application project independently form the Binders that -can be used. The `Binders` section helps to define the Binder specific configurations, that are merged to -the `Application` configurations to generate the binder specific maven projects. +Plugin `Application` section helps to configure the application project independently form the Binders that can be used. + +The `Binders` section helps to define the Binder specific configurations, that are merged to the `Application` configurations to generate the binder specific maven projects. -The `Global` section (e.g. `global.application` and `global.binders`) helps to define configurations sharable -between many Applications and Binders. +The `Global` section (e.g. `global.application` and `global.binders`) helps to define configurations sharable between many Applications and Binders. As the following diagram illustrates, both the `Application` and the `Binder` allow configuring various application and maven properties: @@ -16,10 +16,13 @@ As the following diagram illustrates, both the `Application` and the image::src/main/resources/doc/MojoConfiguration.jpg[] == Build +Java 17 required. +[source, bash] +---- +mvn clean package +---- -mvn clean package [Requires JDK 8] - -== Sample Configuration for generating spring cloud stream apps +== Sample Configuration In the parent POM define the `Application` and `Binder` configurations common for all applications to be generated. Do this under the `pluginManagement` pom section and use the plugin's `global` configuration: @@ -27,137 +30,70 @@ Do this under the `pluginManagement` pom section and use the plugin's `global` c [source, xml] ---- - - - org.springframework.cloud - spring-cloud-dataflow-apps-generator-plugin - 1.0.0-SNAPSHOT - - - app-gen - package - - generate-app - - - - - ${basedir}/apps - - - - - ${spring-boot.version} - - - true - - - - 2.0.2.BUILD-SNAPSHOT - - + + + org.springframework.cloud + spring-cloud-dataflow-apps-generator-plugin + 1.1.0-SNAPSHOT + + + app-gen + package + + generate-app + + + + + ${basedir}/apps + + + ${spring-boot.version} + + yourOrgNameGoesHere + true + + + + + + 1.1.0-SNAPSHOT + + + + + + + + + + + + - - - org.springframework.cloud.fn - function-dependencies - ${java-functions.version} - - - org.springframework.cloud - spring-cloud-stream-dependencies - ${spring-cloud-stream-dependencies.version} - - - org.springframework.cloud - spring-cloud-function-dependencies - ${spring-cloud-function-dependencies.version} - + org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud-dependencies.version} + spring-cloud-stream-binder-kafka - + + + + + - org.springframework.cloud.stream.app - stream-applications-security-common - - - org.springframework.cloud.stream.app - stream-applications-micrometer-common - - - org.springframework.cloud.stream.app - stream-applications-postprocessor-common - - - io.micrometer - micrometer-registry-prometheus - - - io.micrometer.prometheus - prometheus-rsocket-spring - - - io.micrometer - micrometer-registry-wavefront - - - io.pivotal.cfenv - java-cfenv-boot - - - org.springframework.boot - spring-boot-configuration-processor - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-logging - - - org.springframework.boot - spring-boot-starter-security + org.springframework.cloud + spring-cloud-stream-binder-rabbit - - - - - - - org.springframework.cloud - spring-cloud-stream-binder-kafka - - - - - - - - - org.springframework.cloud - spring-cloud-stream-binder-rabbit - - - - - - - - - + + + + + + ---- @@ -172,14 +108,13 @@ to the global: org.springframework.cloud spring-cloud-dataflow-apps-generator-plugin - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT syslog source ${project.version} org.springframework.cloud.fn.supplier.syslog.SyslogSupplierConfiguration.class - @@ -196,107 +131,5 @@ to the global: - ... ---- - - -== Configure Solace and Pubsub binders support - -To generate applications for https://github.com/SolaceProducts/spring-cloud-stream-binder-solace[Solace] binders, extend your `binders` section with following configuration: - -[source, xml] ----- - - .... - - - - - com.solace.spring.cloud - spring-cloud-starter-stream-solace - 1.2.1 - - - - - .... - ----- - -You can add it either to your application's POM or to the parent's `global` POM sections. - -Similar to generate application for the https://github.com/spring-cloud/spring-cloud-gcp/tree/master/spring-cloud-gcp-pubsub-stream-binder[PubSub] -binders and to your binders section configuration like this: - -[source, xml] ----- - -... - - - - - org.springframework.cloud - spring-cloud-gcp-dependencies - 1.2.4.RELEASE - - - - - org.springframework.cloud - spring-cloud-gcp-pubsub-stream-binder - - - - -... - ----- - -== Custom Spring Boot Maven Plugin Configuration - -Spring Boot Maven plugin offers a number of customization options by specifying a configuration section in the plugin definition. -For example, using the custom configuration, you can instruct the plugin to unpack a particular dependency. -You would do that using Spring Boot Maven plugin as below. -``` - - org.springframework.boot - spring-boot-maven-plugin - - - - org.python - jython-standalone - - - - -``` - -When using the app generator plugin, you can ask the plugin to include this information when it generates the necessary XML snippets for adding the Spring Boot Maven plugin. -Below is an example of doing so. -``` - - org.springframework.cloud - spring-cloud-dataflow-apps-generator-plugin - - - ... - - - - org.python - jython-standalone - - - ]]> - - ... - - -``` - -Pay attention to how the Spring Boot plugin configuration is wrapped inside a `CDATA` element. -This is necessary for the app generator to properly parse this information. \ No newline at end of file diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/pom.xml b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/pom.xml index 6c2bee41d..1feb2ce8d 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/pom.xml +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/pom.xml @@ -2,71 +2,48 @@ 4.0.0 - spring-cloud-dataflow-apps-generator-plugin maven-plugin spring-cloud-dataflow-apps-generator-plugin - org.springframework.cloud spring-cloud-dataflow-apps-plugin-parent - 1.0.15-SNAPSHOT + 1.1.0-SNAPSHOT .. - - - UTF-8 - 3.9.2 - 3.9.0 - 1.15 - 6.0.8 - 2.12.0 - - - - com.samskivert - jmustache - ${jmustache.version} - - - - org.springframework - spring-core - ${spring.version} - - - - org.apache.maven - maven-plugin-api - provided - ${maven.version} - - - org.apache.maven - maven-core - ${maven.version} - - - org.apache.maven.plugin-tools - maven-plugin-annotations - ${maven.plugin.version} - provided - - + + org.apache.maven + maven-core + provided + + + org.apache.maven + maven-plugin-api + provided + + + org.apache.maven.plugin-tools + maven-plugin-annotations + provided + + + org.springframework + spring-core + + + com.samskivert + jmustache + commons-io commons-io - ${commons.io.version} - - - - - junit - junit - 4.13 - test + + org.springframework.boot + spring-boot-starter-test + test + org.apache.maven.plugin-testing maven-plugin-testing-harness @@ -76,23 +53,15 @@ org.apache.maven maven-compat - ${maven.version} - test - - - org.assertj - assertj-core - 3.15.0 + ${maven-api.version} test - org.apache.maven.plugins maven-plugin-plugin - ${maven.plugin.version} generate-app true @@ -112,55 +81,6 @@ - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - - - - - run-its - - - - org.apache.maven.plugins - maven-invoker-plugin - 3.2.1 - - true - ${project.build.directory}/it - - */pom.xml - - verify - ${project.build.directory}/local-repo - src/it/settings.xml - - clean - test-compile - - - - - integration-test - - install - integration-test - verify - - - - - - - - - - diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/MavenXmlWriter.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/MavenXmlWriter.java index 8294dde2e..df34163b8 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/MavenXmlWriter.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/MavenXmlWriter.java @@ -1,5 +1,5 @@ /* - * Copyright 2020-2020 the original author or authors. + * Copyright 2020-2024 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. @@ -57,7 +57,7 @@ private MavenXmlWriter() { public static String toXml(T element) { String privateMethodName = "write" + element.getClass().getSimpleName(); String xmlTagName = element.getClass().getSimpleName().toLowerCase(); - return write(serializer -> invokeMavenXppWriteMethod(element, privateMethodName, xmlTagName, serializer)); + return write(xmlTagName, serializer -> invokeMavenXppWriteMethod(element, privateMethodName, xmlTagName, serializer)); } /** @@ -103,32 +103,37 @@ public static String toXml(Plugin plugin) { throw new IllegalStateException("Issue creating config for additional plugin", ex); } - return write(serializer -> invokeMavenXppWriteMethod( + return write("plugin", serializer -> invokeMavenXppWriteMethod( plugin, "writePlugin", "plugin", serializer)); } /** - * Template method that helps generating well-formed and valid XML segments. It uses the {@link XmlSerializer} - * to create the create the XML structure and delegates to the #elementWriter callback to fill in the content. + * Generates well-formed and valid XML segments with the help of + * {@link XmlSerializer}. * - * @param elementWriter Callback handler that contributes the XML content. - * @return Returns well-formed XML element. + * @param xmlTagName the tag of the element + * @param elementWriter callback handler that writes the XML content + * @return well-formed XML element with namespace element removed */ - public static String write(Consumer elementWriter) { + public static String write(String xmlTagName, Consumer elementWriter) { try { Writer writer = new StringWriter(); - XmlSerializer serializer = new MXSerializer(); serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " "); serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n"); serializer.setOutput(writer); - serializer.startDocument("UTF-8", null); elementWriter.accept(serializer); serializer.endDocument(); - String result = writer.toString(); - return result.substring(result.indexOf('\n') + 1); // remove first line (e.g. remove the ) + // Strip the namespace info + // E.g. 'one' with xml + // tag 'thing' will return 'one' + int xmlTagNameIdx = result.indexOf("<" + xmlTagName); + if (xmlTagNameIdx != -1) { + result = result.substring(xmlTagNameIdx); + } + return result; } catch (Exception e) { throw new IllegalStateException(e); @@ -168,6 +173,9 @@ public static void invokeMavenXppWriteMethod(T modelElementToWrite, String w public static String indent(String input, int indentation) { String indentPrefix = "\n" + IntStream.range(0, indentation).mapToObj(i -> " ").collect(Collectors.joining()); String indentedInput = input.replace("\n", indentPrefix); - return indentedInput.substring(0, indentedInput.lastIndexOf(indentPrefix)); // remove the last empty line. + if (input.endsWith(indentPrefix)) { + indentedInput = indentedInput.substring(0, indentedInput.lastIndexOf(indentPrefix)); // remove the last empty line. + } + return indentedInput; } } diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/BinderDefinition.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/BinderDefinition.java index 687df6a86..2c9ac8b0a 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/BinderDefinition.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/BinderDefinition.java @@ -1,5 +1,5 @@ /* - * Copyright 2020-2020 the original author or authors. + * Copyright 2020-2024 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. diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/MavenDefinition.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/MavenDefinition.java index 56d46fe25..c13b282b5 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/MavenDefinition.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/MavenDefinition.java @@ -1,5 +1,5 @@ /* - * Copyright 2020-2020 the original author or authors. + * Copyright 2020-2024 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. diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/ProjectGenerator.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/ProjectGenerator.java index 1ec767439..584c29134 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/ProjectGenerator.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/ProjectGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2020-2020 the original author or authors. + * Copyright 2020-2024 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. diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/ProjectGeneratorProperties.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/ProjectGeneratorProperties.java index d2a9eb073..1550de5f4 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/ProjectGeneratorProperties.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/generator/ProjectGeneratorProperties.java @@ -1,5 +1,5 @@ /* - * Copyright 2020-2020 the original author or authors. + * Copyright 2020-2024 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. diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/App.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/App.java index efe8698a0..1e2eafaa6 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/App.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/App.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2020 the original author or authors. + * Copyright 2019-2024 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. diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/AppTests.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/AppTests.java index c10aa855d..f6824eb82 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/AppTests.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/AppTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2020 the original author or authors. + * Copyright 2019-2024 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. diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/app-pom.xml b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/app-pom.xml index 6ff785817..1a828bb3f 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/app-pom.xml +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/app-pom.xml @@ -32,7 +32,7 @@ true UTF-8 - 3.4.1 + 3.5.0 3.2.1 {{#app.maven.properties}} @@ -232,7 +232,7 @@ maven-surefire-plugin - 2.21.0 + 3.0.0 1 1 diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/apps-modules-pom.xml b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/apps-modules-pom.xml index e3c8d34bf..88d2dd813 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/apps-modules-pom.xml +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/main/resources/template/apps-modules-pom.xml @@ -15,7 +15,7 @@ Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 - Copyright 2014-2020 the original author or authors. + Copyright 2014-2024 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. diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MojoHarnessTest.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MojoHarnessTest.java index 46f759f15..b4f778972 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MojoHarnessTest.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MojoHarnessTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2020-2020 the original author or authors. + * Copyright 2020-2024 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. @@ -25,70 +25,65 @@ import java.util.Properties; import java.util.stream.Collectors; +import org.apache.maven.execution.DefaultMavenExecutionRequest; +import org.apache.maven.execution.MavenExecutionRequest; import org.apache.maven.model.Dependency; import org.apache.maven.model.Model; import org.apache.maven.model.Parent; import org.apache.maven.model.Plugin; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; -import org.apache.maven.plugin.testing.MojoRule; +import org.apache.maven.plugin.testing.AbstractMojoTestCase; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuilder; +import org.apache.maven.project.ProjectBuildingRequest; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.eclipse.aether.DefaultRepositorySystemSession; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; /** * @author Christian Tzolov */ -public class MojoHarnessTest { +class MojoHarnessTest extends AbstractMojoTestCase { - @Rule - public TemporaryFolder projectHome = new TemporaryFolder(); - - @Rule - public MojoRule mojoRule = new MojoRule(); + @BeforeEach + void prepareForTest() throws Exception { + super.setUp(); + } @Test - public void testSomething() throws Exception { - - File pomRoot = new File("src/test/resources/unit/http-source-apps/"); - - SpringCloudStreamAppGeneratorMojo myMojo = (SpringCloudStreamAppGeneratorMojo) - mojoRule.lookupConfiguredMojo(pomRoot, "generate-app"); - + void httpSourceAppsGeneration() throws Exception { + File pomRoot = new File("src/test/resources/unit/http-source-apps"); + MavenProject project = readMavenProject(pomRoot); + SpringCloudStreamAppGeneratorMojo myMojo = (SpringCloudStreamAppGeneratorMojo) super.lookupConfiguredMojo(project, "generate-app"); assertThat(myMojo).isNotNull(); myMojo.execute(); assertThat(new File("./target/apps/http-source-kafka/src/main/resources/test.txt")).exists(); - assertThat(new File("./target/apps/http-source-kafka/src/main/resources/application.properties")).exists(); Properties applicationProperties = new Properties(); applicationProperties.load(new FileReader("./target/apps/http-source-kafka/src/main/resources/application.properties")); assertThat(applicationProperties.getProperty("spring.cloud.function.definition")).isEqualTo("httpSupplier"); - assertThat(applicationProperties.getProperty("static.property")).isEqualTo("bla"); Model pomModel = getModel(new File("./target/apps")); List dependencies = pomModel.getDependencies(); assertThat(dependencies.size()).isEqualTo(15); - assertThat(dependencies.stream() .filter(d -> d.getArtifactId().equals("http-supplier")).count()).isEqualTo(1); - assertThat(dependencies.stream() .filter(d -> d.getArtifactId().equals("stream-applications-postprocessor-common")).count()).isEqualTo(1); - assertThat(dependencies.stream() .filter(d -> d.getArtifactId().equals("spring-cloud-stream-binder-kafka")).count()).isEqualTo(1); Parent parent = pomModel.getParent(); assertThat(parent.getArtifactId()).isEqualTo("spring-boot-starter-parent"); assertThat(parent.getVersion()).isEqualTo("3.3.0.M3"); - assertThat(pomModel.getArtifactId()).isEqualTo("http-source-kafka"); assertThat(pomModel.getGroupId()).isEqualTo("org.springframework.cloud.stream.app.test"); assertThat(pomModel.getName()).isEqualTo("http-source-kafka"); @@ -96,7 +91,6 @@ public void testSomething() throws Exception { assertThat(pomModel.getDescription()).isEqualTo("Spring Cloud Stream Http Source Kafka Binder Application"); List plugins = pomModel.getBuild().getPlugins(); - assertThat(plugins.stream().filter(p -> p.getArtifactId().equals("spring-boot-maven-plugin")).count()).isEqualTo(1); assertThat(plugins.stream().filter(p -> p.getArtifactId().equals("properties-maven-plugin")).count()).isEqualTo(1); assertThat(plugins.stream().filter(p -> p.getArtifactId().equals("jib-maven-plugin")).count()).isEqualTo(1); @@ -108,8 +102,8 @@ public void testSomething() throws Exception { ""); assertThat(jibPlugin.getConfiguration().toString()).contains("testspringcloud/${project.artifactId}:3.0.0.BUILD-SNAPSHOT"); assertThat(jibPlugin.getConfiguration().toString()).contains("globalBaseImage"); - assertThat(pomModel.getRepositories().size()).isEqualTo(5); + assertThat(pomModel.getRepositories().size()).isEqualTo(5); assertThat(pomModel.getRepositories().stream().map(r -> r.getId()).collect(Collectors.toList())) .contains("bintray-global", "bintray-application", "bintray-binder"); } @@ -123,5 +117,16 @@ private Model getModel(File rootPath) { throw new IllegalStateException(e); } } -} + private MavenProject readMavenProject(File basedir) throws Exception { + File pom = new File(basedir, "pom.xml"); + MavenExecutionRequest request = new DefaultMavenExecutionRequest(); + request.setBaseDirectory(basedir); + ProjectBuildingRequest configuration = request.getProjectBuildingRequest(); + configuration.setRepositorySession(new DefaultRepositorySystemSession()); + ProjectBuilder projectBuilder = (ProjectBuilder) super.lookup(ProjectBuilder.class.getName()); + MavenProject project = projectBuilder.build(pom, configuration).getProject(); + assertNotNull(project); + return project; + } +} diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java index 19ef4ff73..fd37937be 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java @@ -33,25 +33,23 @@ import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.codehaus.plexus.util.xml.Xpp3Dom; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; import org.springframework.cloud.dataflow.app.plugin.generator.AppDefinition; import org.springframework.util.ReflectionUtils; import static org.assertj.core.api.Assertions.assertThat; - /** * @author Christian Tzolov * @author Soby Chacko */ public class SpringCloudStreamAppGeneratorMojoTest { - @Rule - public TemporaryFolder projectHome = new TemporaryFolder(); + @TempDir + public File projectHome; private SpringCloudStreamAppGeneratorMojo springCloudStreamAppMojo = new SpringCloudStreamAppGeneratorMojo(); @@ -59,8 +57,8 @@ public class SpringCloudStreamAppGeneratorMojoTest { private SpringCloudStreamAppGeneratorMojo.Application application; - @Before - public void before() throws NoSuchFieldException { + @BeforeEach + public void prepareForTest() throws NoSuchFieldException { application = new SpringCloudStreamAppGeneratorMojo.Application(); application.setName("log"); @@ -110,7 +108,7 @@ public void before() throws NoSuchFieldException { setMojoProperty("binders", binders); //setMojoProperty("generatedProjectHome", "./target/apps"); - setMojoProperty("generatedProjectHome", projectHome.getRoot().getAbsolutePath()); + setMojoProperty("generatedProjectHome", projectHome.getAbsolutePath()); } @Test @@ -122,7 +120,7 @@ public void testWithDisabledContainerMetadata() throws Exception { springCloudStreamAppMojo.execute(); //Model pomModel = getModel(new File("./target/apps")); - Model pomModel = getModel(new File(projectHome.getRoot().getAbsolutePath())); + Model pomModel = getModel(new File(projectHome.getAbsolutePath())); List plugins = pomModel.getBuild().getPlugins(); // The properties-maven-plugin should not be defined if the container metadata is not enabled. @@ -146,7 +144,7 @@ public void testDefaultProjectCreationByPlugin() throws Exception { springCloudStreamAppMojo.execute(); //assertGeneratedPomXml(new File("./target/apps")); - assertGeneratedPomXml(new File(projectHome.getRoot().getAbsolutePath())); + assertGeneratedPomXml(new File(projectHome.getAbsolutePath())); } @Test @@ -162,7 +160,7 @@ public void testCustomBootMavenPluginConfiguration() throws Exception { springCloudStreamAppMojo.execute(); - Model pomModel = getModel(new File(projectHome.getRoot().getAbsolutePath())); + Model pomModel = getModel(new File(projectHome.getAbsolutePath())); List plugins = pomModel.getBuild().getPlugins(); final Optional bootPlugin = plugins.stream().filter(p -> p.getArtifactId().equals("spring-boot-maven-plugin")).findFirst(); assertThat(bootPlugin.isPresent()).isTrue(); diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml index 48cbefc6d..892149b79 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml @@ -14,7 +14,7 @@ 3.3.0.M3 5.0.0-SNAPSHOT 3.2.0 - 1.0.13-SNAPSHOT + 1.1.0-SNAPSHOT 5.0.0-SNAPSHOT @@ -29,7 +29,7 @@ org.springframework.cloud spring-cloud-dataflow-apps-generator-plugin - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT app-gen @@ -219,7 +219,7 @@ org.springframework.cloud spring-cloud-dataflow-apps-generator-plugin - 1.0.0-SNAPSHOT + 1.1.0-SNAPSHOT ./target/apps @@ -280,11 +280,10 @@ org.springframework.cloud - spring-cloud-app-starter-metadata-maven-plugin - 2.0.0.BUILD-SNAPSHOT + spring-cloud-apps-metadata-plugin + 1.1.0-SNAPSHOT true - server.port diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/README.adoc b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/README.adoc index 4920beb51..20ab40c20 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/README.adoc +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/README.adoc @@ -1,84 +1,85 @@ = Spring Cloud Stream & Task Maven Metadata Plugin -Maven plugin for aggregating Spring Boot metadata from all dependencies of a project into -a single metadata-only artifact. +Maven plugin for aggregating Spring Boot metadata from all dependencies of a project into a single metadata-only artifact. == Usage -To use this plugin, configure this plugin for your app project (either directly or through a parent POM): -``` - - - - org.springframework.cloud.stream.app.plugin - spring-cloud-app-starter-metadata-maven-plugin - 2.0.0.BUILD-SNAPSHOT - - - aggregate-metadata - compile - - aggregate-metadata - - - - - - -``` +To use this plugin, configure this plugin for your app project: +[source, xml] +---- + + + + org.springframework.cloud + spring-cloud-dataflow-apps-metadata-plugin + 1.1.0-SNAPSHOT + + + aggregate-metadata + compile + + aggregate-metadata + + + + + + +---- + +This will produce and attach to the build a jar file named `--metadata.jar` where the `metadata` suffix is the maven classifier and can be customized as follows: +[source, xml] +---- + + + + org.springframework.cloud + spring-cloud-dataflow-apps-metadata-plugin + 1.1.0-SNAPSHOT + + + aggregate-metadata + compile + + aggregate-metadata + + + mymetadata + + + + + + +---- -This will produce and attach to the build a jar file named `--metadata.jar` (`metadata` being the -maven classifier used for the artifact, which can be customized as such:) -``` - - - - org.springframework.cloud.stream.app.plugin - spring-cloud-app-starter-metadata-maven-plugin - 2.0.0.BUILD-SNAPSHOT - - - aggregate-metadata - compile - - aggregate-metadata - - - foobar - - - - - - -``` +The gathered metadata can be filtered and stored into a java properties file named `META-INF/spring-configuration-metadata-encoded.properties`. +The file includes a single property named `org.springframework.cloud.dataflow.spring.configuration.metadata.json` which contains the filtered metadata encoded as Base64. -You can filter in subset of the gathered metadata and store it into a java property file: `META-INF/spring-configuration-metadata-encoded.properties`. -This file has single property `org.springframework.cloud.dataflow.spring.configuration.metadata.json` which contains the pre-filtered metadata encoded as Base64. -To activate this feature you need to set the `storeFilteredMetadata` parameter to `true`. Use the `metadataFilter` to configure the whitelisted metadata content to include. -For example: -``` +To activate the feature, set the `storeFilteredMetadata` configuration option to `true`. +Use the `metadataFilter` configuration option to specify the metadata to include. + +The following example includes the `server.port` property and all properties from two configuration properties classes: +[source, xml] +---- org.springframework.cloud - spring-cloud-app-starter-metadata-maven-plugin - 2.0.0.BUILD-SNAPSHOT - + spring-cloud-dataflow-apps-metadata-plugin + 1.1.0-SNAPSHOT true - server.port - io.pivotal.java.function.http.supplier.HttpSourceProperties - io.pivotal.java.function.http.supplier.HttpSourceProperties$Cors + com.example.MyConfigProperties + com.example.MyOtherConfigProperties - aggregate-metadata @@ -91,5 +92,4 @@ For example: -``` - +---- diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/pom.xml b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/pom.xml index 0200db619..ce95209c9 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/pom.xml +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/pom.xml @@ -1,150 +1,88 @@ 4.0.0 - spring-cloud-dataflow-apps-metadata-plugin maven-plugin - org.springframework.cloud spring-cloud-dataflow-apps-plugin-parent - 1.0.15-SNAPSHOT + 1.1.0-SNAPSHOT .. - - - 3.6.3 - 4.12 - 3.11.1 - 1.8 - 5.2.8.RELEASE - 1.26 - - + + org.apache.maven + maven-core + provided + org.apache.maven maven-plugin-api - ${maven.version} + provided + + + org.apache.maven.plugin-tools + maven-plugin-annotations provided org.springframework spring-core - ${spring.version} org.springframework spring-beans - ${spring.version} - - - org.yaml - snakeyaml - ${snakeyaml.version} - - - org.apache.maven - maven-core - ${maven.version} org.springframework.boot spring-boot-configuration-processor - 2.3.2.RELEASE - - - io.rsocket - rsocket-core - 1.0.1 org.springframework.boot - spring-boot-loader - 2.3.2.RELEASE + spring-boot-loader-classic - junit - junit - ${junit.version} - test + org.apache.commons + commons-text - org.assertj - assertj-core - ${assertj.version} - test + io.rsocket + rsocket-core - org.apache.maven.plugin-tools - maven-plugin-annotations - 3.4 - provided + org.yaml + snakeyaml - org.apache.commons - commons-text - ${commons-text.version} + org.springframework.boot + spring-boot-starter-test + test - org.apache.maven.plugins maven-plugin-plugin - 3.5 - - - org.apache.maven.plugins - maven-compiler-plugin - 1.8 - 1.8 + generate-app + true + + + mojo-descriptor + + descriptor + + + + help-goal + + helpmojo + + + - - - - spring - - - - true - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - - - false - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - - - - - true - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - - - false - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - - - diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/MetadataAggregationMojo.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/MetadataAggregationMojo.java index 485657b4f..343979670 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/MetadataAggregationMojo.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/main/java/org/springframework/cloud/dataflow/app/plugin/MetadataAggregationMojo.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2020 the original author or authors. + * Copyright 2017-2024 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. diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/EnumHintProviderTest.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/EnumHintProviderTest.java index 4acea3688..886f56322 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/EnumHintProviderTest.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/EnumHintProviderTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2018-2020 the original author or authors. + * Copyright 2018-2024 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. @@ -16,7 +16,7 @@ package org.springframework.cloud.dataflow.app.plugin; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.boot.configurationprocessor.metadata.ConfigurationMetadata; import org.springframework.boot.configurationprocessor.metadata.ItemHint; @@ -29,28 +29,20 @@ /** * @author David Turanski **/ -public class EnumHintProviderTest { - private JsonMarshaller jsonMarshaller = new JsonMarshaller(); +class EnumHintProviderTest { @Test - public void test() throws Exception { + void enumHintsAdded() throws Exception { + JsonMarshaller jsonMarshaller = new JsonMarshaller(); ConfigurationMetadata configurationMetadata = jsonMarshaller.read(new ClassPathResource("META-INF/spring" + "-configuration-metadata.json").getInputStream()); - new MetadataAggregationMojo().addEnumHints(configurationMetadata, this.getClass().getClassLoader()); - assertThat(configurationMetadata.getHints()).hasSize(1); - ItemHint itemHint = configurationMetadata.getHints().get(0); - - // equals fails on ValueHint so ... // assertThat(new ItemHint.ValueHint("SINGLE",null)).isEqualTo(new ItemHint.ValueHint("SINGLE",null)); - assertThat(itemHint.getValues()).hasSize(2); - assertThat(itemHint.getValues().get(0).getValue()).isEqualTo(Expresso.SINGLE); assertThat(itemHint.getValues().get(1).getValue()).isEqualTo(Expresso.DOUBLE); - } } diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MergeWhitelistPropertiesTest.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MergeWhitelistPropertiesTest.java index 1e025415e..ba643b0db 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MergeWhitelistPropertiesTest.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/MergeWhitelistPropertiesTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2018-2020 the original author or authors. + * Copyright 2018-2024 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. @@ -19,7 +19,7 @@ import java.io.IOException; import java.util.Properties; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.core.io.ClassPathResource; @@ -29,29 +29,24 @@ /** * @author David Turanski - **/ - -public class MergeWhitelistPropertiesTest { + */ +class MergeWhitelistPropertiesTest { @Test - public void merge() throws IOException { + void mergeProperties() throws IOException { Properties properties1 = new Properties(); properties1.load(new ClassPathResource("META-INF/whitelist-1.properties").getInputStream()); - Properties properties2 = new MetadataAggregationMojo().merge(properties1, new ClassPathResource("META-INF/whitelist-2.properties").getInputStream()); - assertThat(properties2).containsKeys(CONFIGURATION_PROPERTIES_CLASSES, CONFIGURATION_PROPERTIES_NAMES); } @Test - public void mergeReverseOrder() throws IOException { + public void mergePropertiesReverseOrder() throws IOException { Properties properties1 = new Properties(); properties1.load(new ClassPathResource("META-INF/whitelist-2.properties").getInputStream()); - Properties properties2 = new MetadataAggregationMojo().merge(properties1, new ClassPathResource("META-INF/whitelist-1.properties").getInputStream()); - assertThat(properties2).containsKeys(CONFIGURATION_PROPERTIES_CLASSES, CONFIGURATION_PROPERTIES_NAMES); } diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/completion/Expresso.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/completion/Expresso.java index 95e04f68e..c02df870b 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/completion/Expresso.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-metadata-plugin/src/test/java/org/springframework/cloud/dataflow/completion/Expresso.java @@ -1,5 +1,5 @@ /* - * Copyright 2018-2020 the original author or authors. + * Copyright 2018-2024 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.