diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java
new file mode 100644
index 0000000..c32394f
--- /dev/null
+++ b/.mvn/wrapper/MavenWrapperDownloader.java
@@ -0,0 +1,117 @@
+/*
+ * 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
+ *
+ * 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.
+ */
+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.5";
+ /**
+ * 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/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000..fa87ad7
--- /dev/null
+++ b/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.1/apache-maven-3.6.1-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar
diff --git a/.travis.yml b/.travis.yml
index 873fef8..4416fd8 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,8 @@
language: java
sudo: false
dist: trusty
-install: mvn install dependency:go-offline -DskipTests=true -Dmaven.javadoc.skip=true -B -V
-script: mvn clean verify --fail-at-end -U -V
+install: ./mvnw package -DskipTests=true -Dmaven.javadoc.skip=true -B -V
+script: ./mvnw verify --fail-at-end -U -V
notifications:
email:
on_failure: change
@@ -15,7 +15,6 @@ matrix:
- bash <(curl -s https://codecov.io/bash)
- jdk: oraclejdk8
env: JACOCO=true SONAR=publish
- script: mvn clean verify sonar:sonar --fail-at-end -U -V
# Performance testing
- jdk: openjdk8
env: JACOCO=false
@@ -23,3 +22,6 @@ matrix:
env: JACOCO=false
- jdk: oraclejdk11
env: JACOCO=false
+addons:
+ sonarcloud:
+ organization: wavesoftware
diff --git a/README.md b/README.md
index 7fd0e2f..9d92ba7 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
**Work in Progress**
-[![Build Status](https://travis-ci.com/wavesoftware/plugs.svg?branch=master)](https://travis-ci.com/wavesoftware/plugs) [![codecov](https://codecov.io/gh/wavesoftware/plugs/branch/develop/graph/badge.svg)](https://codecov.io/gh/wavesoftware/plugs) [![SonarQube Quality Gate](https://sonar.wavesoftware.pl/api/badges/gate?key=pl.wavesoftware.plugs%3Aplugs-parent)](https://sonar.wavesoftware.pl/dashboard?id=pl.wavesoftware.plugs%3Aplugs-parent) [![SonarQube Quality Gate](https://sonar.wavesoftware.pl/api/badges/measure?key=pl.wavesoftware.plugs%3Aplugs-parent&metric=sqale_debt_ratio)](https://sonar.wavesoftware.pl/dashboard?id=pl.wavesoftware.plugs%3Aplugs-parent) [![Snyk Vulnerabilities](https://img.shields.io/snyk/vulnerabilities/github/wavesoftware/plugs.svg)](https://app.snyk.io/org/cardil/projects)
+[![Build Status](https://travis-ci.com/wavesoftware/plugs.svg?branch=master)](https://travis-ci.com/wavesoftware/plugs) [![codecov](https://codecov.io/gh/wavesoftware/plugs/branch/develop/graph/badge.svg)](https://codecov.io/gh/wavesoftware/plugs) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=wavesoftware_plugs&metric=alert_status)](https://sonarcloud.io/dashboard?id=wavesoftware_plugs) [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=wavesoftware_plugs&metric=sqale_index)](https://sonarcloud.io/dashboard?id=wavesoftware_plugs) [![Snyk Vulnerabilities](https://img.shields.io/snyk/vulnerabilities/github/wavesoftware/plugs.svg)](https://app.snyk.io/org/cardil/projects)
A safe, Java plugin system with easy management, and usage.
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000..6cb992f
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,22 @@
+version: '{build}'
+os: 'Windows Server 2012'
+install:
+ - ps: |
+ Add-Type -AssemblyName System.IO.Compression.FileSystem
+ if (!(Test-Path -Path "C:\maven" )) {
+ (new-object System.Net.WebClient).DownloadFile(
+ 'http://www.us.apache.org/dist/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.zip',
+ 'C:\maven-bin.zip'
+ )
+ [System.IO.Compression.ZipFile]::ExtractToDirectory("C:\maven-bin.zip", "C:\maven")
+ }
+ - cmd: SET PATH=C:\maven\apache-maven-3.6.0\bin;%JAVA_HOME%\bin;%PATH%
+ - cmd: SET MAVEN_OPTS=-Xmx1g
+ - cmd: SET JAVA_OPTS=-Xmx1g
+build_script:
+ - ./mvnw.cmd package -DskipTests=true -Dmaven.javadoc.skip=true -B -V
+test_script:
+ - ./mvnw.cmd verify --fail-at-end -U -V
+cache:
+ - C:\maven\
+ - C:\Users\appveyor\.m2
diff --git a/mvnw b/mvnw
new file mode 100755
index 0000000..d2f0ea3
--- /dev/null
+++ b/mvnw
@@ -0,0 +1,310 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# 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.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# 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 [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ 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;
+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
+ fi
+ ;;
+esac
+
+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"`
+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)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; 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"
+ else
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
+ fi
+ 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
+ # 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`"
+ fi
+fi
+
+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."
+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"
+ return 1
+ fi
+
+ basedir="$1"
+ wdir="$1"
+ 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`
+ fi
+ # end of workaround
+ done
+ echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ echo "$(tr -s '\n' ' ' < "$1")"
+ fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+ exit 1;
+fi
+
+##########################################################################################
+# 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
+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.5/maven-wrapper-0.5.5.jar"
+ else
+ jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar"
+ 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"
+ fi
+ wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+ if $cygwin; then
+ wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+ 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
+ fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+ echo $MAVEN_PROJECTBASEDIR
+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"`
+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 $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/mvnw.cmd b/mvnw.cmd
new file mode 100644
index 0000000..b26ab24
--- /dev/null
+++ b/mvnw.cmd
@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script
+@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 key stroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+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"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+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.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+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.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+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.5/maven-wrapper-0.5.5.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+ IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Found %WRAPPER_JAR%
+ )
+) else (
+ if not "%MVNW_REPOURL%" == "" (
+ SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.5/maven-wrapper-0.5.5.jar"
+ )
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
+ echo Downloading from: %DOWNLOAD_URL%
+ )
+
+ powershell -Command "&{"^
+ "$webclient = new-object System.Net.WebClient;"^
+ "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%')"^
+ "}"
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Finished downloading %WRAPPER_JAR%
+ )
+)
+@REM End of extension
+
+@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% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+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"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/plugs-core/pom.xml b/plugs-core/pom.xml
index c5ede20..6ce9f65 100644
--- a/plugs-core/pom.xml
+++ b/plugs-core/pom.xml
@@ -54,9 +54,9 @@
- pl.wavesoftware.plugs
- testing
- ${project.version}
+ pl.wavesoftware.testing
+ junit5-starter
+ pom
test
diff --git a/plugs-core/src/main/java/pl/wavesoftware/plugs/core/AbstractFrameworkProducer.java b/plugs-core/src/main/java/pl/wavesoftware/plugs/core/AbstractFrameworkProducer.java
index 633cb09..c6d9bbe 100644
--- a/plugs-core/src/main/java/pl/wavesoftware/plugs/core/AbstractFrameworkProducer.java
+++ b/plugs-core/src/main/java/pl/wavesoftware/plugs/core/AbstractFrameworkProducer.java
@@ -47,7 +47,7 @@ private static void initialize(
Framework framework
) {
tryToExecute(
- () -> framework.init(listeners.toJavaArray(FrameworkListener.class)),
+ () -> framework.init(listeners.toJavaArray(FrameworkListener[]::new)),
"20190105:114131"
);
}
diff --git a/plugs-core/src/test/java/pl/wavesoftware/plugs/core/PlugsOsgiContainerTest.java b/plugs-core/src/test/java/pl/wavesoftware/plugs/core/PlugsOsgiContainerTest.java
index e88c804..c46ad8c 100644
--- a/plugs-core/src/test/java/pl/wavesoftware/plugs/core/PlugsOsgiContainerTest.java
+++ b/plugs-core/src/test/java/pl/wavesoftware/plugs/core/PlugsOsgiContainerTest.java
@@ -153,7 +153,7 @@ void disposeWithoutEnoughTime() throws InterruptedException, BundleException {
}
private static String takeFirst2Lines(LogMessage message) {
- return List.of(message.text.split("\n"))
+ return List.of(message.text.replace("\r\n", "\n").split("\n"))
.take(2)
.intersperse("\n")
.foldLeft(new StringBuilder(), StringBuilder::append)
diff --git a/plugs-felix/pom.xml b/plugs-felix/pom.xml
index 374776e..f26dfc5 100644
--- a/plugs-felix/pom.xml
+++ b/plugs-felix/pom.xml
@@ -42,9 +42,9 @@
- pl.wavesoftware.plugs
- testing
- ${project.version}
+ pl.wavesoftware.testing
+ junit5-starter
+ pom
test
diff --git a/plugs-spring/pom.xml b/plugs-spring/pom.xml
index f028783..ff308a8 100644
--- a/plugs-spring/pom.xml
+++ b/plugs-spring/pom.xml
@@ -53,9 +53,9 @@
- pl.wavesoftware.plugs
- testing
- ${project.version}
+ pl.wavesoftware.testing
+ junit5-starter
+ pom
test
diff --git a/pom.xml b/pom.xml
index 9e5865e..d31e7d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,7 +60,7 @@
plugs-spring
plugs-maven-plugin
examples
- testing
+ reports
@@ -94,13 +94,11 @@
UTF-8
UTF-8
- ${project.build.directory}/sonar
-
- https://sonar.wavesoftware.pl
- jacoco
- 8
- ${java.source.version}
- 1.${java.source.version}
+ https://sonarcloud.io/
+ wavesoftware_plugs
+ ${project.artifactId}
+ dont-use-jacoco.exec
+ 1.8
${maven.compiler.source}
@@ -108,8 +106,8 @@
${skipTests}
- 2.1.1.RELEASE
- 6.0.1
+ 2.1.7.RELEASE
+ 6.0.3
@@ -124,7 +122,7 @@
org.apache.felix
org.apache.felix.framework
- 6.0.1
+ ${felix.version}
org.osgi
@@ -144,7 +142,7 @@
io.vavr
vavr
- 0.9.2
+ 0.10.2
pl.wavesoftware
@@ -154,12 +152,14 @@
org.awaitility
awaitility
- 3.1.5
+ 3.1.6
- com.portingle
- slf4jtesting
- 1.1.3
+ pl.wavesoftware.testing
+ junit5-starter
+ 1.0.0
+ pom
+ test
@@ -170,7 +170,16 @@
org.sonarsource.scanner.maven
sonar-maven-plugin
- 3.5.0.1254
+ 3.6.0.1398
+
+
+ publish
+ verify
+
+ sonar
+
+
+
com.manamind.jgitflow
@@ -186,21 +195,18 @@
org.jacoco
jacoco-maven-plugin
- 0.8.2
+ 0.8.4
jacoco-initialize
prepare-agent
- prepare-agent-integration
- jacoco-site
- post-integration-test
+ jacoco-initialize-it
- report
- report-integration
+ prepare-agent-integration
@@ -346,36 +352,15 @@
sonar
-
- env.GDMSESSION
+ env.SONAR
+ publish
-
- preview
- true
-
- true
- issues.json
-
-
- org.jacoco
- jacoco-maven-plugin
-
-
org.sonarsource.scanner.maven
sonar-maven-plugin
-
-
- default
- post-integration-test
-
- sonar
-
-
-
diff --git a/reports/jacoco/pom.xml b/reports/jacoco/pom.xml
new file mode 100644
index 0000000..7cceb89
--- /dev/null
+++ b/reports/jacoco/pom.xml
@@ -0,0 +1,79 @@
+
+
+
+
+ 4.0.0
+
+ pl.wavesoftware.plugs.reports
+ plugs-reports-parent
+ 0.1.0-SNAPSHOT
+
+ plugs-jacoco-report
+ pom
+ Plugs :: Reports :: JaCoCo
+
+
+ ${project.build.directory}/site/jacoco-aggregate/jacoco.xml
+
+
+
+
+ pl.wavesoftware.plugs
+ plug-api
+ ${project.version}
+
+
+ pl.wavesoftware.plugs
+ plugs-core
+ ${project.version}
+
+
+ pl.wavesoftware.plugs
+ plugs-felix
+ ${project.version}
+
+
+ pl.wavesoftware.plugs
+ plugs-spring
+ ${project.version}
+
+
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+
+ jacoco-report
+ post-integration-test
+
+ report-aggregate
+
+
+
+
+
+
+
+
diff --git a/reports/pom.xml b/reports/pom.xml
new file mode 100644
index 0000000..cd41863
--- /dev/null
+++ b/reports/pom.xml
@@ -0,0 +1,48 @@
+
+
+
+
+ 4.0.0
+
+ plugs-parent
+ pl.wavesoftware.plugs
+ 0.1.0-SNAPSHOT
+
+ pl.wavesoftware.plugs.reports
+ plugs-reports-parent
+ pom
+ Plugs :: Reports Parent
+
+
+
+ jacoco
+
+
+ env.JACOCO
+ !false
+
+
+
+ jacoco
+
+
+
+
diff --git a/testing/pom.xml b/testing/pom.xml
deleted file mode 100644
index 726ee27..0000000
--- a/testing/pom.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
- 4.0.0
-
- plugs-parent
- pl.wavesoftware.plugs
- 0.1.0-SNAPSHOT
-
- testing
- Plugs :: Testing
-
-
-
- org.springframework.boot
- spring-boot
- provided
-
-
- pl.wavesoftware
- eid-exceptions
-
-
- org.apache.logging.log4j
- log4j-slf4j-impl
-
-
- org.apache.logging.log4j
- log4j-core
-
-
- com.portingle
- slf4jtesting
-
-
- org.junit.platform
- junit-platform-launcher
-
-
- org.junit.jupiter
- junit-jupiter-engine
-
-
- org.junit.jupiter
- junit-jupiter-params
-
-
- org.assertj
- assertj-core
-
-
- org.mockito
- mockito-junit-jupiter
-
-
- org.awaitility
- awaitility
-
-
- io.vavr
- vavr
-
-
-
diff --git a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiBackground.java b/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiBackground.java
deleted file mode 100644
index 8636694..0000000
--- a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiBackground.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2012-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pl.wavesoftware.plugs.testing.ansi;
-
-/**
- * {@link AnsiElement Ansi} background colors.
- *
- * @author Krzysztof Suszynski
- * @author Phillip Webb (Spring Boot project)
- * @author Geoffrey Chandler (Spring Boot project)
- * @since 0.1.0
- * @see org.springframework.boot.ansi.AnsiBackground
- */
-public enum AnsiBackground implements AnsiElement {
-
- DEFAULT("49"),
- BLACK("40"),
- RED("41"),
- GREEN("42"),
- YELLOW("43"),
- BLUE("44"),
- MAGENTA("45"),
- CYAN("46"),
- WHITE("47"),
- BRIGHT_BLACK("100"),
- BRIGHT_RED("101"),
- BRIGHT_GREEN("102"),
- BRIGHT_YELLOW("103"),
- BRIGHT_BLUE("104"),
- BRIGHT_MAGENTA("105"),
- BRIGHT_CYAN("106"),
- BRIGHT_WHITE("107");
-
- private String code;
-
- AnsiBackground(String code) {
- this.code = code;
- }
-
- @Override
- public String toString() {
- return this.code;
- }
-
-}
diff --git a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiColor.java b/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiColor.java
deleted file mode 100644
index c91f6d3..0000000
--- a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiColor.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2012-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pl.wavesoftware.plugs.testing.ansi;
-
-/**
- * {@link AnsiElement Ansi} colors.
- *
- * @author Krzysztof Suszynski
- * @author Phillip Webb (Spring Boot project)
- * @author Geoffrey Chandler (Spring Boot project)
- * @since 0.1.0
- * @see org.springframework.boot.ansi.AnsiColor
- */
-public enum AnsiColor implements AnsiElement {
-
- DEFAULT("39"),
- BLACK("30"),
- RED("31"),
- GREEN("32"),
- YELLOW("33"),
- BLUE("34"),
- MAGENTA("35"),
- CYAN("36"),
- WHITE("37"),
-
- BRIGHT_BLACK("90"),
- BRIGHT_RED("91"),
- BRIGHT_GREEN("92"),
- BRIGHT_YELLOW("93"),
- BRIGHT_BLUE("94"),
- BRIGHT_MAGENTA("95"),
- BRIGHT_CYAN("96"),
- BRIGHT_WHITE("97");
-
- private final String code;
-
- AnsiColor(String code) {
- this.code = code;
- }
-
- @Override
- public String toString() {
- return this.code;
- }
-}
diff --git a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiComposite.java b/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiComposite.java
deleted file mode 100644
index 805524c..0000000
--- a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiComposite.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (c) 2019 Wave Software
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pl.wavesoftware.plugs.testing.ansi;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * An ANSI composite color code, that consists of multiple {@link AnsiElement}s
- *
- * @author Krzysztof Suszynski
- * @since 0.1.0
- */
-public final class AnsiComposite implements AnsiElement {
- private static final CharSequence ENCODE_JOIN = ";";
-
- private final List elements;
-
- private AnsiComposite(AnsiElement... elements) {
- this.elements = Arrays.asList(elements);
- }
-
- /**
- * A static builder method
- *
- * @param elements elements from which create this composite
- * @return an instance
- */
- public static AnsiComposite of(AnsiElement... elements) {
- return new AnsiComposite(elements);
- }
-
- @Override
- public String toString() {
- return elements.stream()
- .map(AnsiElement::toString)
- .collect(Collectors.joining(ENCODE_JOIN));
- }
-}
diff --git a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiElement.java b/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiElement.java
deleted file mode 100644
index bca5143..0000000
--- a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiElement.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2012-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pl.wavesoftware.plugs.testing.ansi;
-
-/**
- * An ANSI encodable element.
- *
- * @author Krzysztof Suszynski
- * @author Phillip Webb (Spring Boot project)
- * @since 0.1.0
- * @see org.springframework.boot.ansi.AnsiElement
- */
-public interface AnsiElement {
-
- /**
- * @return the ANSI escape code
- */
- @Override
- String toString();
-
-}
diff --git a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiOutput.java b/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiOutput.java
deleted file mode 100644
index f8e9bd2..0000000
--- a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiOutput.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright 2012-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pl.wavesoftware.plugs.testing.ansi;
-
-import javax.annotation.Nullable;
-import java.util.Locale;
-
-import static pl.wavesoftware.eid.utils.EidPreconditions.checkNotNull;
-
-/**
- * Generates ANSI encoded output, automatically attempting to detect if the
- * terminal supports ANSI.
- *
- * @author Krzysztof Suszynski
- * @author Phillip Webb (Spring Boot project)
- * @since 0.1.0
- * @see org.springframework.boot.ansi.AnsiOutput
- */
-public final class AnsiOutput {
-
- private static Enabled enabled = Enabled.DETECT;
- @Nullable
- private static Boolean consoleAvailable = true;
- @Nullable
- private static Boolean ansiCapable;
- private static boolean skipWindowsCheck = true;
-
- private static final String ENCODE_JOIN = ";";
- private static final String ENCODE_START = "\033[";
- private static final String ENCODE_END = "m";
- private static final String RESET = "0;" + AnsiColor.DEFAULT;
-
- private static final String OPERATING_SYSTEM_NAME = System
- .getProperty("os.name")
- .toLowerCase(Locale.ENGLISH);
-
- private AnsiOutput() {
- // nothing here
- }
-
- /**
- * Sets if ANSI output should be skipped on windows os
- *
- * @param skipWindowsCheck true, if output should be skipped on windows
- */
- public static void setSkipWindowsCheck(boolean skipWindowsCheck) {
- AnsiOutput.skipWindowsCheck = skipWindowsCheck;
- }
-
- /**
- * Sets if ANSI output is enabled.
- *
- * @param enabled if ANSI is enabled, disabled or detected
- */
- public static void setEnabled(Enabled enabled) {
- checkNotNull(enabled, "20181220:155934", "Enabled must not be null");
- AnsiOutput.enabled = enabled;
- }
-
- /**
- * Sets if the System.console() is known to be available.
- *
- * @param consoleAvailable if the console is known to be available or
- * {@code null} to use standard detection logic.
- */
- public static void setConsoleAvailable(@Nullable Boolean consoleAvailable) {
- AnsiOutput.consoleAvailable = consoleAvailable;
- }
-
- /**
- * Create a new ANSI string from the specified elements. Any
- * {@link AnsiElement}s will be encoded as required.
- *
- * @param elements the elements to encode
- * @return a string of the encoded elements
- */
- public static String encode(Object... elements) {
- StringBuilder sb = new StringBuilder();
- if (isEnabled()) {
- buildEnabled(sb, elements);
- } else {
- buildDisabled(sb, elements);
- }
- return sb.toString();
- }
-
- private static void buildEnabled(StringBuilder sb, Object[] elements) {
- boolean writingAnsi = false;
- boolean containsEncoding = false;
- for (Object element : elements) {
- if (element instanceof AnsiElement) {
- containsEncoding = true;
- if (!writingAnsi) {
- sb.append(ENCODE_START);
- writingAnsi = true;
- } else {
- sb.append(ENCODE_JOIN);
- }
- } else {
- if (writingAnsi) {
- sb.append(ENCODE_END);
- writingAnsi = false;
- }
- }
- sb.append(element);
- }
- if (containsEncoding) {
- sb.append(writingAnsi ? ENCODE_JOIN : ENCODE_START);
- sb.append(RESET);
- sb.append(ENCODE_END);
- }
- }
-
- private static void buildDisabled(StringBuilder sb, Object[] elements) {
- for (Object element : elements) {
- if (!(element instanceof AnsiElement) && element != null) {
- sb.append(element);
- }
- }
- }
-
- private static boolean isEnabled() {
- if (enabled == Enabled.DETECT) {
- if (ansiCapable == null) {
- ansiCapable = detectIfAnsiCapable();
- }
- return ansiCapable;
- }
- return enabled == Enabled.ALWAYS;
- }
-
- private static boolean detectIfAnsiCapable() {
- if (Boolean.FALSE.equals(consoleAvailable)
- || ((consoleAvailable == null) && (System.console() == null))) {
- return false;
- }
- return skipWindowsCheck || !(OPERATING_SYSTEM_NAME.contains("win"));
- }
-
- /**
- * Possible values to pass to {@link AnsiOutput#setEnabled}. Determines when
- * to output ANSI escape sequences for coloring application output.
- */
- public enum Enabled {
-
- /**
- * Try to detect whether ANSI coloring capabilities are available. The
- * default value for {@link AnsiOutput}.
- */
- DETECT,
-
- /**
- * Enable ANSI-colored output.
- */
- ALWAYS,
-
- /**
- * Disable ANSI-colored output.
- */
- NEVER
- }
-}
diff --git a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiStyle.java b/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiStyle.java
deleted file mode 100644
index bf8676f..0000000
--- a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/AnsiStyle.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2012-2019 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pl.wavesoftware.plugs.testing.ansi;
-
-/**
- * {@link AnsiElement Ansi} styles.
- *
- * @author Krzysztof Suszynski
- * @author Phillip Webb (Spring Boot project)
- * @since 0.1.0
- * @see org.springframework.boot.ansi.AnsiStyle
- */
-public enum AnsiStyle implements AnsiElement {
-
- NORMAL("0"),
- BOLD("1"),
- FAINT("2"),
- ITALIC("3"),
- UNDERLINE("4"),
- BLINK("5");
-
- private final String code;
-
- AnsiStyle(String code) {
- this.code = code;
- }
-
- @Override
- public String toString() {
- return this.code;
- }
-
-}
diff --git a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/package-info.java b/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/package-info.java
deleted file mode 100644
index c5c79f6..0000000
--- a/testing/src/main/java/pl/wavesoftware/plugs/testing/ansi/package-info.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2019 Wave Software
- *
- * 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.
- */
-
-/**
- * This package is heavily inspired by Spring Boot implementation.
- *
- * @see org.springframework.boot.ansi
- */
-@ParametersAreNonnullByDefault
-package pl.wavesoftware.plugs.testing.ansi;
-
-import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/testing/src/main/java/pl/wavesoftware/plugs/testing/log4j2/HighlightColorConverter.java b/testing/src/main/java/pl/wavesoftware/plugs/testing/log4j2/HighlightColorConverter.java
deleted file mode 100644
index 2be5913..0000000
--- a/testing/src/main/java/pl/wavesoftware/plugs/testing/log4j2/HighlightColorConverter.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2019 Wave Software
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pl.wavesoftware.plugs.testing.log4j2;
-
-import io.vavr.collection.HashSet;
-import io.vavr.collection.Set;
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.plugins.Plugin;
-import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.apache.logging.log4j.core.pattern.ConverterKeys;
-import org.apache.logging.log4j.core.pattern.LogEventPatternConverter;
-import org.apache.logging.log4j.core.pattern.PatternConverter;
-import org.apache.logging.log4j.core.pattern.PatternFormatter;
-import org.apache.logging.log4j.core.pattern.PatternParser;
-import org.apiguardian.api.API;
-import org.apiguardian.api.API.Status;
-import pl.wavesoftware.plugs.testing.ansi.AnsiBackground;
-import pl.wavesoftware.plugs.testing.ansi.AnsiColor;
-import pl.wavesoftware.plugs.testing.ansi.AnsiComposite;
-import pl.wavesoftware.plugs.testing.ansi.AnsiElement;
-import pl.wavesoftware.plugs.testing.ansi.AnsiOutput;
-import pl.wavesoftware.plugs.testing.ansi.AnsiStyle;
-
-import javax.annotation.Nullable;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Log4j2 {@link LogEventPatternConverter} colors output using the {@link AnsiOutput}
- * class. A single option 'styling' can be provided to the converter, or if not specified
- * color styling will be picked based on the logging level.
- *
- * @author Krzysztof Suszynski
- * @author Vladimir Tsanev (Spring-Boot project)
- * @since 0.1.0
- * @see org.springframework.boot.logging.log4j2.ColorConverter
- */
-@Plugin(name = "hightlight-color", category = PatternConverter.CATEGORY)
-@ConverterKeys("hl")
-public final class HighlightColorConverter extends LogEventPatternConverter {
-
- private static final Map ELEMENTS;
- private static final int NO_ARGS_WITHOUT_STYLE = 1;
- private static final int NO_ARGS_WITH_STYLE = 2;
- private static final Set VALID_NUMBER_OF_ARGS = HashSet.of(
- NO_ARGS_WITHOUT_STYLE,
- NO_ARGS_WITH_STYLE
- );
-
- static {
- Map ansiElements = new HashMap<>();
- ansiElements.put("faint", AnsiColor.WHITE);
- ansiElements.put("black", AnsiColor.BLACK);
- ansiElements.put("red", AnsiColor.RED);
- ansiElements.put("green", AnsiColor.GREEN);
- ansiElements.put("yellow", AnsiColor.YELLOW);
- ansiElements.put("blue", AnsiColor.BLUE);
- ansiElements.put("magenta", AnsiColor.MAGENTA);
- ansiElements.put("cyan", AnsiColor.CYAN);
- ELEMENTS = Collections.unmodifiableMap(ansiElements);
- }
-
- private static final Map LEVELS;
-
- static {
- Map ansiLevels = new HashMap<>();
- ansiLevels.put(Level.FATAL.intLevel(), AnsiComposite.of(
- AnsiColor.BLACK, AnsiBackground.RED
- ));
- ansiLevels.put(Level.ERROR.intLevel(), AnsiComposite.of(
- AnsiColor.RED, AnsiStyle.BOLD
- ));
- ansiLevels.put(Level.WARN.intLevel(), AnsiColor.YELLOW);
- ansiLevels.put(Level.INFO.intLevel(), AnsiColor.GREEN);
- ansiLevels.put(Level.DEBUG.intLevel(), AnsiColor.BLUE);
- ansiLevels.put(Level.TRACE.intLevel(), AnsiColor.CYAN);
- LEVELS = Collections.unmodifiableMap(ansiLevels);
- }
-
- private final List formatters;
-
- @Nullable
- private final AnsiElement styling;
-
- private HighlightColorConverter(
- List formatters,
- @Nullable AnsiElement styling
- ) {
- super("style", "style");
- this.formatters = Collections.unmodifiableList(formatters);
- this.styling = styling;
- }
-
- /**
- * Creates a new instance of the class. Required by Log4j.
- *
- * @param config the configuration
- * @param options the options
- * @return a new instance, or {@code null} if the options are invalid
- */
- @SuppressWarnings("WeakerAccess")
- @API(status = Status.MAINTAINED)
- public static HighlightColorConverter newInstance(
- Configuration config,
- String[] options
- ) {
- if (!VALID_NUMBER_OF_ARGS.contains(options.length)) {
- LOGGER.error("Incorrect number of options on style. "
- + "Expected at least 1, received {}", options.length);
- return null;
- }
- if (options[0] == null) {
- LOGGER.error("No pattern supplied on style");
- return null;
- }
- PatternParser parser = PatternLayout.createPatternParser(config);
- List formatters = parser.parse(options[0]);
- AnsiElement element = null;
- if (options.length != 1) {
- element = ELEMENTS.get(options[1]);
- }
- return new HighlightColorConverter(formatters, element);
- }
-
- @Override
- public boolean handlesThrowable() {
- for (PatternFormatter formatter : this.formatters) {
- if (formatter.handlesThrowable()) {
- return true;
- }
- }
- return super.handlesThrowable();
- }
-
- @Override
- public void format(LogEvent event, StringBuilder stringBuilder) {
- StringBuilder buf = new StringBuilder();
- for (PatternFormatter formatter : this.formatters) {
- formatter.format(event, buf);
- }
- if (buf.length() > 0) {
- AnsiElement ansiElement = this.styling;
- if (ansiElement == null) {
- // Assume highlighting
- ansiElement = LEVELS.getOrDefault(
- event.getLevel().intLevel(), AnsiColor.BLUE
- );
- }
- appendAnsiString(stringBuilder, buf.toString(), ansiElement);
- }
- }
-
- private static void appendAnsiString(
- StringBuilder toAppendTo,
- String text,
- AnsiElement ansiElement
- ) {
- toAppendTo.append(AnsiOutput.encode(ansiElement, text));
- }
-
-}
diff --git a/testing/src/main/java/pl/wavesoftware/plugs/testing/log4j2/package-info.java b/testing/src/main/java/pl/wavesoftware/plugs/testing/log4j2/package-info.java
deleted file mode 100644
index 827aded..0000000
--- a/testing/src/main/java/pl/wavesoftware/plugs/testing/log4j2/package-info.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2019 Wave Software
- *
- * 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.
- */
-
-/**
- * This package is heavily inspired by Spring Boot implementation.
- *
- * @see org.springframework.boot.logging.log4j2
- */
-@ParametersAreNonnullByDefault
-package pl.wavesoftware.plugs.testing.log4j2;
-
-import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/testing/src/main/resources/log4j2-test.xml b/testing/src/main/resources/log4j2-test.xml
deleted file mode 100644
index 022dc4f..0000000
--- a/testing/src/main/resources/log4j2-test.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
- %hl{%5p} %hl{%d{HH:mm:ss.SSS}}{faint} %hl{[%10.10t]}{yellow} %hl{%-40.40c{1.}}{cyan} %hl{:}{faint} %m%n%ex
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/testing/src/test/java/pl/wavesoftware/plugs/testing/ansi/AnsiOutputTest.java b/testing/src/test/java/pl/wavesoftware/plugs/testing/ansi/AnsiOutputTest.java
deleted file mode 100644
index bae3f52..0000000
--- a/testing/src/test/java/pl/wavesoftware/plugs/testing/ansi/AnsiOutputTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (c) 2019 Wave Software
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package pl.wavesoftware.plugs.testing.ansi;
-
-import io.vavr.collection.List;
-import io.vavr.collection.Seq;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-import pl.wavesoftware.plugs.testing.ansi.AnsiOutput.Enabled;
-
-import java.lang.reflect.Field;
-import java.util.stream.Stream;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.params.provider.Arguments.arguments;
-
-/**
- * @author Krzysztof Suszynski
- * @since 0.1.0
- */
-class AnsiOutputTest {
-
- @BeforeEach
- @AfterEach
- void reset() throws NoSuchFieldException, IllegalAccessException {
- AnsiOutput.setEnabled(Enabled.DETECT);
- AnsiOutput.setConsoleAvailable(true);
- AnsiOutput.setSkipWindowsCheck(true);
- Field field = AnsiOutput.class.getDeclaredField("ansiCapable");
- field.setAccessible(true);
- field.set(null, null);
- }
-
- @Test
- void always() {
- // given
- AnsiOutput.setEnabled(Enabled.ALWAYS);
- String text = "Colorful";
-
- // when
- String encoded = AnsiOutput.encode(
- AnsiStyle.ITALIC,
- AnsiColor.BLACK,
- AnsiBackground.MAGENTA,
- text
- );
-
- // then
- assertThat(encoded).isEqualTo("\u001B[3;30;45mColorful\u001B[0;39m");
- }
-
- @ParameterizedTest
- @ArgumentsSource(EncodeArgumentSource.class)
- void encode(Seq