diff --git a/assemblies/nexus-base-feature/pom.xml b/assemblies/nexus-base-feature/pom.xml index bf79890a81..9aa6d560b8 100644 --- a/assemblies/nexus-base-feature/pom.xml +++ b/assemblies/nexus-base-feature/pom.xml @@ -19,7 +19,7 @@ org.sonatype.nexus.assemblies nexus-assemblies - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-base-feature @@ -109,6 +109,10 @@ org.apache.karaf.tooling karaf-maven-plugin + + true + true + diff --git a/assemblies/nexus-base-feature/src/main/feature/feature.xml b/assemblies/nexus-base-feature/src/main/feature/feature.xml index 128b383079..038a7c529f 100644 --- a/assemblies/nexus-base-feature/src/main/feature/feature.xml +++ b/assemblies/nexus-base-feature/src/main/feature/feature.xml @@ -22,8 +22,6 @@ wrap:${mvn:paranamer}$overwrite=merge&Fragment-Host=org.hibernate.validator wrap:${mvn:httpcore}$Bundle-SymbolicName=httpcore wrap:${mvn:httpclient}$Bundle-SymbolicName=httpclient&Fragment-Host=httpcore - wrap:${mvn:jaxb-core}$Bundle-SymbolicName=jaxb-core - wrap:${mvn:jaxb-impl}$Bundle-SymbolicName=jaxb-impl&Fragment-Host=jaxb-core wrap:${mvn:resteasy-jaxrs}$Bundle-SymbolicName=resteasy-jaxrs&Fragment-Host=org.sonatype.nexus.siesta wrap:${mvn:resteasy-atom-provider}$Bundle-SymbolicName=resteasy-atom-provider&Fragment-Host=org.sonatype.nexus.siesta wrap:${mvn:resteasy-jackson2-provider}$Bundle-SymbolicName=resteasy-jackson2-provider&Fragment-Host=org.sonatype.nexus.siesta diff --git a/assemblies/nexus-base-template/pom.xml b/assemblies/nexus-base-template/pom.xml index 936f270746..b3ac00ea3f 100644 --- a/assemblies/nexus-base-template/pom.xml +++ b/assemblies/nexus-base-template/pom.xml @@ -21,12 +21,12 @@ org.sonatype.nexus.assemblies nexus-assemblies - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-base-template ${project.groupId}:${project.artifactId} - karaf-assembly + pom + false + false + + false + + 1.8 + + true + + wrap + bundle + config + deployer + diagnostic + feature + jaas + kar + log + package + shell + service + system + nexus-startup-feature + + + nexus-boot-feature + + + management + ssh + nexus-core-feature + nexus-oss-edition + + + + + + org.apache.maven.plugins maven-antrun-plugin - configure-assembly + overlay-assembly prepare-package run @@ -184,6 +234,14 @@ + + + + - + @@ -216,16 +274,14 @@ - + + + - - - - ${org.ops4j.pax.logging:pax-logging-api:jar} @@ -243,6 +299,10 @@ excludes="${pax-logging-api}/**"/> + + + ${line.separator} @@ -332,53 +392,12 @@ - - org.apache.karaf.tooling - karaf-maven-plugin - - - false - false - - false - - 1.8 - - true - - wrap - bundle - config - deployer - diagnostic - feature - jaas - kar - log - package - shell - service - system - nexus-startup-feature - - - nexus-boot-feature - - - management - ssh - nexus-core-feature - nexus-oss-edition - - - - org.apache.maven.plugins maven-assembly-plugin - bundle + archive-assembly package single diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/bin/nexus b/assemblies/nexus-base-template/src/main/resources/overlay/bin/nexus index c7790b4601..8a7452ba8d 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/bin/nexus +++ b/assemblies/nexus-base-template/src/main/resources/overlay/bin/nexus @@ -1,38 +1,53 @@ #!/bin/sh -DIRNAME=`dirname "$0"` -PROGNAME=`basename "$0"` -# -# Sourcing environment settings for karaf similar to tomcats setenv -# -KARAF_SCRIPT="karaf" -export KARAF_SCRIPT -if [ -f "$DIRNAME/setenv" ]; then - . "$DIRNAME/setenv" -fi +realpath() { + # Use in priority xpg4 awk or nawk on SunOS as standard awk is outdated + AWK=awk + if ${solaris}; then + if [ -x /usr/xpg4/bin/awk ]; then + AWK=/usr/xpg4/bin/awk + elif [ -x /usr/bin/nawk ]; then + AWK=/usr/bin/nawk + fi + fi + + READLINK_EXISTS=`command -v readlink &> /dev/null` + BINARY_NAME=`basename "${1}"` + if [ -z "$READLINK_EXISTS" ]; then + OURPWD="`pwd`" + cd "`dirname "${1}"`" || exit 2 + LINK=`ls -l "${BINARY_NAME}" | ${AWK} -F"-> " '{print $2}'` + while [ "${LINK}" ]; do + echo "link: ${LINK}" >&2 + cd "`dirname "${LINK}"`" || exit 2 + LINK=`ls -l "${BINARY_NAME}" | ${AWK} -F"-> " '{print $2}'` + done + REALPATH="`pwd`/${BINARY_NAME}" + cd "${OURPWD}" || exit 2 + echo "${REALPATH}" + else + OURPWD="`pwd`" + cd "`dirname "${1}"`" || exit 2 + LINK=`readlink "${BINARY_NAME}"` + while [ "${LINK}" ]; do + echo "link: ${LINK}" >&2 + cd "`dirname "${LINK}"`" || exit 2 + LINK=`readlink "${BINARY_NAME}"` + done + REALPATH="`pwd`/${BINARY_NAME}" + cd "${OURPWD}" || exit 2 + echo "${REALPATH}" + fi +} -# -# Set up some easily accessible MIN/MAX params for JVM mem usage -# -if [ "x$JAVA_MIN_MEM" = "x" ]; then - JAVA_MIN_MEM=1200M - export JAVA_MIN_MEM -fi -if [ "x$JAVA_MAX_MEM" = "x" ]; then - JAVA_MAX_MEM=1200M - export JAVA_MAX_MEM -fi -if [ "x$DIRECT_MAX_MEM" = "x" ]; then - DIRECT_MAX_MEM=2G - export DIRECT_MAX_MEM -fi +REALNAME=`realpath "$0"` +DIRNAME=`dirname "${REALNAME}"` +PROGNAME=`basename "${REALNAME}"` +LOCAL_CLASSPATH=$CLASSPATH # -# Check the mode that initiated the script +# Common functions # -if [ "x$1" != "x" ]; then - MODE=$1 -fi warn() { echo "${PROGNAME}: $*" @@ -46,264 +61,291 @@ die() { detectOS() { # OS specific support (must be 'true' or 'false'). cygwin=false; + mingw=false; darwin=false; aix=false; os400=false; + hpux=false; + solaris=false; case "`uname`" in CYGWIN*) cygwin=true ;; + MINGW*) + mingw=true + ;; Darwin*) darwin=true ;; AIX*) aix=true + # For AIX, set an environment variable + export LDR_CNTRL=MAXDATA=0xB0000000@DSA + echo ${LDR_CNTRL} ;; OS400*) os400=true ;; + HP-UX*) + hpux=true + # For HP-UX, set an environment variable + export PS_PREFIX="UNIX95= " + echo "${PS_PREFIX}" + ;; + SunOS*) + solaris=true + ;; esac - # For AIX, set an environment variable - if $aix; then - export LDR_CNTRL=MAXDATA=0xB0000000@DSA - echo $LDR_CNTRL - fi } unlimitFD() { # Use the maximum available, or set MAX_FD != -1 to use that - if [ "x$MAX_FD" = "x" ]; then + if [ "x${MAX_FD}" = "x" ]; then MAX_FD="maximum" fi # Increase the maximum file descriptors if we can - if [ "$os400" = "false" ] && [ "$cygwin" = "false" ]; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then + if [ "x`command -v ulimit`" != "x" ] && [ "${os400}" = "false" ] ; then + if [ "${MAX_FD}" = "maximum" ] || [ "${MAX_FD}" = "max" ]; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ]; then # use the system max - MAX_FD="$MAX_FD_LIMIT" + MAX_FD="${MAX_FD_LIMIT}" else - warn "Could not query system maximum file descriptor limit: $MAX_FD_LIMIT" + warn "Could not query system maximum file descriptor limit: ${MAX_FD_LIMIT}" fi fi - if [ "$MAX_FD" != 'unlimited' ]; then - ulimit -n $MAX_FD > /dev/null + if [ "${MAX_FD}" != 'unlimited' ]; then + ulimit -n "${MAX_FD}" > /dev/null if [ $? -ne 0 ]; then - warn "Could not set maximum file descriptor limit: $MAX_FD" + warn "Could not set maximum file descriptor limit: ${MAX_FD}" fi fi - fi + fi } locateHome() { - if [ "x$KARAF_HOME" = "x" ]; then - # In POSIX shells, CDPATH may cause cd to write to stdout - (unset CDPATH) >/dev/null 2>&1 && unset CDPATH - # KARAF_HOME is not provided, fall back to default - KARAF_HOME=`cd "$DIRNAME/.."; pwd` + if [ "x${KARAF_HOME}" != "x" ]; then + warn "Ignoring predefined value for KARAF_HOME" + unset KARAF_HOME + fi + if [ "x${KARAF_HOME}" = "x" ]; then + # In POSIX shells, CDPATH may cause cd to write to stdout + (unset CDPATH) >/dev/null 2>&1 && unset CDPATH + # KARAF_HOME is not provided, fall back to default + KARAF_HOME=`cd "${DIRNAME}/.." || exit 2; pwd` fi - if [ ! -d "$KARAF_HOME" ]; then - die "KARAF_HOME is not valid: $KARAF_HOME" + if [ ! -d "${KARAF_HOME}" ]; then + die "KARAF_HOME is not valid: ${KARAF_HOME}" fi } locateBase() { - if [ "x$KARAF_BASE" != "x" ]; then - if [ ! -d "$KARAF_BASE" ]; then - die "KARAF_BASE is not valid: $KARAF_BASE" + if [ "x${KARAF_BASE}" != "x" ]; then + if [ ! -d "${KARAF_BASE}" ]; then + die "KARAF_BASE is not valid: ${KARAF_BASE}" fi else - KARAF_BASE=$KARAF_HOME + KARAF_BASE=${KARAF_HOME} fi } locateData() { - if [ "x$KARAF_DATA" != "x" ]; then - if [ ! -d "$KARAF_DATA" ]; then - die "KARAF_DATA is not valid: $KARAF_DATA" + if [ "x${KARAF_DATA}" != "x" ]; then + if [ ! -d "${KARAF_DATA}" ]; then + die "KARAF_DATA is not valid: ${KARAF_DATA}" fi else - KARAF_DATA=$KARAF_BASE/../sonatype-work/nexus3 + KARAF_DATA=${KARAF_BASE}/../sonatype-work/nexus3 fi } locateEtc() { - if [ "x$KARAF_ETC" != "x" ]; then - if [ ! -d "$KARAF_ETC" ]; then - die "KARAF_ETC is not valid: $KARAF_ETC" + if [ "x${KARAF_ETC}" != "x" ]; then + if [ ! -d "${KARAF_ETC}" ]; then + die "KARAF_ETC is not valid: ${KARAF_ETC}" fi else - KARAF_ETC=$KARAF_BASE/etc/karaf + KARAF_ETC=${KARAF_BASE}/etc/karaf + fi +} + +locateLog() { + if [ "x${KARAF_LOG}" != "x" ]; then + if [ ! -d "${KARAF_LOG}" ]; then + die "KARAF_LOG is not valid: ${KARAF_LOG}" + fi + else + KARAF_LOG=${KARAF_DATA}/log fi } setupNativePath() { # Support for loading native libraries - LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:$KARAF_BASE/lib:$KARAF_HOME/lib" + if [ "x${LD_LIBRARY_PATH}" != "x" ]; then + LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${KARAF_BASE}/lib:${KARAF_HOME}/lib" + else + LD_LIBRARY_PATH="${KARAF_BASE}/lib:${KARAF_HOME}/lib" + fi # For Cygwin, set PATH from LD_LIBRARY_PATH - if $cygwin; then - LD_LIBRARY_PATH=`cygpath --path --windows "$LD_LIBRARY_PATH"` - PATH="$PATH;$LD_LIBRARY_PATH" + if ${cygwin}; then + LD_LIBRARY_PATH=`cygpath --path --windows "${LD_LIBRARY_PATH}"` + PATH="${PATH};${LD_LIBRARY_PATH}" export PATH fi export LD_LIBRARY_PATH } pathCanonical() { - local dst="${1}" + dst="${1}" while [ -h "${dst}" ] ; do ls=`ls -ld "${dst}"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - dst="$link" + link=`expr "${ls}" : '.*-> \(.*\)$'` + if expr "${link}" : '/.*' > /dev/null; then + dst="${link}" else - dst="`dirname "${dst}"`/$link" + dst="`dirname "${dst}"`/${link}" fi done - local bas=`basename "${dst}"` - local dir=`dirname "${dst}"` - if [ "$bas" != "$dir" ]; then - dst="`pathCanonical "$dir"`/$bas" + bas=`basename "${dst}"` + dir=`dirname "${dst}"` + if [ "${bas}" != "${dir}" ]; then + dst="`pathCanonical "${dir}"`/${bas}" fi echo "${dst}" | sed -e 's#//#/#g' -e 's#/./#/#g' -e 's#/[^/]*/../#/#g' } locateJava() { # Setup the Java Virtual Machine - if $cygwin ; then - [ -n "$JAVA" ] && JAVA=`cygpath --unix "$JAVA"` - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + if ${cygwin} ; then + [ -n "${JAVA}" ] && JAVA=`cygpath --unix "${JAVA}"` + [ -n "${JAVA_HOME}" ] && JAVA_HOME=`cygpath --unix "${JAVA_HOME}"` fi - if [ "x$JAVA_HOME" = "x" ] && [ "$darwin" = "true" ]; then - JAVA_HOME="$(/usr/libexec/java_home -v 1.8)" + if [ "x${JAVA_HOME}" = "x" ] && [ "${darwin}" = "true" ]; then + JAVA_HOME="`/usr/libexec/java_home -v 1.8`" fi - if [ "x$JAVA" = "x" ] && [ -r /etc/gentoo-release ] ; then + if [ "x${JAVA_HOME}" = "x" ] && [ -r /etc/gentoo-release ] ; then JAVA_HOME=`java-config --jre-home` fi - if [ "x$JAVA" = "x" ]; then - if [ "x$JAVA_HOME" != "x" ]; then - if [ ! -d "$JAVA_HOME" ]; then - die "JAVA_HOME is not valid: $JAVA_HOME" + if [ "x${JAVA}" = "x" ]; then + if [ "x${JAVA_HOME}" != "x" ]; then + if [ ! -d "${JAVA_HOME}" ]; then + die "JAVA_HOME is not valid: ${JAVA_HOME}" fi - JAVA="$JAVA_HOME/bin/java" + JAVA="${JAVA_HOME}/bin/java" else warn "JAVA_HOME not set; results may vary" - JAVA=`type java` - JAVA=`expr "$JAVA" : '.* \(/.*\)$'` - if [ "x$JAVA" = "x" ]; then + JAVA=`command -v java` + if [ "x${JAVA}" = "x" ]; then die "java command not found" fi fi fi - if [ "x$JAVA_HOME" = "x" ]; then - JAVA_HOME="$(dirname $(dirname $(pathCanonical "$JAVA")))" + if [ "x${JAVA_HOME}" = "x" ]; then + JAVA_BIN=`pathCanonical "${JAVA}"` + JAVA_BIN_DIR=`dirname "${JAVA_BIN}"` + JAVA_HOME="`dirname "${JAVA_BIN_DIR}"`" fi } detectJVM() { - #echo "`$JAVA -version`" - # This service should call `java -version`, - # read stdout, and look for hints - if $JAVA -version 2>&1 | grep "^IBM" ; then - JVM_VENDOR="IBM" - # on OS/400, java -version does not contain IBM explicitly - elif $os400; then - JVM_VENDOR="IBM" - else - JVM_VENDOR="SUN" - fi - # echo "JVM vendor is $JVM_VENDOR" + # This service should call `java -version`, + # read stdout, and look for hints + if "${JAVA}" -version 2>&1 | grep "^IBM" ; then + JVM_VENDOR="IBM" + # on OS/400, java -version does not contain IBM explicitly + elif ${os400}; then + JVM_VENDOR="IBM" + else + JVM_VENDOR="SUN" + fi + # echo "JVM vendor is ${JVM_VENDOR}" } checkJvmVersion() { - # echo "`$JAVA -version`" - VERSION=`$JAVA -version 2>&1 | egrep '"([0-9].[0-9]\..*[0-9]).*"' | awk '{print substr($3,2,length($3)-2)}' | awk '{print substr($1, 3, 3)}' | sed -e 's;\.;;g'` - # echo $VERSION - if [ "$VERSION" -lt "60" ]; then - echo "JVM must be greater than 1.6" - exit 1; - fi + # Use in priority xpg4 awk or nawk on SunOS as standard awk is outdated + AWK=awk + if ${solaris}; then + if [ -x /usr/xpg4/bin/awk ]; then + AWK=/usr/xpg4/bin/awk + elif [ -x /usr/bin/nawk ]; then + AWK=/usr/bin/nawk + fi + fi + + VERSION=`"${JAVA}" -version 2>&1 | ${AWK} -F '"' '/version/ {print $2}' | sed -e 's/_.*//g; s/^1\.//g; s/\..*//g; s/-.*//g;'` + + # java must be at least version 8 + if [ "${VERSION}" -lt "8" ]; then + die "JVM must be greater than 1.8" + fi } setupDebugOptions() { - if [ "x$JAVA_OPTS" = "x" ]; then - JAVA_OPTS="$DEFAULT_JAVA_OPTS" + if [ "x${JAVA_OPTS}" = "x" ]; then + JAVA_OPTS="${DEFAULT_JAVA_OPTS}" fi export JAVA_OPTS - if [ "x$EXTRA_JAVA_OPTS" != "x" ]; then - JAVA_OPTS="$JAVA_OPTS $EXTRA_JAVA_OPTS" + if [ "x${EXTRA_JAVA_OPTS}" != "x" ]; then + JAVA_OPTS="${JAVA_OPTS} ${EXTRA_JAVA_OPTS}" fi # Set Debug options if enabled - if [ "x$KARAF_DEBUG" != "x" ]; then - # Ignore DEBUG in case of stop, client, or status mode - if [ "x$MODE" = "xstop" ]; then - return - fi - if [ "x$MODE" = "xclient" ]; then - return - fi - if [ "x$MODE" = "xstatus" ]; then - return - fi + if [ "x${KARAF_DEBUG}" != "x" ]; then # Use the defaults if JAVA_DEBUG_OPTS was not set - if [ "x$JAVA_DEBUG_OPTS" = "x" ]; then - JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS" + if [ "x${JAVA_DEBUG_OPTS}" = "x" ]; then + JAVA_DEBUG_OPTS="${DEFAULT_JAVA_DEBUG_OPTS}" fi - JAVA_OPTS="$JAVA_DEBUG_OPTS $JAVA_OPTS" - warn "Enabling Java debug options: $JAVA_DEBUG_OPTS" + JAVA_OPTS="${JAVA_DEBUG_OPTS} ${JAVA_OPTS}" + warn "Enabling Java debug options: ${JAVA_DEBUG_OPTS}" fi } setupDefaults() { - # SONATYPE: preferred IPv4 by default - if [ "x$KARAF_OPTS" = "x" ]; then - KARAF_OPTS="-Djava.net.preferIPv4Stack=true" + # + # Set up some easily accessible MIN/MAX params for JVM mem usage + # + if [ "x${JAVA_MIN_MEM}" = "x" ]; then + JAVA_MIN_MEM=1200M + export JAVA_MIN_MEM fi - - DEFAULT_JAVA_OPTS="-Xms$JAVA_MIN_MEM -Xmx$JAVA_MAX_MEM -XX:MaxDirectMemorySize=$DIRECT_MAX_MEM -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -XX:+LogVMOutput -XX:LogFile=../sonatype-work/nexus3/log/jvm.log -XX:-OmitStackTraceInFastThrow " - - if [ "$darwin" = "true" ] && [ "$JVM_VENDOR" = "SUN" ] && [ `ulimit -n` -gt 10240 ]; then - # NEXUS-14184 - Open up OSX file descriptor limit - DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS -XX:-MaxFDLimit " + if [ "x${JAVA_MAX_MEM}" = "x" ]; then + JAVA_MAX_MEM=1200M + export JAVA_MAX_MEM + fi + if [ "x$DIRECT_MAX_MEM" = "x" ]; then + DIRECT_MAX_MEM=2G + export DIRECT_MAX_MEM fi + DEFAULT_JAVA_OPTS="-Xms${JAVA_MIN_MEM} -Xmx${JAVA_MAX_MEM} -XX:MaxDirectMemorySize=${DIRECT_MAX_MEM} -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=${KARAF_LOG}/jvm.log -XX:-OmitStackTraceInFastThrow -Djava.net.preferIPv4Stack=true " #Set the JVM_VENDOR specific JVM flags - if [ "$JVM_VENDOR" = "SUN" ]; then - # SONATYPE: removed -XX:PermSize and -XX:MaxPermSize - # SONATYPE: removed -Dcom.sun.management.jmxremote - DEFAULT_JAVA_OPTS="-server $DEFAULT_JAVA_OPTS" - elif [ "$JVM_VENDOR" = "IBM" ]; then - if $os400; then - DEFAULT_JAVA_OPTS="$DEFAULT_JAVA_OPTS" - elif $aix; then - DEFAULT_JAVA_OPTS="-Xverify:none -Xdump:heap -Xlp $DEFAULT_JAVA_OPTS" - else - DEFAULT_JAVA_OPTS="-Xverify:none $DEFAULT_JAVA_OPTS" + if [ "${JVM_VENDOR}" = "SUN" ]; then + if [ "${darwin}" = "true" ] && [ `ulimit -n` -gt 10240 ]; then + # NEXUS-14184 - Open up OSX file descriptor limit + DEFAULT_JAVA_OPTS="${DEFAULT_JAVA_OPTS} -XX:-MaxFDLimit " fi - fi - - # Add the jars in the lib dir - for file in "$KARAF_HOME"/lib/boot/*.jar - do - if [ -z "$CLASSPATH" ]; then - CLASSPATH="$file" + elif [ "${JVM_VENDOR}" = "IBM" ]; then + if ${os400}; then + DEFAULT_JAVA_OPTS="${DEFAULT_JAVA_OPTS}" + elif ${aix}; then + DEFAULT_JAVA_OPTS="-Xverify:none -Xdump:heap -Xlp ${DEFAULT_JAVA_OPTS}" else - CLASSPATH="$CLASSPATH:$file" + DEFAULT_JAVA_OPTS="-Xverify:none ${DEFAULT_JAVA_OPTS}" fi - done + fi DEFAULT_JAVA_DEBUG_PORT="5005" - if [ "x$JAVA_DEBUG_PORT" = "x" ]; then - JAVA_DEBUG_PORT="$DEFAULT_JAVA_DEBUG_PORT" + if [ "x${JAVA_DEBUG_PORT}" = "x" ]; then + JAVA_DEBUG_PORT="${DEFAULT_JAVA_DEBUG_PORT}" fi - DEFAULT_JAVA_DEBUG_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$JAVA_DEBUG_PORT" + DEFAULT_JAVA_DEBUG_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${JAVA_DEBUG_PORT}" + DEFAULT_JAVA_DEBUGS_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=${JAVA_DEBUG_PORT}" ## ## TODO: Move to conf/profiler/yourkit.{sh|cmd} @@ -312,7 +354,58 @@ setupDefaults() { #DEFAULT_JAVA_DEBUG_OPTS="-Xrunyjpagent" } +convertPaths() { + if $cygwin; then + if [ ! -z "${KARAF_HOME}" ]; then + KARAF_HOME=`cygpath --path --windows "${KARAF_HOME}"` + fi + if [ ! -z "${KARAF_BASE}" ]; then + KARAF_BASE=`cygpath --path --windows "${KARAF_BASE}"` + fi + if [ ! -z "${KARAF_DATA}" ]; then + KARAF_DATA=`cygpath --path --windows "${KARAF_DATA}"` + fi + if [ ! -z "${KARAF_ETC}" ]; then + KARAF_ETC=`cygpath --path --windows "${KARAF_ETC}"` + fi + if [ ! -z "${CLASSPATH}" ]; then + CLASSPATH=`cygpath --path --windows "${CLASSPATH}"` + fi + fi +} + +# +# Sourcing environment settings for karaf similar to tomcats setenv +# +KARAF_SCRIPT="${PROGNAME}" +export KARAF_SCRIPT +if [ -f "${DIRNAME}/setenv" ]; then + . "${DIRNAME}/setenv" +fi + +forceNoRoot() { + # If configured, prevent execution as root + if [ "${KARAF_NOROOT}" ] && [ "`id -u`" -eq 0 ]; then + die "Do not run as root!" + fi +} + +setupClassPath() { + # Add the jars in the lib dir + for file in "${KARAF_HOME}"/lib/boot/*.jar + do + if [ -z "${CLASSPATH}" ]; then + CLASSPATH="${file}" + else + CLASSPATH="${CLASSPATH}:${file}" + fi + done +} + init() { + # Prevent root execution if configured + forceNoRoot + # Determine if there is special OS handling we must perform detectOS @@ -331,6 +424,9 @@ init() { # Locate the Karaf etc directory locateEtc + # Locate the Karaf log directory + locateLog + # Setup the native library path setupNativePath @@ -339,13 +435,16 @@ init() { # Determine the JVM vendor detectJVM - + # Determine the JVM version >= 1.6 checkJvmVersion # Setup default options setupDefaults + # Setup classpath + setupClassPath + # Install debug options setupDebugOptions @@ -354,25 +453,45 @@ init() { run() { OPTS="-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=true" MAIN=org.sonatype.nexus.karaf.NexusMain - while [ "$1" != "" ]; do - case $1 in + JAVA_ENDORSED_DIRS="${JAVA_HOME}/jre/lib/endorsed:${JAVA_HOME}/lib/endorsed:${KARAF_HOME}/lib/endorsed" + if ${cygwin}; then + JAVA_HOME=`cygpath --path --windows "${JAVA_HOME}"` + JAVA_ENDORSED_DIRS=`cygpath --path --windows "${JAVA_ENDORSED_DIRS}"` + fi + convertPaths + cd "${KARAF_BASE}" || exit 2 + + # use KARAF_EXEC if it's set to anything (even empty string) otherwise use 'exec' + if [ "${KARAF_EXEC+set}" != "set" ]; then + KARAF_EXEC=exec + fi + + debug=false + debugs=false + nodebug=false + while [ "${1}" != "" ]; do + case "${1}" in 'clean') - rm -Rf "$KARAF_DATA" + rm -rf "${KARAF_DATA:?}" shift ;; 'debug') - if [ "x$JAVA_DEBUG_OPTS" = "x" ]; then - JAVA_DEBUG_OPTS="$DEFAULT_JAVA_DEBUG_OPTS" - fi - JAVA_OPTS="$JAVA_DEBUG_OPTS $JAVA_OPTS" + debug=true + shift + ;; + 'debugs') + debug=true + debugs=true shift ;; 'status') MAIN=org.apache.karaf.main.Status + nodebug=true shift ;; 'stop') MAIN=org.apache.karaf.main.Stop + nodebug=true shift ;; 'run' | 'console') @@ -387,8 +506,19 @@ run() { OPTS="-Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true" shift ;; + 'daemon') + OPTS="-Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true" + KARAF_DAEMON="true" + KARAF_EXEC="exec" + shift + ;; 'client') OPTS="-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=false" + nodebug=true + shift + ;; + 'classpath') + echo "Classpath: ${CLASSPATH}" shift ;; *) @@ -397,39 +527,121 @@ run() { esac done - # SONATYPE: commented - #JAVA_ENDORSED_DIRS="${JAVA_HOME}/jre/lib/endorsed:${JAVA_HOME}/lib/endorsed:${KARAF_HOME}/lib/endorsed" - #JAVA_EXT_DIRS="${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext:${KARAF_HOME}/lib/ext" - if $cygwin; then - KARAF_HOME=`cygpath --path --windows "$KARAF_HOME"` - KARAF_BASE=`cygpath --path --windows "$KARAF_BASE"` - KARAF_DATA=`cygpath --path --windows "$KARAF_DATA"` - KARAF_ETC=`cygpath --path --windows "$KARAF_ETC"` - if [ ! -z "$CLASSPATH" ]; then - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + if ${nodebug}; then + debug=false + fi + if ${debug}; then + if [ "x${JAVA_DEBUG_OPTS}" = "x" ]; then + if ${debugs}; then + JAVA_DEBUG_OPTS="${DEFAULT_JAVA_DEBUGS_OPTS}" + else + JAVA_DEBUG_OPTS="${DEFAULT_JAVA_DEBUG_OPTS}" + fi fi - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - # SONATYPE: commented - #JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"` - #JAVA_EXT_DIRS=`cygpath --path --windows "$JAVA_EXT_DIRS"` + JAVA_OPTS="${JAVA_DEBUG_OPTS} ${JAVA_OPTS}" fi - cd "$KARAF_BASE" - # SONATYPE: prepare log and tmp directories - mkdir -p "$KARAF_DATA/log" "$KARAF_DATA/tmp" + while true; do + # When users want to update the lib version of, they just need to create + # a lib.next directory and on the new restart, it will replace the current lib directory. + if [ -d "${KARAF_HOME:?}/lib.next" ] ; then + echo "Updating libs..." + rm -rf "${KARAF_HOME:?}/lib" + mv -f "${KARAF_HOME:?}/lib.next" "${KARAF_HOME}/lib" + + echo "Updating classpath..." + CLASSPATH=$LOCAL_CLASSPATH + setupClassPath + fi - # SONATYPE: removed -Djavax.management.builder.initial - # SONATYPE: removed -Djava.endorsed.dirs="${JAVA_ENDORSED_DIRS}" - # SONATYPE: removed -Djava.ext.dirs="${JAVA_EXT_DIRS}" - if [ "$NOHUP" = "true" ]; then - exec nohup "$JAVA" $JAVA_OPTS -Dkaraf.instances="${KARAF_DATA}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Dkaraf.data="$KARAF_DATA" -Dkaraf.etc="$KARAF_ETC" -Djava.io.tmpdir="$KARAF_DATA/tmp" -Djava.util.logging.config.file="$KARAF_ETC/java.util.logging.properties" $KARAF_OPTS $OPTS -classpath "$CLASSPATH" $MAIN "$@" > /dev/null 2>&1 & + # Ensure the log directory exists + # We may need to have a place to redirect stdout/stderr + if [ ! -d "${KARAF_LOG}" ]; then + mkdir -p "${KARAF_LOG}" + fi + if [ ! -d "${KARAF_DATA}/tmp" ]; then + mkdir -p "${KARAF_DATA}/tmp" + fi + + if [ "${VERSION}" -gt "8" ]; then + launch "${JAVA}" ${JAVA_OPTS} \ + --add-reads=java.xml=java.logging \ + --add-exports=java.base/org.apache.karaf.specs.locator=java.xml,ALL-UNNAMED \ + --patch-module=java.base=lib/endorsed/org.apache.karaf.specs.locator-4.2.6.jar \ + --patch-module=java.xml=lib/endorsed/org.apache.karaf.specs.java.xml-4.2.6.jar \ + --add-opens=java.base/java.security=ALL-UNNAMED \ + --add-opens=java.base/java.net=ALL-UNNAMED \ + --add-opens=java.base/java.lang=ALL-UNNAMED \ + --add-opens=java.base/java.util=ALL-UNNAMED \ + --add-opens=java.naming/javax.naming.spi=ALL-UNNAMED \ + --add-opens=java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED \ + --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED \ + --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED \ + --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED \ + --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED \ + --add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED \ + -Dkaraf.instances="${KARAF_HOME}/instances" \ + -Dkaraf.home="${KARAF_HOME}" \ + -Dkaraf.base="${KARAF_BASE}" \ + -Dkaraf.data="${KARAF_DATA}" \ + -Dkaraf.etc="${KARAF_ETC}" \ + -Dkaraf.log="${KARAF_LOG}" \ + -Dkaraf.restart.jvm.supported=true \ + -Djava.io.tmpdir="${KARAF_DATA}/tmp" \ + -Djava.util.logging.config.file="${KARAF_BASE}/etc/java.util.logging.properties" \ + ${KARAF_SYSTEM_OPTS} \ + ${KARAF_OPTS} \ + ${OPTS} \ + -classpath "${CLASSPATH}" \ + ${MAIN} "$@" + else + launch "${JAVA}" ${JAVA_OPTS} \ + -Djava.endorsed.dirs="${JAVA_ENDORSED_DIRS}" \ + -Dkaraf.instances="${KARAF_HOME}/instances" \ + -Dkaraf.home="${KARAF_HOME}" \ + -Dkaraf.base="${KARAF_BASE}" \ + -Dkaraf.data="${KARAF_DATA}" \ + -Dkaraf.etc="${KARAF_ETC}" \ + -Dkaraf.log="${KARAF_LOG}" \ + -Dkaraf.restart.jvm.supported=true \ + -Djava.io.tmpdir="${KARAF_DATA}/tmp" \ + -Djava.util.logging.config.file="${KARAF_BASE}/etc/java.util.logging.properties" \ + ${KARAF_SYSTEM_OPTS} \ + ${KARAF_OPTS} \ + ${OPTS} \ + -classpath "${CLASSPATH}" \ + ${MAIN} "$@" + fi + + KARAF_RC=$? + if [ ${KARAF_DAEMON} ] ; then + exit ${KARAF_RC} + else + if [ "${KARAF_RC}" -eq 10 ]; then + echo "Restarting JVM..." + else + exit ${KARAF_RC} + fi + fi + done +} + +launch() { + if [ ${NOHUP} ] ; then + ${KARAF_EXEC} nohup "$@" > /dev/null 2>&1 & else - exec "$JAVA" $JAVA_OPTS -Dkaraf.instances="${KARAF_DATA}/instances" -Dkaraf.home="$KARAF_HOME" -Dkaraf.base="$KARAF_BASE" -Dkaraf.data="$KARAF_DATA" -Dkaraf.etc="$KARAF_ETC" -Djava.io.tmpdir="$KARAF_DATA/tmp" -Djava.util.logging.config.file="$KARAF_ETC/java.util.logging.properties" $KARAF_OPTS $OPTS -classpath "$CLASSPATH" $MAIN "$@" + ${KARAF_EXEC} "$@" fi } +nothing() { + # nothing to do here + a=a +} + main() { init + trap 'nothing' TSTP run "$@" } diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/bin/nexus.bat b/assemblies/nexus-base-template/src/main/resources/overlay/bin/nexus.bat index 877955e3a4..2bc7c023b4 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/bin/nexus.bat +++ b/assemblies/nexus-base-template/src/main/resources/overlay/bin/nexus.bat @@ -1,4 +1,5 @@ @echo off + if not "%ECHO%" == "" echo %ECHO% setlocal @@ -79,11 +80,21 @@ if "%KARAF_ETC%" == "" ( set "KARAF_ETC=%KARAF_BASE%\etc\karaf" ) +if not "%KARAF_LOG%" == "" ( + if not exist "%KARAF_LOG%" ( + call :warn KARAF_LOG is not valid: "%KARAF_LOG%" + goto END + ) +) +if "%KARAF_LOG%" == "" ( + set "KARAF_LOG=%KARAF_DATA%\log" +) + set LOCAL_CLASSPATH=%CLASSPATH% -set JAVA_MODE=-server set CLASSPATH=%LOCAL_CLASSPATH%;%KARAF_BASE%\conf set DEFAULT_JAVA_DEBUG_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 +set DEFAULT_JAVA_DEBUGS_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 if "%LOCAL_CLASSPATH%" == "" goto :KARAF_CLASSPATH_EMPTY set CLASSPATH=%LOCAL_CLASSPATH%;%KARAF_BASE%\conf @@ -92,6 +103,8 @@ if "%LOCAL_CLASSPATH%" == "" goto :KARAF_CLASSPATH_EMPTY set CLASSPATH=%KARAF_BASE%\conf :KARAF_CLASSPATH_END +set CLASSPATH_INITIAL=%CLASSPATH% + rem Setup Karaf Home if exist "%KARAF_HOME%\conf\karaf-rc.cmd" call %KARAF_HOME%\conf\karaf-rc.cmd if exist "%HOME%\karaf-rc.cmd" call %HOME%\karaf-rc.cmd @@ -174,8 +187,8 @@ if not "%JAVA%" == "" goto :Check_JAVA_END ) if not exist "%JAVA_HOME%" ( goto TryRegJDK - ) - goto TryJDKEnd + ) + goto TryJDKEnd :TryRegJDK rem try getting the JAVA_HOME from registry FOR /F "usebackq tokens=3*" %%A IN (`REG QUERY "HKLM\Software\JavaSoft\Java Development Kit" /v CurrentVersion`) DO ( @@ -187,7 +200,7 @@ if not "%JAVA%" == "" goto :Check_JAVA_END if not exist "%JAVA_HOME%" ( call :warn Unable to retrieve JAVA_HOME from Registry ) - goto TryJDKEnd + goto TryJDKEnd :TryJDKEnd if not exist "%JAVA_HOME%" ( call :warn JAVA_HOME is not valid: "%JAVA_HOME%" @@ -196,22 +209,19 @@ if not "%JAVA%" == "" goto :Check_JAVA_END set JAVA=%JAVA_HOME%\bin\java :Check_JAVA_END +rem Retrieve java version +for /f tokens^=2-5^ delims^=.-_+^" %%j in ('"%JAVA%" -fullversion 2^>^&1') do ( + if %%j==1 (set JAVA_VERSION=%%k) else (set JAVA_VERSION=%%j) +) + if not exist "%JAVA_HOME%\bin\server\jvm.dll" ( if not exist "%JAVA_HOME%\jre\bin\server\jvm.dll" ( echo WARNING: Running Karaf on a Java HotSpot Client VM because server-mode is not available. echo Install Java Developer Kit to fix this. echo For more details see http://java.sun.com/products/hotspot/whitepaper.html#client - set JAVA_MODE=-client ) ) - -rem SONATYPE: preferred IPv4 by default -if "%KARAF_OPTS%" == "" set KARAF_OPTS=-Djava.net.preferIPv4Stack=true - -rem SONATYPE: removed -Dcom.sun.management.jmxremote and unused derby properties -set DEFAULT_JAVA_OPTS=%JAVA_MODE% -Xms%JAVA_MIN_MEM% -Xmx%JAVA_MAX_MEM% -XX:MaxDirectMemorySize=%DIRECT_MAX_MEM% -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -XX:+LogVMOutput -XX:LogFile=..\sonatype-work\nexus3\log\jvm.log -XX:-OmitStackTraceInFastThrow - -rem SONATYPE: removed -XX:PermSize and -XX:MaxPermSize +set DEFAULT_JAVA_OPTS=-Xms%JAVA_MIN_MEM% -Xmx%JAVA_MAX_MEM% -XX:MaxDirectMemorySize=%DIRECT_MAX_MEM% -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=%KARAF_LOG%\jvm.log -XX:-OmitStackTraceInFastThrow -Djava.net.preferIPv4Stack=true if "%JAVA_OPTS%" == "" set JAVA_OPTS=%DEFAULT_JAVA_OPTS% @@ -270,9 +280,11 @@ if "%KARAF_PROFILER%" == "" goto :RUN if "%1" == "console" goto :EXECUTE_CONSOLE if "%1" == "start" goto :EXECUTE_SERVER if "%1" == "server" goto :EXECUTE_SERVER + if "%1" == "daemon" goto :EXECUTE_DAEMON if "%1" == "client" goto :EXECUTE_CLIENT if "%1" == "clean" goto :EXECUTE_CLEAN if "%1" == "debug" goto :EXECUTE_DEBUG + if "%1" == "debugs" goto :EXECUTE_DEBUGS goto :EXECUTE :EXECUTE_STOP @@ -294,13 +306,19 @@ if "%KARAF_PROFILER%" == "" goto :RUN shift goto :RUN_LOOP +:EXECUTE_DAEMON + SET OPTS=-Dkaraf.startLocalConsole=false -Dkaraf.startRemoteShell=true + SET KARAF_DAEMON=true + shift + goto :RUN_LOOP + :EXECUTE_CLIENT SET OPTS=-Dkaraf.startLocalConsole=true -Dkaraf.startRemoteShell=false shift goto :RUN_LOOP :EXECUTE_CLEAN - rmdir /S /Q "%KARAF_DATA%" + pushd "%KARAF_DATA%" && (rmdir /S /Q "%KARAF_DATA%" 2>nul & popd) shift goto :RUN_LOOP @@ -310,14 +328,96 @@ if "%KARAF_PROFILER%" == "" goto :RUN shift goto :RUN_LOOP +:EXECUTE_DEBUGS + if "%JAVA_DEBUG_OPTS%" == "" set JAVA_DEBUG_OPTS=%DEFAULT_JAVA_DEBUGS_OPTS% + set JAVA_OPTS=%JAVA_DEBUG_OPTS% %JAVA_OPTS% + shift + goto :RUN_LOOP + :EXECUTE SET ARGS=%1 %2 %3 %4 %5 %6 %7 %8 rem Execute the Java Virtual Machine cd "%KARAF_BASE%" - rem SONATYPE: removed -Djavax.management.builder.initial - rem SONATYPE: removed -Djava.endorsed.dirs="%JAVA_HOME%\jre\lib\endorsed;%JAVA_HOME%\lib\endorsed;%KARAF_HOME%\lib\endorsed" - rem SONATYPE: removed -Djava.ext.dirs="%JAVA_HOME%\jre\lib\ext;%JAVA_HOME%\lib\ext;%KARAF_HOME%\lib\ext" - "%JAVA%" %JAVA_OPTS% %OPTS% -classpath "%CLASSPATH%" -Dkaraf.instances="%KARAF_DATA%\instances" -Dkaraf.home="%KARAF_HOME%" -Dkaraf.base="%KARAF_BASE%" -Dkaraf.etc="%KARAF_ETC%" -Djava.io.tmpdir="%KARAF_DATA%\tmp" -Dkaraf.data="%KARAF_DATA%" -Djava.util.logging.config.file="%KARAF_ETC%\java.util.logging.properties" %KARAF_OPTS% %MAIN% %ARGS% + + rem When users want to update the lib version of, they just need to create + rem a lib.next directory and on the new restart, it will replace the current lib directory. + if exist "%KARAF_HOME%\lib.next" ( + echo Updating libs... + RD /S /Q "%KARAF_HOME%\lib" + MOVE /Y "%KARAF_HOME%\lib.next" "%KARAF_HOME%\lib" + + echo "Updating classpath..." + set CLASSPATH=%CLASSPATH_INITIAL% + pushd "%KARAF_HOME%\lib\boot" + for %%G in (*.jar) do call:APPEND_TO_CLASSPATH %%G + popd + ) + + rem If major version is greater than 1 (meaning Java 9 or 10), we don't use endorsed lib but module + rem If major version is 1 (meaning Java 1.6, 1.7, 1.8), we use endorsed lib + if %JAVA_VERSION% GTR 8 ( + "%JAVA%" %JAVA_OPTS% %OPTS% ^ + --add-reads=java.xml=java.logging ^ + --add-exports=java.base/org.apache.karaf.specs.locator=java.xml,ALL-UNNAMED ^ + --patch-module=java.base=lib/endorsed/org.apache.karaf.specs.locator-4.2.6.jar ^ + --patch-module=java.xml=lib/endorsed/org.apache.karaf.specs.java.xml-4.2.6.jar ^ + --add-opens=java.base/java.security=ALL-UNNAMED ^ + --add-opens=java.base/java.net=ALL-UNNAMED ^ + --add-opens=java.base/java.lang=ALL-UNNAMED ^ + --add-opens=java.base/java.util=ALL-UNNAMED ^ + --add-opens=java.naming/javax.naming.spi=ALL-UNNAMED ^ + --add-opens=java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED ^ + --add-exports=java.base/sun.net.www.protocol.http=ALL-UNNAMED ^ + --add-exports=java.base/sun.net.www.protocol.https=ALL-UNNAMED ^ + --add-exports=java.base/sun.net.www.protocol.jar=ALL-UNNAMED ^ + --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED ^ + --add-exports=jdk.naming.rmi/com.sun.jndi.url.rmi=ALL-UNNAMED ^ + -classpath "%CLASSPATH%" ^ + -Dkaraf.instances="%KARAF_HOME%\instances" ^ + -Dkaraf.home="%KARAF_HOME%" ^ + -Dkaraf.base="%KARAF_BASE%" ^ + -Dkaraf.etc="%KARAF_ETC%" ^ + -Dkaraf.log="%KARAF_LOG%" ^ + -Dkaraf.restart.jvm.supported=true ^ + -Djava.io.tmpdir="%KARAF_DATA%\tmp" ^ + -Dkaraf.data="%KARAF_DATA%" ^ + -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" ^ + %KARAF_SYSTEM_OPTS% %KARAF_OPTS% %MAIN% %ARGS% + ) else ( + "%JAVA%" %JAVA_OPTS% %OPTS% ^ + -classpath "%CLASSPATH%" ^ + -Djava.endorsed.dirs="%JAVA_HOME%\jre\lib\endorsed;%JAVA_HOME%\lib\endorsed;%KARAF_HOME%\lib\endorsed" ^ + -Dkaraf.instances="%KARAF_HOME%\instances" ^ + -Dkaraf.home="%KARAF_HOME%" ^ + -Dkaraf.base="%KARAF_BASE%" ^ + -Dkaraf.etc="%KARAF_ETC%" ^ + -Dkaraf.log="%KARAF_LOG%" ^ + -Dkaraf.restart.jvm.supported=true ^ + -Djava.io.tmpdir="%KARAF_DATA%\tmp" ^ + -Dkaraf.data="%KARAF_DATA%" ^ + -Djava.util.logging.config.file="%KARAF_BASE%\etc\java.util.logging.properties" ^ + %KARAF_SYSTEM_OPTS% %KARAF_OPTS% %MAIN% %ARGS% + ) + + rem If KARAF_DAEMON is defined, auto-restart is bypassed and control given + rem back to the operating system + if defined "%KARAF_DAEMON%" ( + rem If Karaf has been started by winsw, the process can be restarted + rem by executing KARAF_DAEMON% restart! + rem https://github.com/kohsuke/winsw#restarting-service-from-itself + if defined "%WINSW_EXECUTABLE%" ( + if ERRORLEVEL 10 ( + echo Restarting ... + %KARAF_DAEMON% restart! + ) + ) + ) else ( + if ERRORLEVEL 10 ( + echo Restarting JVM... + goto EXECUTE + ) + ) + rem # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @@ -328,4 +428,4 @@ endlocal if not "%PAUSE%" == "" pause :END_NO_PAUSE - + EXIT /B %ERRORLEVEL% diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/bin/setenv b/assemblies/nexus-base-template/src/main/resources/overlay/bin/setenv index 912804f5fd..9761e67b99 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/bin/setenv +++ b/assemblies/nexus-base-template/src/main/resources/overlay/bin/setenv @@ -1,8 +1,10 @@ #!/bin/sh + +# # handle specific scripts; the SCRIPT_NAME is exactly the name of the Karaf -# script; for example karaf, start, stop, admin, client, ... +# script: client, instance, shell, start, status, stop, karaf # -# if [ "$KARAF_SCRIPT" = "SCRIPT_NAME" ]; then +# if [ "${KARAF_SCRIPT}" == "SCRIPT_NAME" ]; then # Actions go here... # fi @@ -17,15 +19,17 @@ # The following section shows the possible configuration options for the default # karaf scripts # -# JAVA_HOME # Location of Java installation -# JAVA_MIN_MEM # Minimum Java heap memory for the JVM -# JAVA_MAX_MEM # Maximum Java heap memory for the JVM -# DIRECT_MAX_MEM # Maximum direct buffer memory for the JVM -# EXTRA_JAVA_OPTS # Additional JVM options -# KARAF_HOME # Karaf home folder -# KARAF_DATA # Karaf data folder -# KARAF_BASE # Karaf base folder -# KARAF_ETC # Karaf etc folder -# KARAF_OPTS # Additional available Karaf options -# KARAF_DEBUG # Enable debug mode -# KARAF_REDIRECT # Enable/set the std/err redirection when using bin/start +# export JAVA_HOME # Location of Java installation +# export JAVA_MIN_MEM # Minimum Java heap memory for the JVM +# export JAVA_MAX_MEM # Maximum Java heap memory for the JVM +# export DIRECT_MAX_MEM # Maximum direct buffer memory for the JVM +# export EXTRA_JAVA_OPTS # Additional JVM options +# export KARAF_HOME # Karaf home folder +# export KARAF_DATA # Karaf data folder +# export KARAF_BASE # Karaf base folder +# export KARAF_ETC # Karaf etc folder +# export KARAF_SYSTEM_OPTS # First citizen Karaf options +# export KARAF_OPTS # Additional available Karaf options +# export KARAF_DEBUG # Enable debug mode +# export KARAF_REDIRECT # Enable/set the std/err redirection when using bin/start +# export KARAF_NOROOT # Prevent execution as root if set to true diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/bin/setenv.bat b/assemblies/nexus-base-template/src/main/resources/overlay/bin/setenv.bat index 8da0cab48f..21000e46d8 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/bin/setenv.bat +++ b/assemblies/nexus-base-template/src/main/resources/overlay/bin/setenv.bat @@ -1,4 +1,5 @@ @echo off + rem rem handle specific scripts; the SCRIPT_NAME is exactly the name of the Karaf rem script; for example karaf.bat, start.bat, stop.bat, admin.bat, client.bat, ... @@ -29,7 +30,7 @@ rem SET JAVA_MAX_MEM rem Maximum direct buffer memory for the JVM rem SET DIRECT_MAX_MEM rem Additional JVM options -rem SET EXTRA_JAVA_OPTS +rem SET EXTRA_JAVA_OPTS rem Karaf home folder rem SET KARAF_HOME rem Karaf data folder @@ -38,6 +39,8 @@ rem Karaf base folder rem SET KARAF_BASE rem Karaf etc folder rem SET KARAF_ETC +rem First citizen Karaf options +rem SET KARAF_SYSTEM_OPTS rem Additional available Karaf options rem SET KARAF_OPTS rem Enable debug mode diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/config.properties b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/config.properties index c168ff4533..fe07f66987 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/config.properties +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/config.properties @@ -31,8 +31,8 @@ karaf.framework=felix # # Location of the OSGi frameworks # -karaf.framework.equinox=mvn\:org.eclipse.birt.runtime/org.eclipse.osgi/3.10.2.v20150203-1939 -karaf.framework.felix=mvn\:org.apache.felix/org.apache.felix.framework/5.6.2 +karaf.framework.equinox=mvn\:org.eclipse.platform/org.eclipse.osgi/3.12.100 +karaf.framework.felix=mvn\:org.apache.felix/org.apache.felix.framework/5.6.12 # # Framework config properties. @@ -59,76 +59,116 @@ org.osgi.framework.system.packages= \ org.osgi.service.startlevel;version="1.1";uses:="org.osgi.framework",\ org.osgi.service.url;version="1.0",\ org.osgi.util.tracker;version="1.5.1";uses:="org.osgi.framework",\ - org.apache.karaf.version;version="4.0.9",\ - org.apache.karaf.diagnostic.core.common;uses:=org.apache.karaf.diagnostic.core;version="4.0.9",\ - org.apache.karaf.diagnostic.core;uses:=org.osgi.framework;version="4.0.9",\ - org.apache.karaf.jaas.boot.principal;uses:=javax.security.auth;version="4.0.9",\ - org.apache.karaf.jaas.boot;uses:="javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.osgi.framework";version="4.0.9",\ + org.apache.karaf.version;version="4.2.6",\ + org.apache.karaf.diagnostic.core;uses:=org.osgi.framework;version="4.2.6",\ + org.apache.karaf.diagnostic.core.common;uses:=org.apache.karaf.diagnostic.core;version="4.2.6",\ + org.apache.karaf.jaas.boot.principal;uses:=javax.security.auth;version="4.2.6",\ + org.apache.karaf.jaas.boot;uses:="javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.osgi.framework";version="4.2.6",\ + org.apache.karaf.info;version="4.2.6",\ ${jre-${java.specification.version}} # # Extra packages appended after standard packages # -org.osgi.framework.system.packages.extra= \ - sun.security.ssl, \ - com.sun.net.httpserver, \ - javax.annotation;version=1.2, \ - javax.annotation.meta;version=1.2, \ - javax.annotation.security;version=1.2, \ - org.bouncycastle.asn1;version=1.60, \ - org.bouncycastle.asn1.x500;version=1.60, \ - org.bouncycastle.asn1.x509;version=1.60, \ - org.bouncycastle.bcpg;version=1.60, \ - org.bouncycastle.cert;version=1.60, \ - org.bouncycastle.cert.jcajce;version=1.60, \ - org.bouncycastle.crypto.prng;version=1.60, \ - org.bouncycastle.jce.provider;version=1.60, \ - org.bouncycastle.openssl;version=1.60, \ - org.bouncycastle.openssl.jcajce;version=1.60, \ - org.bouncycastle.openpgp;version=1.60, \ - org.bouncycastle.openpgp.operator;version=1.60, \ - org.bouncycastle.openpgp.operator.jcajce;version=1.60, \ - org.bouncycastle.operator;version=1.60, \ - org.bouncycastle.operator.jcajce;version=1.60, \ - org.bouncycastle.util.encoders;version=1.60, \ - org.bouncycastle.x509;version=1.60, \ - org.xerial.snappy, \ - org.apache.karaf.branding, \ - sun.misc, \ - sun.nio.ch +org.osgi.framework.system.packages.extra = \ + javax.annotation;version=1.2, \ + javax.annotation.meta;version=1.2, \ + javax.annotation.security;version=1.2, \ + org.bouncycastle.asn1;version=1.60, \ + org.bouncycastle.asn1.x500;version=1.60, \ + org.bouncycastle.asn1.x509;version=1.60, \ + org.bouncycastle.bcpg;version=1.60, \ + org.bouncycastle.cert;version=1.60, \ + org.bouncycastle.cert.jcajce;version=1.60, \ + org.bouncycastle.crypto.prng;version=1.60, \ + org.bouncycastle.jce.provider;version=1.60, \ + org.bouncycastle.openssl;version=1.60, \ + org.bouncycastle.openssl.jcajce;version=1.60, \ + org.bouncycastle.openpgp;version=1.60, \ + org.bouncycastle.openpgp.operator;version=1.60, \ + org.bouncycastle.openpgp.operator.jcajce;version=1.60, \ + org.bouncycastle.operator;version=1.60, \ + org.bouncycastle.operator.jcajce;version=1.60, \ + org.bouncycastle.util.encoders;version=1.60, \ + org.bouncycastle.x509;version=1.60, \ + org.apache.karaf.branding, \ + sun.misc, \ + sun.nio.ch, \ + sun.security.ssl, \ + com.sun.net.httpserver org.osgi.framework.system.capabilities= \ ${eecap-${java.specification.version}}, \ - osgi.service;effective:=active;objectClass=org.osgi.service.packageadmin.PackageAdmin, \ - osgi.service;effective:=active;objectClass=org.osgi.service.resolver.Resolver, \ - osgi.service;effective:=active;objectClass=org.osgi.service.startlevel.StartLevel, \ - osgi.service;effective:=active;objectClass=org.osgi.service.url.URLHandlers + ${${karaf.framework}-capabilities}, \ + ${karaf-capabilities} +karaf-capabilities= \ + osgi.service;objectClass:List=org.apache.karaf.info.ServerInfo + +felix-capabilities= \ + osgi.service;objectClass:List=org.osgi.service.packageadmin.PackageAdmin, \ + osgi.service;objectClass:List=org.osgi.service.resolver.Resolver, \ + osgi.service;objectClass:List=org.osgi.service.startlevel.StartLevel + +equinox-capabilities= \ + osgi.service;objectClass:List=java.lang.ClassLoader;equinox.classloader.type=contextClassLoader, \ + osgi.service;objectClass:List=javax.xml.parsers.DocumentBuilderFactory, \ + osgi.service;objectClass:List=javax.xml.parsers.SAXParserFactory, \ + osgi.service;objectClass:List=org.eclipse.osgi.framework.log.FrameworkLog, \ + osgi.service;objectClass:List=org.eclipse.osgi.framework.log.FrameworkLog;performance=true, \ + osgi.service;objectClass:List=org.eclipse.osgi.service.datalocation.Location;type=eclipse.home.location, \ + osgi.service;objectClass:List=org.eclipse.osgi.service.datalocation.Location;type=osgi.configuration.area, \ + osgi.service;objectClass:List=org.eclipse.osgi.service.datalocation.Location;type=osgi.install.area, \ + osgi.service;objectClass:List=org.eclipse.osgi.service.datalocation.Location;type=osgi.instance.area, \ + osgi.service;objectClass:List=org.eclipse.osgi.service.datalocation.Location;type=osgi.user.area, \ + osgi.service;objectClass:List=org.eclipse.osgi.service.debug.DebugOptions, \ + osgi.service;objectClass:List=org.eclipse.osgi.service.environment.EnvironmentInfo, \ + osgi.service;objectClass:List=org.eclipse.osgi.service.localization.BundleLocalization, \ + osgi.service;objectClass:List="org.osgi.service.log.LogReaderService,org.eclipse.equinox.log.ExtendedLogReaderService", \ + osgi.service;objectClass:List="org.osgi.service.log.LogService,org.eclipse.equinox.log.ExtendedLogService", \ + osgi.service;objectClass:List=org.eclipse.osgi.service.security.TrustEngine;osgi.signedcontent.trust.engine=org.eclipse.osgi, \ + osgi.service;objectClass:List=org.eclipse.osgi.service.urlconversion.URLConverter;protocol:List="bundleentry,bundleresource" + +eecap-11= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0,10.0,11.0", \ + osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \ + osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0,10.0,11.0", \ + osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0,10.0,11.0", \ + osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0,10.0,11.0" +eecap-10= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0,10.0", \ + osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \ + osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0,10.0", \ + osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0,10.0", \ + osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0,10.0" +eecap-9= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,9.0", \ + osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \ + osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8,9.0", \ + osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8,9.0", \ + osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8,9.0" eecap-1.8= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ - osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8" -eecap-1.7= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ - osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7" -eecap-1.6= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ - osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6" -eecap-1.5= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ - osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5" -eecap-1.4= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ - osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4" -eecap-1.3= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1", \ - osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3" -eecap-1.2= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1", \ - osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2" + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8", \ + osgi.ee; osgi.ee="JRE"; version:List="1.0,1.1", \ + osgi.ee; osgi.ee="JavaSE/compact1"; version:List="1.8", \ + osgi.ee; osgi.ee="JavaSE/compact2"; version:List="1.8", \ + osgi.ee; osgi.ee="JavaSE/compact3"; version:List="1.8" # # javax.transaction is needed to avoid class loader constraint violation when using javax.sql # -org.osgi.framework.bootdelegation=\ - com.sun.*, \ - javax.transaction, \ - javax.transaction.*, \ - javax.xml.crypto, \ - javax.xml.crypto.*, \ - sun.* +org.osgi.framework.bootdelegation = \ + com.sun.*, \ + javax.transaction, \ + javax.transaction.*, \ + javax.xml.crypto, \ + javax.xml.crypto.*, \ + jdk.nashorn.*, \ + sun.*, \ + jdk.internal.reflect, \ + jdk.internal.reflect.*, \ + org.apache.karaf.jaas.boot, \ + org.apache.karaf.jaas.boot.principal # jVisualVM support # in order to use Karaf with jvisualvm, the org.osgi.framework.bootdelegation property has to contain the org.netbeans.lib.profiler.server package @@ -143,11 +183,6 @@ org.osgi.framework.bootdelegation=\ # org.osgi.framework.bootdelegation=org.apache.karaf.jaas.boot,org.apache.karaf.jaas.boot.principal,sun.*,com.sun.*,javax.transaction,javax.transaction.*,javax.xml.crypto,javax.xml.crypto.*,com.yourkit.* # -# -# OSGi Execution Environment -# -org.osgi.framework.executionenvironment=J2SE-1.8,JavaSE-1.8,J2SE-1.7,JavaSE-1.7,J2SE-1.6,JavaSE-1.6,J2SE-1.5,JavaSE-1.5,J2SE-1.4,JavaSE-1.4,J2SE-1.3,JavaSE-1.3,J2SE-1.2,,JavaSE-1.2,CDC-1.1/Foundation-1.1,CDC-1.0/Foundation-1.0,J2ME,OSGi/Minimum-1.1,OSGi/Minimum-1.0 - # # Set the parent classloader for the bundle to the classloader that loads the Framework (i.e. everything in lib/*.jar) # @@ -160,16 +195,21 @@ org.osgi.framework.startlevel.beginning=100 karaf.startlevel.bundle=80 # -# The location of the Karaf shutdown port file +# The location of the Karaf shutdown port file used to stop instance # karaf.shutdown.port.file=${karaf.data}/port +# +# The location of the Karaf pid file +# +karaf.pid.file=${karaf.data}/karaf.pid + # # Configuration FileMonitor properties # felix.fileinstall.enableConfigSave = true felix.fileinstall.dir = ${karaf.etc} -felix.fileinstall.filter = .*\\.cfg +felix.fileinstall.filter = .*\\.(cfg|config) felix.fileinstall.poll = 1000 felix.fileinstall.noInitialDelay = true felix.fileinstall.log.level = 3 @@ -187,9 +227,9 @@ eclipse.stateSaveDelayInterval = 1000 # # OBR Repository list -# This property will be modified by the obr:addUrl and obr:removeUrl commands. +# This property will be modified by the obr:addUrl and obr:removeUrl commands. # -obr.repository.url = +obr.repository.url = # # Start blueprint bundles synchronously when possible @@ -202,9 +242,12 @@ org.apache.aries.blueprint.synchronous=true org.apache.aries.proxy.weaving.enabled= # -# mvn url handler requires config instance configuration +# NXRM: prefer static configuration of 'mvn:' url handler which doesn't require using ConfigAdmin. +# This avoids a race condition when starting the features service as part of 'startup.properties'. # -#org.ops4j.pax.url.mvn.requireConfigAdminConfig=true +# (this property must not be set to *any* value, as pax-url just checks if it's set - not the value) +# +# org.ops4j.pax.url.mvn.requireConfigAdminConfig=true # # Don't delay the console startup. Set to true if you want the console to start after all other bundles @@ -212,6 +255,21 @@ org.apache.aries.proxy.weaving.enabled= karaf.delay.console=false # -# shutdown command, change if needed +# Enable native Karaf support for systemd's watchdog. +# +# In addition to setting the flag to true, the JNA library needs to be made +# available to the main classloader by adding the two following libraries +# to the lib/boot directory +# mvn:net.java.dev.jna/jna/${jna.version} +# mvn:net.java.dev.jna/jna-platform/${jna.version} +# or by building a custom distribution and adding the following lines for the +# karaf maven plugin configuration: +# mvn:net.java.dev.jna/jna/${jna.version};type:=boot;export:=false +# mvn:net.java.dev.jna/jna-platform/${jna.version};type:=boot;export:=false +# +#karaf.systemd.enabled=true + +# +# NXRM: shutdown command, change if needed # karaf.shutdown.command=faRcsbjiOtDfNuIR49fQJVav6D191MXIUTSWeh0rOnRNlRF8R1eVDgMASDTMkJgR diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/custom.properties b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/custom.properties index c9049af2f1..05ec95319f 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/custom.properties +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/custom.properties @@ -9,14 +9,11 @@ karaf.systemBundlesStartLevel=50 # You can place any customized configuration here. # -# A very small amount of logging before pax-logging is enabled ends up here +# small amount of logging before pax-logging is enabled ends up here karaf.bootstrap.log=${karaf.data}/log/karaf.log -# early load of mvn: protocol config +# ensure our static mvn: protocol config is loaded as early as possible ${includes}=org.ops4j.pax.url.mvn.cfg +# prefer our own approach to guarding the data-dir from concurrent use karaf.lock.class=org.sonatype.nexus.karaf.NexusFileLock - -# Temporary workaround for https://issues.apache.org/jira/browse/FELIX-5184 -felix.native.osname.alias.windowsserver2012=windows server 2012,win32 - diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/java.util.logging.properties b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/java.util.logging.properties index c8d5d5f4b9..ae8acd42db 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/java.util.logging.properties +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/java.util.logging.properties @@ -1,4 +1,2 @@ # Empty java.util.logging.properties to prevent the log to stderr, so that # all logs will be delegated to pax logging JUL handler only - - diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/jmx.acl.cfg b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/jmx.acl.cfg index f74b37a807..5478574a11 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/jmx.acl.cfg +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/jmx.acl.cfg @@ -1,7 +1,7 @@ # # Generic JMX ACL # -# This file defines the roles required for MBean operations for MBeans that +# This file defines the roles required for MBean operations for MBeans that # do not have this defined explicitly. # # The definition of ACLs for JMX operations works as follows: @@ -18,7 +18,7 @@ # this: # test : admin # getVal : manager, viewer -# +# # The system looks for required roles using the following process: # The most specific configuration file/pid is tried first. E.g. in the # above example the jmx.acl.foo.bar.Test.cfg is looked at first. In this @@ -38,9 +38,9 @@ # associated with the longest match are used. So if you have te* and * and # the method invoked is 'test', then the roles defined with te* are used, # not the ones defined with *. -# If no matching definition is found in the current configuration file, a -# more general configuration file is looked for. So jmx.acl.foo.bar.cfg is -# tried next, this matches the domain of the MBean. If there is no match +# If no matching definition is found in the current configuration file, a +# more general configuration file is looked for. So jmx.acl.foo.bar.cfg is +# tried next, this matches the domain of the MBean. If there is no match # found in the domain the most generic configuration file is consulted # (jmx.acl.cfg). # If a matching definition is found, this is used and the process will not @@ -51,4 +51,4 @@ list* = viewer get* = viewer is* = viewer set* = admin -* = admin \ No newline at end of file +* = admin diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.felix.fileinstall-deploy.cfg b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.felix.fileinstall-deploy.cfg index 9168b82888..ab6cd0ba57 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.felix.fileinstall-deploy.cfg +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.felix.fileinstall-deploy.cfg @@ -2,10 +2,10 @@ # Hot deployment of bundles # -felix.fileinstall.dir=${karaf.base}/deploy -felix.fileinstall.tmpdir=${karaf.data}/generated-bundles -felix.fileinstall.noInitialDelay=true -felix.fileinstall.poll=1000 -felix.fileinstall.active.level=200 -felix.fileinstall.start.level=200 -felix.fileinstall.log.level=3 +felix.fileinstall.dir = ${karaf.base}/deploy +felix.fileinstall.tmpdir = ${karaf.data}/generated-bundles +felix.fileinstall.noInitialDelay = true +felix.fileinstall.poll = 1000 +felix.fileinstall.start.level = 200 +felix.fileinstall.active.level = 200 +felix.fileinstall.log.level = 3 diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.kar.cfg b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.kar.cfg index 93f5d48dfb..da8b2aafb0 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.kar.cfg +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.kar.cfg @@ -3,3 +3,14 @@ # deploying KARs as that may end up rebooting NXRM # noAutoRefreshBundles=true + +# +# Enable or disable the automatic start of the bundles when installing +# the features contained in a KAR file +# +noAutoStartBundles=false + +# +# Directory where the kar are stored (when downloaded from Maven for instance) +# +#karStorage=${karaf.data}/kar diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.log.cfg b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.log.cfg index 75cbb8d007..b698c15cbf 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.log.cfg +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.log.cfg @@ -3,8 +3,12 @@ # and log:exception-display commands. # -# The number of log statements to be displayed using log:display -size=500 +# +# The number of log statements to be displayed using log:display. It also defines the number +# of lines searched for exceptions using log:exception-display. You can override this value +# at runtime using -n in log:display. +# +size = 500 # this matches the pattern in logback.xml with a few caveats # the date %d parameter is split up to avoid quoting in output diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.management.cfg b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.management.cfg index b17e007de9..e38a5eb0bc 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.management.cfg +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.management.cfg @@ -46,3 +46,58 @@ threaded = true # The ObjectName used to register the JMXConnectorServer # objectName = connector:name=rmi + +# +# Timeout to lookup for the keystore in case of SSL authentication usage +# +#keyStoreAvailabilityTimeout = 5000 + +# +# The type of authentication +# +#authenticatorType = password + +# +# Enable or not SSL/TLS +# +#secured = false + +# +# Secure algorithm to use +# +#secureAlgorithm = default + +# +# Secure protocol to use +# +#secureProtocol = TLS + +# +# Keystore to use for secure mode +# +#keyStore = karaf.ks + +# +# Alias of the key to use in the keystore +# +#keyAlias = karaf + +# +# Truststore to use for secure mode +# +#trustStore = karaf.ts + +# +# Create the JMX RMI registry +# +#createRmiRegistry = true + +# +# Locate the JMX RMI registry +# +#locateRmiRegistry = true + +# +# Locate an existing MBean server if possible (usefull when Karaf is embedded) +# +#locateExistingMBeanServerIfPossible = true diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.shell.cfg b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.shell.cfg index 0c982b7d2a..3b154b153d 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.shell.cfg +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.apache.karaf.shell.cfg @@ -14,11 +14,31 @@ sshHost = 0.0.0.0 # sshIdleTimeout = 1800000 +# +# Define the number of the NIO workers for the sshd server. Default is 2. +# +#nio-workers = 2 + +# +# Define the maximum number of SSH sessions. Default is unlimited. +# +#max-concurrent-sessions = -1 + # # sshRealm defines which JAAS domain to use for password authentication. # sshRealm = shiro +# +# sshRole defines the role required to access the console through ssh +# +sshRole = admin + +# +# Defines if the SFTP system is enabled or not in the SSH server +# +sftpEnabled=false + # # The location of the hostKey file defines where the private/public key of the server # is located. If no file is at the defined location it will be ignored. @@ -33,15 +53,25 @@ hostKeyFormat = simple # # Self defined key size in 1024, 2048, 3072, or 4096 -# If not set, this defaults to 4096. +# If not set, this defaults to 2048. # -# keySize = 4096 +# keySize = 2048 # # Specify host key algorithm, defaults to RSA # # algorithm = RSA +# +# Specify the client log level (default is WARN) +# 0: ERROR +# 1: WARN +# 2: INFO +# 3: DEBUG +# 4: TRACE +# +#logLevel = 1 + # # Specify an additional welcome banner to be displayed when a user logs into the server. # @@ -59,3 +89,27 @@ hostKeyFormat = simple # You can change the completion mode directly in the shell console, using shell:completion command. # completionMode = GLOBAL + +# +# Override allowed SSH cipher algorithms. +# Default: aes128-ctr,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc +# +# ciphers = aes128-ctr,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc + +# +# Override allowed SSH HMAC algorithms. +# Default: hmac-sha2-512,hmac-sha2-256,hmac-sha1 +# +# macs = hmac-sha2-512,hmac-sha2-256,hmac-sha1 + +# +# Override allowed SSH key exchange algorithms. +# Default: diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 +# +# kexAlgorithms = diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1 + +# +# Override moduli-url. +# Default: moduli-url not specified to use the internal one from SSHD +# +# moduli-url = external moduli-url users wanna use diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.ops4j.pax.logging.cfg b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.ops4j.pax.logging.cfg new file mode 100644 index 0000000000..a25d424c28 --- /dev/null +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.ops4j.pax.logging.cfg @@ -0,0 +1,2 @@ +# required by Karaf's log command +log4j.rootLogger=INFO diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.ops4j.pax.url.mvn.cfg b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.ops4j.pax.url.mvn.cfg index 4c62ff7313..15cea2f0c2 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.ops4j.pax.url.mvn.cfg +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/org.ops4j.pax.url.mvn.cfg @@ -3,10 +3,13 @@ ########################################################################## # +# see: https://ops4j1.jira.com/wiki/display/paxurl/Aether+Configuration +# + # If set to true, the following property will not allow any certificate to be used # when accessing Maven repositories through SSL # -#org.ops4j.pax.url.mvn.certificateCheck= +org.ops4j.pax.url.mvn.certificateCheck=true # # Path to the local Maven settings file. @@ -19,6 +22,10 @@ # * 3. if not found looks for ${maven.home}/conf/settings.xml # * 4. if not found looks for ${M2_HOME}/conf/settings.xml # +# Properties prefixed with "org.ops4j.pax.url.mvn." have +# higher priority except element. HTTP proxies should be configured in +# settings file +# # Default to empty settings file, comment this out to pick up your local Maven settings org.ops4j.pax.url.mvn.settings=${karaf.base}/${karaf.default.repository}/settings.xml @@ -28,52 +35,96 @@ org.ops4j.pax.url.mvn.settings=${karaf.base}/${karaf.default.repository}/setting # The value of this property will be extracted from the settings.xml file # above, or defaulted to: # System.getProperty( "user.home" ) + "/.m2/repository" +# leaving this option commented makes the system dependent on external +# configuration, which is not always desired +# "localRepository" is the target location for artifacts downloaded from +# "remote repositories" # # Default to Karaf's system repository, comment this out to use your local repository org.ops4j.pax.url.mvn.localRepository=file:${karaf.base}/${karaf.default.repository} # # Default this to false. It's just weird to use undocumented repos +# "false" means that http://repo1.maven.org/maven2@id=central won't be +# implicitly used as remote repository # org.ops4j.pax.url.mvn.useFallbackRepositories=false -# -# Uncomment if you don't wanna use the proxy settings -# from the Maven conf/settings.xml file -# -org.ops4j.pax.url.mvn.proxySupport=false - # # Comma separated list of repositories scanned when resolving an artifact. +# list of repositories searched in the first place, should contain +# ${runtime.home}/${karaf.default.repository}. +# if "org.ops4j.pax.url.mvn.localRepository" is defined and it's not +# ~/.m2/repository, it's recommended (at least for dev purposes) to add +# ~/.m2/repository to defaultRepositories +# each of these repositories is checked by aether as "local repository". if +# artifact isn't found, "repositories" are searched next +# # Those repositories will be checked before iterating through the # below list of repositories and even before the local repository # A repository url can be appended with zero or more of the following flags: -# @snapshots : the repository contains snapshots +# @snapshots : the repository contains snaphots # @noreleases : the repository does not contain any released artifacts # # The following property value will add the system folder as a repo. # org.ops4j.pax.url.mvn.defaultRepositories=\ - file:${karaf.base}/${karaf.default.repository}@id=system.repository@snapshots, \ - file:${karaf.data}/kar@id=kar.repository@multi@snapshots + ${karaf.base.uri}/${karaf.default.repository}@id=system.repository@snapshots, \ + ${karaf.data.uri}/kar@id=kar.repository@multi@snapshots -# Use the default local repo (e.g.~/.m2/repository) as a "remote" repo -#org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote= +# +# if "defaultLocalRepoAsRemote" is set to *any* value, localRepository will be +# added to the list of remote repositories being searched for artifacts +# +#org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote = true # # Comma separated list of repositories scanned when resolving an artifact. +# list of repositories searched after resolution fails for "defaultRepositories" +# These are true remote repositories accessed using maven/aether/wagon +# mechanisms. If any repository contains required artifact, it is then written +# to "localRepository" +# +# if this list is _prepended_ with '+' sign, all repositories from active +# profiles defined in effective settings.xml file will be _appended_ to this +# list +# # A repository url can be appended with zero or more of the following flags: # @snapshots : the repository contains snapshots # @noreleases : the repository does not contain any released artifacts -# @id=repoid : the id for the repository, just like in the settings.xml this is optional but recommended -# -# The default list doesn't contain any snapshot repositories as it can impact artifact resolution. -# During development you may want to add the following repositories containing snapshots: -# https://repository.apache.org/content/groups/snapshots-group@id=apache@snapshots@noreleases -# https://oss.sonatype.org/content/repositories/snapshots@id=sonatype@snapshots@norelease -# https://oss.sonatype.org/content/repositories/ops4j-snapshots@id=ops4j@snapshots@noreleases +# @id=repository.id : the id for the repository, just like in the +# settings.xml this is optional but recommended # # If you want to install additional bundles from central add this entry to the list: # https://repo1.maven.org/maven2@id=central # org.ops4j.pax.url.mvn.repositories= + +# +# Global policies override repository-specific settings (@checksum=..., @update=..., @releasesUpdate=..., ...) +# +#org.ops4j.pax.url.mvn.globalUpdatePolicy = daily +#org.ops4j.pax.url.mvn.globalChecksumPolicy = warn + +# +# socket and connection configuration (pax-url-aether 2.5.0) +# +# default value for connection and read timeouts, when socket.readTimeout and socket.connectionTimeout +# are not specified +org.ops4j.pax.url.mvn.timeout = 5000 +# timeout in ms when establishing http connection during artifact resolution +org.ops4j.pax.url.mvn.socket.connectionTimeout = 5000 +# timeout in ms when reading data after connecting to remote repository +org.ops4j.pax.url.mvn.socket.readTimeout = 30000 +# SO_KEEPALIVE option for sockets, defaults to false +org.ops4j.pax.url.mvn.socket.keepAlive = false +# SO_LINGER option for sockets, defaults to -1 +org.ops4j.pax.url.mvn.socket.linger = -1 +# SO_REUSEADDR option for sockets, defaults to false +org.ops4j.pax.url.mvn.socket.reuseAddress = false +# TCP_NODELAY option for sockets, defaults to true +org.ops4j.pax.url.mvn.socket.tcpNoDelay = true +# Configure buffer size for HTTP connections (output and input buffers), defaults to 8192 bytes +org.ops4j.pax.url.mvn.connection.bufferSize = 8192 +# Number of connection retries after failure is detected in http client. httpclient uses default value "3" +org.ops4j.pax.url.mvn.connection.retryCount = 3 diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/shell.init.script b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/shell.init.script index ea402718c4..a5dfda2f15 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/shell.init.script +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/shell.init.script @@ -13,3 +13,37 @@ help = { *:help $args | more } ; man = { help $args } ; log:list = { log:get ALL } ; service:get = { $.context getService ($.context getServiceReference $args) }; + +env = { shell:set $args } +edit = { shell:nano $args } +more = { shell:less -F $args } + +\#prompt = { "${USER}@${APPLICATION}(${SUBSHELL})> "?}; + +__load_class = { + (($.reader class) classLoader) loadClass $1 +} + +// make sure that we catch exceptions +// as they do occur if the session is headless / non-interactive +jlineReader = $.reader +if { %(jlineReader != null) } { + + # On 256 colors terminal, add a right prompt + max_colors = ($.jline.terminal getNumericCapability max_colors) + if { %(max_colors >= 256) } { + __rprompt_formatter = (((__load_class java.text.SimpleDateFormat) getConstructor (__load_class java.lang.String)) newInstance \'$'\u001B\[90m'\'HH:mm:ss) + __date_class = (__load_class java.util.Date) +// Do not use right prompt by default +// \#rprompt = { $__rprompt_formatter format ($__date_class newInstance) } + } + + setopt group + setopt auto-fresh-line + unsetopt insert-tab + keymap "^[OA" up-line-or-search + keymap "^[[A" up-line-or-search + keymap "^[OB" down-line-or-search + keymap "^[[B" down-line-or-search + +} diff --git a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/system.properties b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/system.properties index 5e60ffa041..b346c57e15 100644 --- a/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/system.properties +++ b/assemblies/nexus-base-template/src/main/resources/overlay/etc/karaf/system.properties @@ -3,6 +3,9 @@ # properties at the very beginning of the Karaf's boot process. # +# Properties file inclusions (as a space separated list of relative paths) +# Included files will override the values specified in this file +${optionals} = custom.system.properties # Log level when the pax-logging service is not available # This level will only be used while the pax-logging service bundle @@ -28,7 +31,9 @@ karaf.default.repository = system # session. This script can be used to create aliases and define # additional commands. # -karaf.shell.init.script = ${karaf.etc}/shell.init.script +# NB: ${karaf.etc} is implicitly added to the path, don't use absolute path here +# +karaf.shell.init.script = shell.init.script,scripts/*.script # # Sets the maximum size of the shell command history. If not set, @@ -36,6 +41,12 @@ karaf.shell.init.script = ${karaf.etc}/shell.init.script # # karaf.shell.history.maxSize = 0 +# +# Sets the maximum size of the local shell command history file. If not set, +# defaults to 10000 entries. +# +# karaf.shell.history.file.maxSize = 10000 + # # Deletes the entire karaf.data directory at every start # @@ -52,7 +63,7 @@ karaf.clean.cache = true karaf.local.user = karaf # -# Roles to use when logging into a local Karaf console. +# Roles to use when for the default user in the local Karaf console. # # The syntax is the following: # [classname:]principal @@ -69,16 +80,12 @@ karaf.local.roles = admin,manager,viewer,systembundles xml.catalog.files = # -# Suppress the bell in the console when hitting backspace too many times -# for example -# -jline.nobell = true - -# -# ServiceMix specs options +# Specs options # org.apache.servicemix.specs.debug = false org.apache.servicemix.specs.timeout = 0 +org.apache.karaf.specs.debug = false +org.apache.karaf.specs.timeout = 0 # # Settings for the OSGi 4.3 Weaving @@ -95,13 +102,50 @@ org.apache.aries.proxy.weaving.disabled = org.objectweb.asm.*,org.slf4j.*,org.ap # karaf.secured.services = (&(osgi.command.scope=*)(osgi.command.function=*)) -karaf.history=${user.home}/.nexus/karaf.history +# +# By default, if there's no ACL policy for a certain karaf command, this command is allowed to access +# without the RBAC. We can change this behavior by enable the following property, which means +# if a karaf command has no corresponding ACL then access it must have one of the karaf.secured.command.compulsory.roles +# +#karaf.secured.command.compulsory.roles=admin + +# +# Security properties +# +# To enable OSGi security, uncomment the properties below, +# install the framework-security feature and restart. +# +#java.security.policy=${karaf.etc}/all.policy +#org.osgi.framework.security=osgi +#org.osgi.framework.trust.repositories=${karaf.etc}/trustStore.ks + +# +# HA/Lock configuration +# +# Karaf uses a lock mechanism to know which instance is the master (HA) +# The lock can be on the filesystem (default) or on a database. +# +# See http://karaf.apache.org/manual/latest/users-guide/failover.html for details. +# +# Even using a single instance, Karaf creates the lock file +# You can specify the location of the lock file using the +# karaf.lock.dir=/path/to/the/directory/containing/the/lock +# +# By default, the slave instances start but are passive. +# If you want to prevent the slave instances startup, you can use +# the karaf.lock.slave.block property (false by default): +# karaf.lock.slave.block=true + +# place user's Karaf history under ~/.nexus +karaf.history=${user.home}/.nexus/karaf41.history +# custom JVM settings java.awt.headless=true networkaddress.cache.ttl=3600 - com.sun.jndi.ldap.connect.pool.protocol=plain ssl +javax.xml.bind.JAXBContext=com.sun.xml.bind.v2.ContextFactory +# load (static) logback.xml as early as possible org.ops4j.pax.logging.StaticLogbackContext=true org.ops4j.pax.logging.StaticLogbackFile=${logback.etc}/logback.xml org.jboss.logging.provider=slf4j @@ -121,4 +165,8 @@ index.cursor.prefetchSize=10000 # orientdb: NEXUS-10402 distributed.shutdownTimeout=20000 +# orientdb: NEXUS-17434 storage.diskCache.diskFreeSpaceLimit=4096 + +# workaround jline3 issue 278 +org.jline.reader.support.parsedline=true diff --git a/assemblies/nexus-boot-feature/pom.xml b/assemblies/nexus-boot-feature/pom.xml index d01e342383..783151c8ae 100644 --- a/assemblies/nexus-boot-feature/pom.xml +++ b/assemblies/nexus-boot-feature/pom.xml @@ -19,7 +19,7 @@ org.sonatype.nexus.assemblies nexus-assemblies - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-boot-feature diff --git a/assemblies/nexus-core-feature/pom.xml b/assemblies/nexus-core-feature/pom.xml index f29e7dc7d1..a1a2663bd2 100644 --- a/assemblies/nexus-core-feature/pom.xml +++ b/assemblies/nexus-core-feature/pom.xml @@ -19,7 +19,7 @@ org.sonatype.nexus.assemblies nexus-assemblies - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-core-feature @@ -226,6 +226,7 @@ org.apache.karaf.tooling karaf-maven-plugin + true true diff --git a/assemblies/nexus-startup-feature/pom.xml b/assemblies/nexus-startup-feature/pom.xml index bffb457acf..58a16273ed 100644 --- a/assemblies/nexus-startup-feature/pom.xml +++ b/assemblies/nexus-startup-feature/pom.xml @@ -19,7 +19,7 @@ org.sonatype.nexus.assemblies nexus-assemblies - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-startup-feature @@ -125,6 +125,11 @@ metrics-jetty9 + + org.apache.felix + org.apache.felix.metatype + + diff --git a/assemblies/pom.xml b/assemblies/pom.xml index c590e5fc85..2f86ffd5b1 100644 --- a/assemblies/pom.xml +++ b/assemblies/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus nexus-parent - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.assemblies @@ -45,7 +45,7 @@ org.sonatype.nexus nexus-components pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -53,7 +53,7 @@ org.sonatype.nexus.plugins nexus-plugins pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import diff --git a/buildsupport/all/pom.xml b/buildsupport/all/pom.xml index 2484e7b926..58ed06540a 100644 --- a/buildsupport/all/pom.xml +++ b/buildsupport/all/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-all @@ -35,7 +35,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-commons pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -43,7 +43,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-db pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -51,7 +51,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-goodies pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -59,7 +59,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-groovy pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -67,7 +67,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-guice pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -75,7 +75,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-httpclient pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -83,7 +83,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-internal pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -91,7 +91,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-jetty pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -99,7 +99,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-jruby pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -107,7 +107,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-logging pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -115,7 +115,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-maven pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -123,7 +123,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-metrics pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -131,7 +131,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-osgi pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -139,7 +139,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-other pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -147,7 +147,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-rest pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -155,7 +155,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-security pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -163,7 +163,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-testing pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -171,7 +171,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-ui pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import diff --git a/buildsupport/commons/pom.xml b/buildsupport/commons/pom.xml index 2c3ee8755c..64cb619a0c 100644 --- a/buildsupport/commons/pom.xml +++ b/buildsupport/commons/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-commons diff --git a/buildsupport/db/pom.xml b/buildsupport/db/pom.xml index e0fa1a8d49..4c1ee5764d 100644 --- a/buildsupport/db/pom.xml +++ b/buildsupport/db/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-db diff --git a/buildsupport/extjs-maven-plugin/pom.xml b/buildsupport/extjs-maven-plugin/pom.xml index 4d588126a1..c02b2a10ec 100644 --- a/buildsupport/extjs-maven-plugin/pom.xml +++ b/buildsupport/extjs-maven-plugin/pom.xml @@ -21,7 +21,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT extjs-maven-plugin @@ -37,7 +37,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-all pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import diff --git a/buildsupport/goodies/pom.xml b/buildsupport/goodies/pom.xml index f25e1ae162..8327b75b99 100644 --- a/buildsupport/goodies/pom.xml +++ b/buildsupport/goodies/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-goodies @@ -28,7 +28,7 @@ pom - 2.3.0 + 2.3.1 diff --git a/buildsupport/groovy/pom.xml b/buildsupport/groovy/pom.xml index dd455af715..f96b2956bb 100644 --- a/buildsupport/groovy/pom.xml +++ b/buildsupport/groovy/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-groovy diff --git a/buildsupport/guice/pom.xml b/buildsupport/guice/pom.xml index de5da7bc5b..d7ea61acfb 100644 --- a/buildsupport/guice/pom.xml +++ b/buildsupport/guice/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-guice diff --git a/buildsupport/httpclient/pom.xml b/buildsupport/httpclient/pom.xml index 43f75c1aec..228ece2da6 100644 --- a/buildsupport/httpclient/pom.xml +++ b/buildsupport/httpclient/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-httpclient diff --git a/buildsupport/internal/pom.xml b/buildsupport/internal/pom.xml index e75ae0b062..f2d04afd5c 100644 --- a/buildsupport/internal/pom.xml +++ b/buildsupport/internal/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-internal diff --git a/buildsupport/jetty/pom.xml b/buildsupport/jetty/pom.xml index 8c95dec321..b8b915b006 100644 --- a/buildsupport/jetty/pom.xml +++ b/buildsupport/jetty/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-jetty diff --git a/buildsupport/jruby/pom.xml b/buildsupport/jruby/pom.xml index 4c66032e9d..39fa756720 100644 --- a/buildsupport/jruby/pom.xml +++ b/buildsupport/jruby/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-jruby diff --git a/buildsupport/logging/pom.xml b/buildsupport/logging/pom.xml index b13eae945b..6213be9978 100644 --- a/buildsupport/logging/pom.xml +++ b/buildsupport/logging/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-logging diff --git a/buildsupport/maven/pom.xml b/buildsupport/maven/pom.xml index 9ae2297fdb..178ddc0be1 100644 --- a/buildsupport/maven/pom.xml +++ b/buildsupport/maven/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-maven diff --git a/buildsupport/metrics/pom.xml b/buildsupport/metrics/pom.xml index 921db83f7d..dd5a108be1 100644 --- a/buildsupport/metrics/pom.xml +++ b/buildsupport/metrics/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-metrics diff --git a/buildsupport/osgi/pom.xml b/buildsupport/osgi/pom.xml index 12a7d160a7..18fc1b382c 100644 --- a/buildsupport/osgi/pom.xml +++ b/buildsupport/osgi/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-osgi @@ -28,7 +28,7 @@ pom - 4.0.9 + 4.2.6 @@ -48,7 +48,19 @@ org.apache.felix org.apache.felix.framework - 5.6.2 + 5.6.12 + + + + org.apache.felix + org.apache.felix.metatype + 1.2.2 + + + net.sf.kxml + kxml2 + + @@ -81,7 +93,7 @@ org.eclipse.equinox org.eclipse.equinox.region - 1.1.0.v20120522-1841 + 1.2.101.v20150831-1342 diff --git a/buildsupport/other/pom.xml b/buildsupport/other/pom.xml index 205ceef73c..2d4879aa9e 100644 --- a/buildsupport/other/pom.xml +++ b/buildsupport/other/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-other diff --git a/buildsupport/pom.xml b/buildsupport/pom.xml index d4973428b0..198216205f 100644 --- a/buildsupport/pom.xml +++ b/buildsupport/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus nexus-parent - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.buildsupport diff --git a/buildsupport/rest/pom.xml b/buildsupport/rest/pom.xml index c1cc26fba0..b4e1709903 100644 --- a/buildsupport/rest/pom.xml +++ b/buildsupport/rest/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-rest @@ -29,6 +29,7 @@ 2.9.2 + 2.2.7 3.1.3.Final 1.5.21 @@ -36,6 +37,24 @@ + + javax.xml.bind + jaxb-api + ${jaxb.version} + + + + com.sun.xml.bind + jaxb-core + ${jaxb.version} + + + + com.sun.xml.bind + jaxb-impl + ${jaxb.version} + + javax.ws.rs javax.ws.rs-api diff --git a/buildsupport/scripts/pom.xml b/buildsupport/scripts/pom.xml index 8d14ea3042..d60b88f0fd 100644 --- a/buildsupport/scripts/pom.xml +++ b/buildsupport/scripts/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-scripts @@ -36,7 +36,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-all pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import diff --git a/buildsupport/security/pom.xml b/buildsupport/security/pom.xml index c0b2adf00a..65206070cc 100644 --- a/buildsupport/security/pom.xml +++ b/buildsupport/security/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-security diff --git a/buildsupport/testing/pom.xml b/buildsupport/testing/pom.xml index 34cfe19dc9..6bf7cde7a9 100644 --- a/buildsupport/testing/pom.xml +++ b/buildsupport/testing/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-testing @@ -28,7 +28,7 @@ pom - 4.9.2 + 4.13.1 @@ -122,7 +122,7 @@ org.ops4j.pax.url pax-url-aether - 2.4.7 + 2.6.1 diff --git a/buildsupport/ui/pom.xml b/buildsupport/ui/pom.xml index 21c86732aa..71595abe3c 100644 --- a/buildsupport/ui/pom.xml +++ b/buildsupport/ui/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-buildsupport-ui diff --git a/components/nexus-audit/pom.xml b/components/nexus-audit/pom.xml index 3227c47cd9..929bab1fdb 100644 --- a/components/nexus-audit/pom.xml +++ b/components/nexus-audit/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus nexus-components - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-audit diff --git a/components/nexus-base/pom.xml b/components/nexus-base/pom.xml index 83220c7257..6606ef0ead 100644 --- a/components/nexus-base/pom.xml +++ b/components/nexus-base/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus nexus-components - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-base diff --git a/components/nexus-base/src/main/java/org/sonatype/nexus/internal/log/LastShutdownTimeServiceImpl.java b/components/nexus-base/src/main/java/org/sonatype/nexus/internal/log/LastShutdownTimeServiceImpl.java index fd25681b17..4697e4e2fe 100644 --- a/components/nexus-base/src/main/java/org/sonatype/nexus/internal/log/LastShutdownTimeServiceImpl.java +++ b/components/nexus-base/src/main/java/org/sonatype/nexus/internal/log/LastShutdownTimeServiceImpl.java @@ -33,6 +33,8 @@ import com.google.common.annotations.VisibleForTesting; import org.apache.commons.io.input.ReversedLinesFileReader; +import static org.sonatype.nexus.common.log.LogManager.DEFAULT_LOGGER; + /** * {@link LastShutdownTimeService} implementation. * @@ -48,7 +50,6 @@ public class LastShutdownTimeServiceImpl private static final String NEXUS_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; private static final String GROUP_NAME = "time"; private static final String START_INDICATOR = "org.sonatype.nexus.pax.logging.NexusLogActivator - start"; - private static final String LOG_FILE_NAME = "nexus.log"; private static final int DEFAULT_LINE_READING_LIMIT = 10_000; private final DateFormat nexusFormat = new SimpleDateFormat(NEXUS_DATE_FORMAT); @@ -77,11 +78,11 @@ public synchronized Optional estimateLastShutdownTime() { } private Optional findBestEstimate(final LogManager logManager) { - File nexusFile = logManager.getLogFile(LOG_FILE_NAME); + File nexusFile = logManager.getLogFileForLogger(DEFAULT_LOGGER).orElse(null); Optional estimatedTime = Optional.empty(); if (nexusFile == null) { - log.warn("Missing {} , so last shutdown time can't be estimated.", LOG_FILE_NAME); + log.warn("Missing log file for {} , so last shutdown time can't be estimated.", DEFAULT_LOGGER); } else if(nexusFile.length() == 0) { log.warn("Empty log file {} , so last shutdown time can't be estimated.", nexusFile); } else { diff --git a/components/nexus-base/src/main/java/org/sonatype/nexus/internal/log/LogbackLogManager.java b/components/nexus-base/src/main/java/org/sonatype/nexus/internal/log/LogbackLogManager.java index abcef42ab7..7236fff51e 100644 --- a/components/nexus-base/src/main/java/org/sonatype/nexus/internal/log/LogbackLogManager.java +++ b/components/nexus-base/src/main/java/org/sonatype/nexus/internal/log/LogbackLogManager.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; import javax.annotation.Nullable; @@ -50,6 +51,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.io.ByteStreams; import com.google.inject.Key; +import org.apache.commons.io.FilenameUtils; import org.eclipse.sisu.BeanEntry; import org.eclipse.sisu.Mediator; import org.eclipse.sisu.inject.BeanLocator; @@ -135,6 +137,28 @@ protected void doStop() throws Exception { loggerContext().stop(); } + @Override + @Guarded(by = STARTED) + public Optional getLogFor(final String loggerName) { + return getLogFor(loggerName, appenders()); + } + + @Override + @Guarded(by = STARTED) + public Optional getLogFileForLogger(final String loggerName) { + return getLogFor(loggerName).map(this::getLogFile); + } + + @VisibleForTesting + static Optional getLogFor(final String loggerName, final Collection> appenders) { + return appenders.stream() + .filter(appender -> loggerName.equals(appender.getName())) + .filter(named -> named instanceof FileAppender) + .map(fileAppender -> ((FileAppender) fileAppender).getFile()) + .map(FilenameUtils::getName) + .findAny(); + } + @Override @Guarded(by = STARTED) public Set getLogFiles() { diff --git a/components/nexus-base/src/main/java/org/sonatype/nexus/internal/security/upgrade/SecurityDatabaseUpgrade_1_1.java b/components/nexus-base/src/main/java/org/sonatype/nexus/internal/security/upgrade/SecurityDatabaseUpgrade_1_1.java index 9695eb16e6..530ef620a9 100644 --- a/components/nexus-base/src/main/java/org/sonatype/nexus/internal/security/upgrade/SecurityDatabaseUpgrade_1_1.java +++ b/components/nexus-base/src/main/java/org/sonatype/nexus/internal/security/upgrade/SecurityDatabaseUpgrade_1_1.java @@ -22,7 +22,7 @@ /** * Empty upgrade step filling in for what is now a private model upgrade. * - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/components/nexus-base/src/test/java/org/sonatype/nexus/internal/log/LastShutdownTimeServiceImplTest.java b/components/nexus-base/src/test/java/org/sonatype/nexus/internal/log/LastShutdownTimeServiceImplTest.java index 936f18e1b5..f71d24f83d 100644 --- a/components/nexus-base/src/test/java/org/sonatype/nexus/internal/log/LastShutdownTimeServiceImplTest.java +++ b/components/nexus-base/src/test/java/org/sonatype/nexus/internal/log/LastShutdownTimeServiceImplTest.java @@ -35,6 +35,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.sonatype.nexus.common.log.LogManager.DEFAULT_LOGGER; public class LastShutdownTimeServiceImplTest extends TestSupport @@ -68,13 +69,14 @@ public void setup() { pattern = Pattern.compile("(? @@ -99,7 +99,7 @@ org.sonatype.nexus.bundles nexus-thirdparty-bundles pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import diff --git a/plugins/nexus-audit-plugin/pom.xml b/plugins/nexus-audit-plugin/pom.xml index 5edd955df4..37b2d854c3 100644 --- a/plugins/nexus-audit-plugin/pom.xml +++ b/plugins/nexus-audit-plugin/pom.xml @@ -21,7 +21,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-audit-plugin diff --git a/plugins/nexus-blobstore-s3/pom.xml b/plugins/nexus-blobstore-s3/pom.xml index b2142dcbe2..a02810f019 100644 --- a/plugins/nexus-blobstore-s3/pom.xml +++ b/plugins/nexus-blobstore-s3/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-blobstore-s3 @@ -62,6 +62,12 @@ nexus-extdirect + + org.sonatype.nexus + nexus-rapture + provided + + org.sonatype.goodies goodies-testsupport @@ -136,6 +142,24 @@ + + org.sonatype.nexus.buildsupport + extjs-maven-plugin + + NX.s3blobstore + + + + org.sonatype.plugins + yuicompressor-maven-plugin + + + plugin-css + none + + + + diff --git a/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/S3BlobStore.java b/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/S3BlobStore.java index a6e31895db..6f9554ee98 100644 --- a/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/S3BlobStore.java +++ b/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/S3BlobStore.java @@ -381,6 +381,7 @@ else if (blobAttributes.isDeleted()) { blobAttributes.setDeleted(true); blobAttributes.setDeletedReason(reason); + blobAttributes.setDeletedDateTime(new DateTime()); blobAttributes.store(); // soft delete is implemented using an S3 lifecycle that sets expiration on objects with DELETED_TAG diff --git a/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/S3BlobStoreDescriptor.java b/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/S3BlobStoreDescriptor.java index 3767f569d1..177b593e1d 100644 --- a/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/S3BlobStoreDescriptor.java +++ b/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/S3BlobStoreDescriptor.java @@ -12,7 +12,7 @@ */ package org.sonatype.nexus.blobstore.s3.internal; -import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Optional; @@ -27,12 +27,7 @@ import org.sonatype.nexus.blobstore.api.BlobStoreConfiguration; import org.sonatype.nexus.blobstore.api.BlobStoreManager; import org.sonatype.nexus.blobstore.quota.BlobStoreQuotaService; -import org.sonatype.nexus.formfields.CheckboxFormField; -import org.sonatype.nexus.formfields.ComboboxFormField; import org.sonatype.nexus.formfields.FormField; -import org.sonatype.nexus.formfields.NumberTextFormField; -import org.sonatype.nexus.formfields.PasswordFormField; -import org.sonatype.nexus.formfields.StringTextFormField; import org.apache.commons.lang.StringUtils; @@ -68,167 +63,17 @@ private interface Messages { @DefaultMessage("S3") String name(); - - @DefaultMessage("Bucket") - String bucketLabel(); - - @DefaultMessage("S3 Bucket Name (must be between 3 and 63 characters long containing only lower-case characters, numbers, periods, and dashes)") - String bucketHelp(); - - @DefaultMessage("Prefix") - String prefixLabel(); - - @DefaultMessage("S3 Path prefix") - String prefixHelp(); - - @DefaultMessage("Access Key ID (Optional)") - String accessKeyIdLabel(); - - @DefaultMessage("The AWS Access Key ID used for authentication when IAM roles are not being used") - String accessKeyIdHelp(); - - @DefaultMessage("Secret Access Key (Optional)") - String secretAccessKeyLabel(); - - @DefaultMessage("The AWS Secret Access Key used for authentication when IAM roles are not being used") - String secretAccessKeyHelp(); - - @DefaultMessage("Session Token (Optional)") - String sessionTokenLabel(); - - @DefaultMessage("An STS Session Token, if required") - String sessionTokenHelp(); - - @DefaultMessage("Assume Role ARN (Optional)") - String assumeRoleLabel(); - - @DefaultMessage("Optional ARN for Role to Assume, if required") - String assumeRoleHelp(); - - @DefaultMessage("Region") - String regionLabel(); - - @DefaultMessage("The AWS Region to use") - String regionHelp(); - - @DefaultMessage("Endpoint URL (Optional)") - String endpointLabel(); - - @DefaultMessage("A custom endpoint URL for third party object stores using the S3 API") - String endpointHelp(); - - @DefaultMessage("Expiration Days") - String expirationLabel(); - - @DefaultMessage("How many days until deleted blobs are finally removed from the S3 bucket (-1 to disable)") - String expirationHelp(); - - @DefaultMessage("Signature Version") - String signerTypeLabel(); - - @DefaultMessage("An API signature version which may be required for third party object stores using the S3 API") - String signerTypeHelp(); - - @DefaultMessage("Configures the client to use path-style access") - String forcePathStyleLabel(); - - @DefaultMessage("Setting this flag will result in path-style access being used for all requests") - String forcePathStyleHelp(); } private static final Messages messages = I18N.create(Messages.class); private final BlobStoreManager blobStoreManager; - private final FormField bucket; - private final FormField prefix; - private final FormField accessKeyId; - private final FormField secretAccessKey; - private final FormField sessionToken; - private final FormField assumeRole; - private final FormField region; - private final FormField endpoint; - private final FormField expiration; - private final FormField signerType; - private final FormField forcePathStyle; - @Inject public S3BlobStoreDescriptor(final BlobStoreQuotaService quotaService, final BlobStoreManager blobStoreManager) { super(quotaService); this.blobStoreManager = checkNotNull(blobStoreManager); - this.bucket = new StringTextFormField( - BUCKET_KEY, - messages.bucketLabel(), - messages.bucketHelp(), - FormField.MANDATORY, - S3BlobStore.BUCKET_REGEX - ); - this.prefix = new StringTextFormField( - BUCKET_PREFIX_KEY, - messages.prefixLabel(), - messages.prefixHelp(), - FormField.OPTIONAL - ); - this.accessKeyId = new StringTextFormField( - ACCESS_KEY_ID_KEY, - messages.accessKeyIdLabel(), - messages.accessKeyIdHelp(), - FormField.OPTIONAL - ); - this.secretAccessKey = new PasswordFormField( - SECRET_ACCESS_KEY_KEY, - messages.secretAccessKeyLabel(), - messages.secretAccessKeyHelp(), - FormField.OPTIONAL - ); - this.assumeRole = new StringTextFormField( - ASSUME_ROLE_KEY, - messages.assumeRoleLabel(), - messages.assumeRoleHelp(), - FormField.OPTIONAL - ); - this.sessionToken = new StringTextFormField( - SESSION_TOKEN_KEY, - messages.sessionTokenLabel(), - messages.sessionTokenHelp(), - FormField.OPTIONAL - ); - this.region = new ComboboxFormField( - REGION_KEY, - messages.regionLabel(), - messages.regionHelp(), - FormField.MANDATORY, - AmazonS3Factory.DEFAULT - ).withStoreApi("s3_S3.regions"); - this.region.getAttributes().put("sortProperty", "order"); - this.endpoint = new StringTextFormField( - ENDPOINT_KEY, - messages.endpointLabel(), - messages.endpointHelp(), - FormField.OPTIONAL - ); - this.expiration = new NumberTextFormField( - EXPIRATION_KEY, - messages.expirationLabel(), - messages.expirationHelp(), - FormField.OPTIONAL) - .withInitialValue(S3BlobStore.DEFAULT_EXPIRATION_IN_DAYS) - .withMinimumValue(-1); - this.signerType = new ComboboxFormField( - SIGNERTYPE_KEY, - messages.signerTypeLabel(), - messages.signerTypeHelp(), - FormField.MANDATORY, - AmazonS3Factory.DEFAULT - ).withStoreApi("s3_S3.signertypes"); - this.signerType.getAttributes().put("sortProperty", "order"); - this.forcePathStyle = new CheckboxFormField( - FORCE_PATH_STYLE_KEY, - messages.forcePathStyleLabel(), - messages.forcePathStyleHelp(), - FormField.MANDATORY - ).withInitialValue(false); } @Override @@ -238,8 +83,12 @@ public String getName() { @Override public List getFormFields() { - return Arrays.asList(bucket, prefix, accessKeyId, secretAccessKey, sessionToken, assumeRole, region, endpoint, - expiration, signerType, forcePathStyle); + return Collections.emptyList(); + } + + @Override + public String customFormName() { + return "nx-blobstore-settings-s3"; } @Override diff --git a/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/UiPluginDescriptorImpl.java b/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/UiPluginDescriptorImpl.java new file mode 100644 index 0000000000..32a6c7f7ad --- /dev/null +++ b/plugins/nexus-blobstore-s3/src/main/java/org/sonatype/nexus/blobstore/s3/internal/UiPluginDescriptorImpl.java @@ -0,0 +1,42 @@ +/* + * Sonatype Nexus (TM) Open Source Version + * Copyright (c) 2008-present Sonatype, Inc. + * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. + * + * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, + * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks + * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the + * Eclipse Foundation. All other trademarks are the property of their respective owners. + */ +package org.sonatype.nexus.blobstore.s3.internal; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import org.sonatype.nexus.rapture.UiPluginDescriptor; +import org.sonatype.nexus.rapture.UiPluginDescriptorSupport; + +import org.eclipse.sisu.Priority; + +/** + * Rapture {@link UiPluginDescriptor} for {@code nexus-blobstore-s3}. + * + * @since 3.17 + */ +@Named +@Singleton +@Priority(Integer.MAX_VALUE) // load early, no scripts to resolve only providing css/fonts +public class UiPluginDescriptorImpl + extends UiPluginDescriptorSupport +{ + @Inject + public UiPluginDescriptorImpl() { + super("nexus-blobstore-s3"); + setHasStyle(false); + setNamespace("NX.s3blobstore"); + setConfigClassName("NX.s3blobstore.app.PluginConfig"); + } +} diff --git a/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/app/PluginConfig.js b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/app/PluginConfig.js new file mode 100644 index 0000000000..b1901359e6 --- /dev/null +++ b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/app/PluginConfig.js @@ -0,0 +1,33 @@ +/* + * Sonatype Nexus (TM) Open Source Version + * Copyright (c) 2008-present Sonatype, Inc. + * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. + * + * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, + * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks + * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the + * Eclipse Foundation. All other trademarks are the property of their respective owners. + */ +/*global Ext, NX*/ + +/** + * S3 blob store plugin configuration + * + * @since 3.17 + */ +Ext.define('NX.s3blobstore.app.PluginConfig', { + '@aggregate_priority': 100, + + requires: [ + 'NX.s3blobstore.app.PluginStrings' + ], + + controllers: [ + { + id: 'NX.s3blobstore.controller.S3Blobstore', + active: true + } + ] +}); diff --git a/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/app/PluginStrings.js b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/app/PluginStrings.js new file mode 100644 index 0000000000..f801eac0a9 --- /dev/null +++ b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/app/PluginStrings.js @@ -0,0 +1,51 @@ +/* + * Sonatype Nexus (TM) Open Source Version + * Copyright (c) 2008-present Sonatype, Inc. + * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. + * + * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, + * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks + * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the + * Eclipse Foundation. All other trademarks are the property of their respective owners. + */ +/*global Ext, NX*/ + +/** + * @since 3.17 + */ +Ext.define('NX.s3blobstore.app.PluginStrings', { + '@aggregate_priority': 90, + + singleton: true, + requires: [ + 'NX.I18n' + ], + + keys: { + S3Blobstore_Region_FieldLabel: 'Region', + S3Blobstore_Region_HelpText: 'The AWS Region to use', + S3Blobstore_Bucket_FieldLabel: 'Bucket', + S3Blobstore_Bucket_HelpText: 'S3 Bucket Name (must be between 3 and 63 characters long containing only lower-case characters, numbers, periods, and dashes)', + S3Blobstore_Prefix_FieldLabel: 'Prefix', + S3Blobstore_Prefix_HelpText: 'S3 Path prefix', + S3Blobstore_Expiration_FieldLabel: 'Expiration Days', + S3Blobstore_Expiration_HelpText: 'How many days until deleted blobs are finally removed from the S3 bucket (-1 to disable)', + S3Blobstore_Authentication_Title: 'Authentication', + S3Blobstore_Authentication_AccessKeyId: 'Access Key ID', + S3Blobstore_Authentication_SecretAccessKey: 'Secret Access Key', + S3Blobstore_Authentication_AssumeRoleArn: 'Assume Role ARN (Optional)', + S3Blobstore_Authentication_SessionToken: 'Session Token ARN (Optional)', + S3Blobstore_AdvancedConnectionSettings_Title: 'Advanced Connection Settings', + S3Blobstore_AdvancedConnectionSettings_EndPointUrl_FieldLabel: 'Endpoint URL', + S3Blobstore_AdvancedConnectionSettings_EndPointUrl_HelpText: 'A custom endpoint URL for third party object stores using the S3 API', + S3Blobstore_AdvancedConnectionSettings_SignatureVersion_FieldLabel: 'Signature Version', + S3Blobstore_AdvancedConnectionSettings_SignatureVersion_HelpText: 'An API signature version which may be required for third party object stores using the S3 API', + S3Blobstore_AdvancedConnectionSettings_PathStyleAccess_FieldLabel: 'Use path-style access', + S3Blobstore_AdvancedConnectionSettings_PathStyleAccess_HelpText: 'Setting this flag will result in path-style access being used for all requests' + } + +}, function(obj) { + NX.I18n.register(obj); +}); diff --git a/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/controller/S3Blobstore.js b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/controller/S3Blobstore.js new file mode 100644 index 0000000000..bd8c450034 --- /dev/null +++ b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/controller/S3Blobstore.js @@ -0,0 +1,32 @@ +/* + * Sonatype Nexus (TM) Open Source Version + * Copyright (c) 2008-present Sonatype, Inc. + * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. + * + * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, + * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks + * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the + * Eclipse Foundation. All other trademarks are the property of their respective owners. + */ +/*global Ext, NX*/ + +/** + * @since 3.17 + */ +Ext.define('NX.s3blobstore.controller.S3Blobstore', { + extend: 'NX.wizard.Controller', + + stores: [ + 'NX.s3blobstore.store.S3Region', + 'NX.s3blobstore.store.S3SignerType' + ], + models: [ + 'NX.s3blobstore.model.S3Region', + 'NX.s3blobstore.model.S3SignerType' + ], + views: [ + 'NX.s3blobstore.view.BlobstoreSettings' + ] +}); diff --git a/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/model/S3Region.js b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/model/S3Region.js new file mode 100644 index 0000000000..e1473f55f0 --- /dev/null +++ b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/model/S3Region.js @@ -0,0 +1,27 @@ +/* + * Sonatype Nexus (TM) Open Source Version + * Copyright (c) 2008-present Sonatype, Inc. + * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. + * + * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, + * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks + * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the + * Eclipse Foundation. All other trademarks are the property of their respective owners. + */ +/*global Ext, NX*/ + +/** + * S3Region model. + * + * @since 3.17 + */ +Ext.define('NX.s3blobstore.model.S3Region', { + extend: 'Ext.data.Model', + fields: [ + {name: 'id', type: 'string', sortType: 'asUCText'}, + {name: 'name', type: 'string', sortType: 'asUCText'}, + {name: 'order', sortType: 'asInt'} + ] +}); diff --git a/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/model/S3SignerType.js b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/model/S3SignerType.js new file mode 100644 index 0000000000..5b391a16aa --- /dev/null +++ b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/model/S3SignerType.js @@ -0,0 +1,27 @@ +/* + * Sonatype Nexus (TM) Open Source Version + * Copyright (c) 2008-present Sonatype, Inc. + * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. + * + * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, + * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks + * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the + * Eclipse Foundation. All other trademarks are the property of their respective owners. + */ +/*global Ext, NX*/ + +/** + * S3SignerType model. + * + * @since 3.17 + */ +Ext.define('NX.s3blobstore.model.S3SignerType', { + extend: 'Ext.data.Model', + fields: [ + {name: 'id', type: 'string', sortType: 'asUCText'}, + {name: 'name', type: 'string', sortType: 'asUCText'}, + {name: 'order', sortType: 'asInt'} + ] +}); diff --git a/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/store/S3Region.js b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/store/S3Region.js new file mode 100644 index 0000000000..233330cd52 --- /dev/null +++ b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/store/S3Region.js @@ -0,0 +1,44 @@ +/* + * Sonatype Nexus (TM) Open Source Version + * Copyright (c) 2008-present Sonatype, Inc. + * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. + * + * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, + * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks + * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the + * Eclipse Foundation. All other trademarks are the property of their respective owners. + */ +/*global Ext, NX*/ + +/** + * S3 Region store. + * + * @since 3.17 + */ +Ext.define('NX.s3blobstore.store.S3Region', { + extend: 'Ext.data.Store', + model: 'NX.s3blobstore.model.S3Region', + + proxy: { + type: 'direct', + paramsAsHash: false, + + api: { + read: 'NX.direct.s3_S3.regions' + }, + + reader: { + type: 'json', + rootProperty: 'data', + successProperty: 'success' + } + }, + + sorters: [ + { property: 'order', direction: 'ASC' }, + { property: 'name', direction: 'ASC' } + ] + +}); diff --git a/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/store/S3SignerType.js b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/store/S3SignerType.js new file mode 100644 index 0000000000..d55f8825d0 --- /dev/null +++ b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/store/S3SignerType.js @@ -0,0 +1,44 @@ +/* + * Sonatype Nexus (TM) Open Source Version + * Copyright (c) 2008-present Sonatype, Inc. + * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. + * + * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, + * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks + * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the + * Eclipse Foundation. All other trademarks are the property of their respective owners. + */ +/*global Ext, NX*/ + +/** + * S3 Signer Type store. + * + * @since 3.17 + */ +Ext.define('NX.s3blobstore.store.S3SignerType', { + extend: 'Ext.data.Store', + model: 'NX.s3blobstore.model.S3SignerType', + + proxy: { + type: 'direct', + paramsAsHash: false, + + api: { + read: 'NX.direct.s3_S3.signertypes' + }, + + reader: { + type: 'json', + rootProperty: 'data', + successProperty: 'success' + } + }, + + sorters: [ + { property: 'order', direction: 'ASC' }, + { property: 'name', direction: 'ASC' } + ] + +}); diff --git a/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/view/BlobstoreSettings.js b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/view/BlobstoreSettings.js new file mode 100644 index 0000000000..14d400df5b --- /dev/null +++ b/plugins/nexus-blobstore-s3/src/main/resources/static/rapture/NX/s3blobstore/view/BlobstoreSettings.js @@ -0,0 +1,181 @@ +/* + * Sonatype Nexus (TM) Open Source Version + * Copyright (c) 2008-present Sonatype, Inc. + * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. + * + * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, + * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks + * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the + * Eclipse Foundation. All other trademarks are the property of their respective owners. + */ +/*global Ext, NX*/ + +/** + * S3 Blobstore custom "Settings" panel. + * + * @since 3.17 + */ +Ext.define('NX.s3blobstore.view.BlobstoreSettings', { + extend: 'NX.view.SettingsPanel', + alias: 'widget.nx-blobstore-settings-s3', + requires: [ + 'Ext.data.Store', + 'NX.I18n' + ], + + settingsForm: [ + { + xtype: 'combo', + name: 'property_region', + fieldLabel: NX.I18n.get('S3Blobstore_Region_FieldLabel'), + helpText: NX.I18n.get('S3Blobstore_Region_HelpText'), + itemCls: 'required-field', + displayField: 'name', + valueField: 'id', + editable: false, + forceSelection: true, + queryMode: 'local', + triggerAction: 'all', + emptyText: 'Select...', + selectOnFocus: false, + allowBlank: false, + listeners: { + added: function() { + var me = this; + me.getStore().load(); + }, + afterrender: function() { + var me = this; + if (!me.getValue()) { + me.setValue('DEFAULT'); + } + } + }, + store: 'NX.s3blobstore.store.S3Region' + }, + { + xtype:'textfield', + name: 'property_bucket', + fieldLabel: NX.I18n.get('S3Blobstore_Bucket_FieldLabel'), + helpText: NX.I18n.get('S3Blobstore_Bucket_HelpText'), + allowBlank: false + }, + { + xtype:'textfield', + name: 'property_prefix', + fieldLabel: NX.I18n.get('S3Blobstore_Prefix_FieldLabel'), + helpText: NX.I18n.get('S3Blobstore_Prefix_HelpText'), + allowBlank: true + }, + { + xtype:'numberfield', + name: 'property_expiration', + fieldLabel: NX.I18n.get('S3Blobstore_Expiration_FieldLabel'), + helpText: NX.I18n.get('S3Blobstore_Expiration_HelpText'), + value: Number('3'), + minValue: Number('-1'), + allowBlank: false + }, + { + xtype: 'nx-optionalfieldset', + title: NX.I18n.get('S3Blobstore_Authentication_Title'), + checkboxToggle: true, + checkboxName: 'authEnabled', + collapsed: true, + items: [ + { + xtype:'textfield', + name: 'property_accessKeyId', + fieldLabel: NX.I18n.get('S3Blobstore_Authentication_AccessKeyId'), + allowBlank: false + }, + { + xtype: 'textfield', + inputType: 'password', + name: 'property_secretAccessKey', + fieldLabel: NX.I18n.get('S3Blobstore_Authentication_SecretAccessKey'), + allowBlank: false + }, + { + xtype: 'textfield', + name: 'property_assumeRole', + fieldLabel: NX.I18n.get('S3Blobstore_Authentication_AssumeRoleArn'), + allowBlank: true + }, + { + xtype: 'textfield', + name: 'property_sessionToken', + fieldLabel: NX.I18n.get('S3Blobstore_Authentication_SessionToken'), + allowBlank: true + } + ] + }, + { + xtype: 'nx-optionalfieldset', + title: NX.I18n.get('S3Blobstore_AdvancedConnectionSettings_Title'), + checkboxToggle: true, + checkboxName: 'advancedConnectionSettingsEnabled', + collapsed: true, + listeners: { + expand: function() { + var me = this; + var signerType = me.down('[name=property_signertype]'); + if (!signerType.getValue()) { + signerType.setValue('DEFAULT'); + } + } + }, + items: [ + { + xtype:'textfield', + name: 'property_endpoint', + fieldLabel: NX.I18n.get('S3Blobstore_AdvancedConnectionSettings_EndPointUrl_FieldLabel'), + helpText: NX.I18n.get('S3Blobstore_AdvancedConnectionSettings_EndPointUrl_HelpText'), + allowBlank: true + }, + { + xtype: 'combo', + name: 'property_signertype', + fieldLabel: NX.I18n.get('S3Blobstore_AdvancedConnectionSettings_SignatureVersion_FieldLabel'), + helpText: NX.I18n.get('S3Blobstore_AdvancedConnectionSettings_SignatureVersion_HelpText'), + itemCls: 'required-field', + displayField: 'name', + valueField: 'id', + editable: false, + forceSelection: true, + queryMode: 'local', + triggerAction: 'all', + emptyText: 'Select...', + selectOnFocus: false, + allowBlank: true, + listeners: { + added: function() { + var me = this; + me.getStore().load(); + } + }, + store: 'NX.s3blobstore.store.S3SignerType' + }, + { + xtype: 'checkbox', + name: 'property_forcepathstyle', + fieldLabel: NX.I18n.get('S3Blobstore_AdvancedConnectionSettings_PathStyleAccess_FieldLabel'), + helpText: NX.I18n.get('S3Blobstore_AdvancedConnectionSettings_PathStyleAccess_HelpText') + } + ] + } + ], + + exportProperties: function(values) { + var properties = {}; + Ext.Object.each(values, function(key, value) { + if (key.startsWith('property_')) { + properties[key.replace('property_', '')] = String(value); + } + }); + return properties; + } + +}); diff --git a/plugins/nexus-blobstore-tasks/pom.xml b/plugins/nexus-blobstore-tasks/pom.xml index fb5c8f8404..0214f74083 100644 --- a/plugins/nexus-blobstore-tasks/pom.xml +++ b/plugins/nexus-blobstore-tasks/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-blobstore-tasks diff --git a/plugins/nexus-coreui-plugin/pom.xml b/plugins/nexus-coreui-plugin/pom.xml index 204a3038b7..acbdd7ff4b 100644 --- a/plugins/nexus-coreui-plugin/pom.xml +++ b/plugins/nexus-coreui-plugin/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-coreui-plugin diff --git a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreComponent.groovy b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreComponent.groovy index 1f80c4cd6d..2d7040cb7d 100644 --- a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreComponent.groovy +++ b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreComponent.groovy @@ -142,6 +142,7 @@ class BlobStoreComponent id: key, name: descriptor.name, formFields: descriptor.formFields.collect { FormFieldXO.create(it) }, + customFormName: descriptor.customFormName(), isModifiable: descriptor.isModifiable(), isEnabled: descriptor.isEnabled() ) diff --git a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreTypeXO.groovy b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreTypeXO.groovy index edab072192..ea104783a4 100644 --- a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreTypeXO.groovy +++ b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreTypeXO.groovy @@ -31,6 +31,8 @@ class BlobStoreTypeXO List formFields + String customFormName + boolean isModifiable boolean isEnabled diff --git a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreXO.groovy b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreXO.groovy index de23306dd1..4e60bbe553 100644 --- a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreXO.groovy +++ b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/BlobStoreXO.groovy @@ -14,12 +14,16 @@ package org.sonatype.nexus.coreui import org.sonatype.nexus.validation.group.Create +import groovy.transform.CompileStatic +import groovy.transform.ToString import org.hibernate.validator.constraints.NotEmpty import org.hibernate.validator.constraints.Range /** * @since 3.0 */ +@CompileStatic +@ToString(includePackage = false, includeNames = true) class BlobStoreXO { @NotEmpty diff --git a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/SelectorComponent.groovy b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/SelectorComponent.groovy index b6884e4534..9dbe90e515 100644 --- a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/SelectorComponent.groovy +++ b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/SelectorComponent.groovy @@ -12,15 +12,21 @@ */ package org.sonatype.nexus.coreui +import java.util.stream.Collectors + import javax.inject.Inject import javax.inject.Named import javax.inject.Singleton +import javax.validation.ConstraintViolation +import javax.validation.ConstraintViolationException import javax.validation.Valid import javax.validation.constraints.NotNull import javax.validation.groups.Default import org.sonatype.nexus.common.entity.DetachedEntityId import org.sonatype.nexus.extdirect.DirectComponentSupport +import org.sonatype.nexus.repository.security.RepositoryContentSelectorPrivilegeDescriptor +import org.sonatype.nexus.security.SecuritySystem import org.sonatype.nexus.selector.SelectorConfiguration import org.sonatype.nexus.selector.SelectorFactory import org.sonatype.nexus.selector.SelectorManager @@ -33,6 +39,7 @@ import com.codahale.metrics.annotation.ExceptionMetered import com.codahale.metrics.annotation.Timed import com.softwarementors.extjs.djn.config.annotations.DirectAction import com.softwarementors.extjs.djn.config.annotations.DirectMethod +import org.apache.shiro.SecurityUtils import org.apache.shiro.authz.annotation.RequiresPermissions import org.hibernate.validator.constraints.NotEmpty @@ -57,6 +64,9 @@ class SelectorComponent @Inject SelectorFactory selectorFactory + @Inject + SecuritySystem securitySystem + /** * @return a list of selectors */ @@ -115,7 +125,12 @@ class SelectorComponent @RequiresPermissions('nexus:selectors:delete') @Validate void remove(final @NotEmpty String id) { - selectorManager.delete(selectorManager.read(new DetachedEntityId(id))) + try { + selectorManager.delete(selectorManager.read(new DetachedEntityId(id))) + } catch (IllegalStateException e) { + throw new ConstraintViolationException(e.getMessage(), + Collections.singleton(constraintViolationFactory.createViolation('*', e.getMessage()))) + } } /** @@ -129,13 +144,29 @@ class SelectorComponent return selectorManager.browse().collect { new ReferenceXO(id: it.name, name: it.name) } } - static SelectorXO asSelector(final SelectorConfiguration configuration) { + SelectorXO asSelector(final SelectorConfiguration configuration) { + def privileges = getPrivilegesUsingSelector(configuration) + return new SelectorXO( id: configuration.entityMetadata.id.value, name: configuration.name, type: configuration.type, description: configuration.description, - expression: configuration.attributes['expression'] + expression: configuration.attributes['expression'], + usedBy: canReadPrivileges() ? privileges : [], + usedByCount: privileges.size() ) } + + private List getPrivilegesUsingSelector(final SelectorConfiguration selectorConfiguration) { + securitySystem.listPrivileges().stream() + .filter({ privilege -> RepositoryContentSelectorPrivilegeDescriptor.TYPE == privilege.type }) + .filter({ privilege -> selectorConfiguration.name == privilege.properties[RepositoryContentSelectorPrivilegeDescriptor.P_CONTENT_SELECTOR]}) + .map({ privilege -> privilege.name }) + .collect(Collectors.toList()) + } + + private static boolean canReadPrivileges() { + SecurityUtils.getSubject().isPermitted('nexus:privileges:read') + } } diff --git a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/SelectorXO.groovy b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/SelectorXO.groovy index 602980fca0..0d22e9705d 100644 --- a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/SelectorXO.groovy +++ b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/SelectorXO.groovy @@ -45,4 +45,8 @@ class SelectorXO @NotBlank String expression + + List usedBy + + int usedByCount } diff --git a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/internal/log/LogResource.java b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/internal/log/LogResource.java index c2f8c17505..0a35b97c7b 100644 --- a/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/internal/log/LogResource.java +++ b/plugins/nexus-coreui-plugin/src/main/java/org/sonatype/nexus/coreui/internal/log/LogResource.java @@ -32,7 +32,9 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.net.HttpHeaders.CONTENT_DISPOSITION; +import static java.lang.String.format; import static javax.ws.rs.core.MediaType.TEXT_PLAIN; +import static org.sonatype.nexus.common.log.LogManager.DEFAULT_LOGGER; /** * Log REST resource. @@ -79,12 +81,14 @@ public Response get(@QueryParam("fromByte") final Long fromByte, if (count == null) { count = Long.MAX_VALUE; } - InputStream log = logManager.getLogFileStream("nexus.log", from, count); + String logName = logManager.getLogFor(DEFAULT_LOGGER) + .orElseThrow(() -> new NotFoundException("Failed to determine log file name for " + DEFAULT_LOGGER)); + InputStream log = logManager.getLogFileStream(logName, from, count); if (log == null) { throw new NotFoundException("nexus.log not found"); } return Response.ok(log) - .header(CONTENT_DISPOSITION, "attachment; filename=\"nexus.log\"") + .header(CONTENT_DISPOSITION, format("attachment; filename=\"%s\"", logName)) .build(); } } \ No newline at end of file diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/app/PluginStrings.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/app/PluginStrings.js index 8411c5b43f..87110ea27e 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/app/PluginStrings.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/app/PluginStrings.js @@ -508,6 +508,7 @@ Ext.define('NX.coreui.app.PluginStrings', { Selector_SelectorList_EmptyText: 'No selectors defined', Selector_SelectorList_Filter_EmptyText: 'No selectors matched "$filter"', Selector_SelectorFeature_Delete_Button: 'Delete selector', + Selector_SelectorFeature_Delete_Disabled_Message: 'This selector cannot be deleted because it is in use by {0}', Selectors_Delete_Message: 'Selector deleted: {0}', Selector_SelectorFeature_Settings_Title: 'Settings', Selector_SelectorSettingsForm_Name_FieldLabel: 'Name', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/controller/SearchApt.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/controller/SearchApt.js index 9260e4c8d0..92170ea6e2 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/controller/SearchApt.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/controller/SearchApt.js @@ -15,7 +15,7 @@ /** * Apt repository search contribution. * - * @since 3.next + * @since 3.17 */ Ext.define('NX.coreui.controller.SearchApt', { extend: 'NX.app.Controller', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/controller/Selectors.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/controller/Selectors.js index 789d29dc70..feda25040e 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/controller/Selectors.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/controller/Selectors.js @@ -157,6 +157,69 @@ Ext.define('NX.coreui.controller.Selectors', { } }, + /** + * @protected + * Enable 'Delete' when user has 'delete' permission for selected content selector. + */ + bindDeleteButton: function(button) { + var me = this; + + button.mon( + NX.Conditions.and( + NX.Conditions.isPermitted(this.permission + ':delete'), + NX.Conditions.watchEvents([ + { observable: me.getStore('Selector'), events: ['load']}, + { observable: Ext.History, events: ['change']} + ], me.watchEventsHandler()) + ), + { + satisfied: function () { + button.enable(); + }, + unsatisfied: function () { + button.disable(); + } + } + ); + }, + + /** + * @private + */ + watchEventsHandler: function() { + var me = this, + store = me.getStore('Selector'); + + return function() { + var entityId = me.getModelIdFromBookmark(), + model = entityId ? store.findRecord('id', entityId, 0, false, true, true) : undefined, + usedBy = model && model.get('usedBy'), + usedByCount = model && model.get('usedByCount'), + message; + + me.clearInfo(); + + if (usedByCount) { + message = NX.I18n.format('Selector_SelectorFeature_Delete_Disabled_Message', + Ext.util.Format.plural(usedByCount, 'privilege')); + if (Array.isArray(usedBy) && usedBy.length) { + message = message + ': ' + usedBy.map(me.getLinkToPrivilege).join(', '); + } + me.showInfo(message); + return false; + } + + return !!model; + }; + }, + + /** + * @private + */ + getLinkToPrivilege: function (privilege) { + return '' + privilege + ''; + }, + recordLoaded: function(formPanel, record) { var me = this; @@ -197,6 +260,9 @@ Ext.define('NX.coreui.controller.Selectors', { text: NX.I18n.format('Selectors_Delete_Message', description), type: 'success' }); } + else if (Ext.isObject(response) && Ext.isDefined(response.errors)) { + NX.Messages.error(response.errors['*']); + } }); }, diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/BlobstoreType.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/BlobstoreType.js index cdee45ecff..fb0e4a99a5 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/BlobstoreType.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/BlobstoreType.js @@ -23,6 +23,7 @@ Ext.define('NX.coreui.model.BlobstoreType', { {name: 'id', type: 'string', sortType: 'asUCText'}, {name: 'name', type: 'string', sortType: 'asUCText'}, {name: 'formFields', type: 'auto' /*object*/}, + {name: 'customFormName', type: 'string', sortType: 'asUCText'}, {name: 'isModifiable', type: 'boolean'}, {name: 'isEnabled', type: 'boolean'} ] diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/RoutingRulePreview.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/RoutingRulePreview.js index ddc9194d3a..efa9a6c70b 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/RoutingRulePreview.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/RoutingRulePreview.js @@ -15,7 +15,7 @@ /** * Routing Rule Preview tree model. * - * @since 3.next + * @since 3.17 */ Ext.define('NX.coreui.model.RoutingRulePreview', { extend: 'Ext.data.TreeModel', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/Selector.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/Selector.js index 7b68fbbbaa..9e829defc6 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/Selector.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/model/Selector.js @@ -27,6 +27,8 @@ Ext.define('NX.coreui.model.Selector', { {name: 'name', type: 'string', sortType: 'asUCText'}, {name: 'type', type: 'string', sortType: 'asUCText', defaultValue: 'csel'}, {name: 'description', type: 'string', sortType: 'asUCText', convert: Ext.htmlEncode}, - {name: 'expression', type: 'string', sortType: 'asUCText'} + {name: 'expression', type: 'string', sortType: 'asUCText'}, + {name: 'usedBy', type: 'auto' /* array */}, + {name: 'usedByCount', type: 'int' } ] }); diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/store/RoutingRulePreview.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/store/RoutingRulePreview.js index 3a1212c18d..7242d50a92 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/store/RoutingRulePreview.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/store/RoutingRulePreview.js @@ -15,7 +15,7 @@ /** * Routing Rule Preview grid store. * - * @since 3.next + * @since 3.17 */ Ext.define('NX.coreui.store.RoutingRulePreview', { extend: 'Ext.data.TreeStore', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/blobstore/BlobstoreSettingsForm.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/blobstore/BlobstoreSettingsForm.js index 27d0289aba..61c90c19a8 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/blobstore/BlobstoreSettingsForm.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/blobstore/BlobstoreSettingsForm.js @@ -66,6 +66,15 @@ Ext.define('NX.coreui.view.blobstore.BlobstoreSettingsForm', { } var blobstoreTypeModel = NX.getApplication().getStore('BlobstoreType').getById(value); settingsFieldSet.importProperties(null, blobstoreTypeModel.get('formFields'), me.editableCondition); + + me.remove('blobstore-custom-form'); + var customFormName = blobstoreTypeModel.get('customFormName'); + if (customFormName) { + me.add({ + id: 'blobstore-custom-form', + xtype: customFormName + }); + } } }, { @@ -128,6 +137,10 @@ Ext.define('NX.coreui.view.blobstore.BlobstoreSettingsForm', { var type = values['type'].toLowerCase(); values.attributes = {}; values.attributes[type] = me.down('nx-coreui-formfield-settingsfieldset').exportProperties(values); + var customForm = me.down('#blobstore-custom-form'); + if (customForm) { + Ext.Object.merge(values.attributes[type], customForm.exportProperties(values)); + } return values; }, setValues: function(values) { @@ -205,7 +218,7 @@ Ext.define('NX.coreui.view.blobstore.BlobstoreSettingsForm', { if (me.items != null) { //then grab all of the dynamically generated fields and make them non-editable var itemsToDisable = me.getChildItemsToDisable().filter(function(item) { - return item.ownerCt.xtype === 'nx-coreui-formfield-settingsfieldset'; + return item.ownerCt.xtype === 'nx-coreui-formfield-settingsfieldset' || item.ownerCt.id === 'blobstore-custom-form'; }); me.setItemsEditable(false, itemsToDisable); diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptFacet.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptFacet.js index 285d947a19..4bd749178a 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptFacet.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptFacet.js @@ -13,7 +13,7 @@ /** * Configuration specific to apt repositories. * - * @since 3.next + * @since 3.17 */ Ext.define('NX.coreui.view.repository.facet.AptFacet', { extend: 'Ext.form.FieldContainer', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptHostedFacet.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptHostedFacet.js index 6f8f2dc303..4ecba86281 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptHostedFacet.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptHostedFacet.js @@ -13,7 +13,7 @@ /** * Configuration specific to apt repositories. * - * @since 3.next + * @since 3.17 */ Ext.define('NX.coreui.view.repository.facet.AptHostedFacet', { extend: 'Ext.form.FieldContainer', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptSigningFacet.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptSigningFacet.js index c0469d1692..d9774351e3 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptSigningFacet.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/facet/AptSigningFacet.js @@ -13,7 +13,7 @@ /** * Configuration specific to apt repositories. * - * @since 3.next + * @since 3.17 */ Ext.define('NX.coreui.view.repository.facet.AptSigningFacet', { extend: 'Ext.form.FieldContainer', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/AptHosted.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/AptHosted.js index f20d7688df..bd506f78fb 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/AptHosted.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/AptHosted.js @@ -13,7 +13,7 @@ /** * Repository settings form for an apt repository * - * @since 3.next + * @since 3.17 */ Ext.define('NX.coreui.view.repository.recipe.AptHosted', { extend: 'NX.coreui.view.repository.RepositorySettingsForm', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/AptProxy.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/AptProxy.js index de8f91b2bd..bae5a256ec 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/AptProxy.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/AptProxy.js @@ -13,7 +13,7 @@ /** * Repository settings form for an apt repository * - * @since 3.next + * @since 3.17 */ Ext.define('NX.coreui.view.repository.recipe.AptProxy', { extend: 'NX.coreui.view.repository.RepositorySettingsForm', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangGroup.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangGroup.js index cff0e225a1..a33292f6e7 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangGroup.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangGroup.js @@ -15,7 +15,7 @@ /** * Repository "Settings" form for a Go Group repository. * - * @since 3.next + * @since 3.17 */ Ext.define('NX.golang.view.repository.recipe.GolangGroup', { extend: 'NX.coreui.view.repository.RepositorySettingsForm', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangHosted.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangHosted.js index a5c17354b5..60f0285277 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangHosted.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangHosted.js @@ -15,7 +15,7 @@ /** * Repository "Settings" form for a Go Hosted repository. * - * @since 3.next + * @since 3.17 */ Ext.define('NX.golang.view.repository.recipe.GolangHosted', { extend: 'NX.coreui.view.repository.RepositorySettingsForm', diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangProxy.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangProxy.js index 31ea2cd238..e93c5c8a1d 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangProxy.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/repository/recipe/GolangProxy.js @@ -15,13 +15,14 @@ /** * Repository "Settings" form for a Go Proxy repository * - * @since 3.next + * @since 3.17 */ Ext.define('NX.golang.view.repository.recipe.GolangProxy', { extend: 'NX.coreui.view.repository.RepositorySettingsForm', alias: 'widget.nx-coreui-repository-go-proxy', requires: [ 'NX.coreui.view.repository.facet.ProxyFacet', + 'NX.coreui.view.repository.facet.RoutingRuleFacet', 'NX.coreui.view.repository.facet.StorageFacet', 'NX.coreui.view.repository.facet.HttpClientFacet', 'NX.coreui.view.repository.facet.NegativeCacheFacet', @@ -36,6 +37,7 @@ Ext.define('NX.golang.view.repository.recipe.GolangProxy', { me.items = [ {xtype: 'nx-coreui-repository-proxy-facet'}, + {xtype: 'nx-coreui-repository-routing-rule-facet'}, {xtype: 'nx-coreui-repository-storage-facet'}, {xtype: 'nx-coreui-repository-negativecache-facet'}, {xtype: 'nx-coreui-repository-cleanup-policy-facet'}, diff --git a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/routing/RoutingRulesPreview.js b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/routing/RoutingRulesPreview.js index 947f1ff888..d232583aa8 100644 --- a/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/routing/RoutingRulesPreview.js +++ b/plugins/nexus-coreui-plugin/src/main/resources/static/rapture/NX/coreui/view/routing/RoutingRulesPreview.js @@ -15,7 +15,7 @@ /** * Global Routing Rule Preview window. * - * @since 3.next + * @since 3.17 */ Ext.define('NX.coreui.view.routing.RoutingRulesPreview', { extend: 'Ext.panel.Panel', diff --git a/plugins/nexus-coreui-plugin/src/test/java/org/sonatype/nexus/coreui/SelectorComponentTest.java b/plugins/nexus-coreui-plugin/src/test/java/org/sonatype/nexus/coreui/SelectorComponentTest.java index 52dd4e294c..5934849185 100644 --- a/plugins/nexus-coreui-plugin/src/test/java/org/sonatype/nexus/coreui/SelectorComponentTest.java +++ b/plugins/nexus-coreui-plugin/src/test/java/org/sonatype/nexus/coreui/SelectorComponentTest.java @@ -18,19 +18,25 @@ import javax.validation.Path; import org.sonatype.goodies.testsupport.inject.InjectedTestSupport; +import org.sonatype.nexus.security.SecuritySystem; import org.sonatype.nexus.selector.CselSelector; +import org.sonatype.nexus.selector.SelectorConfiguration; import org.sonatype.nexus.selector.SelectorManager; import org.sonatype.nexus.validation.ConstraintViolationFactory; import com.google.inject.Binder; import org.eclipse.sisu.space.BeanScanning; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.junit.Assert.fail; +import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -40,17 +46,24 @@ public class SelectorComponentTest extends InjectedTestSupport { + @Rule + public ExpectedException expectedException = ExpectedException.none(); + @Inject private SelectorComponent component; private Path path = mock(Path.class); + private SelectorManager mockSelectorManager = mock(SelectorManager.class); + @Override public void configure(final Binder binder) { ConstraintViolationFactory constraintViolationFactory = mock(ConstraintViolationFactory.class); ConstraintViolation constraintViolation = mock(ConstraintViolation.class); + SecuritySystem securitySystem = mock(SecuritySystem.class); binder.bind(ConstraintViolationFactory.class).toInstance(constraintViolationFactory); - binder.bind(SelectorManager.class).toInstance(mock(SelectorManager.class)); + binder.bind(SelectorManager.class).toInstance(mockSelectorManager); + binder.bind(SecuritySystem.class).toInstance(securitySystem); when(constraintViolationFactory.createViolation(eq("expression"), anyString())).thenReturn(constraintViolation); when(constraintViolation.getPropertyPath()).thenReturn(path); } @@ -123,4 +136,15 @@ public void testUpdateCsel_invalidExpression() { assertThat(e.getConstraintViolations().iterator().next().getPropertyPath(), is(path)); } } + + @Test + public void testDelete_blobStoreInUse() { + when(mockSelectorManager.read(any())).thenReturn(mock(SelectorConfiguration.class)); + doThrow(new IllegalStateException("a message")).when(mockSelectorManager).delete(any()); + + expectedException.expect(ConstraintViolationException.class); + expectedException.expectMessage("a message"); + + component.remove("someSelector"); + } } diff --git a/plugins/nexus-onboarding-plugin/pom.xml b/plugins/nexus-onboarding-plugin/pom.xml index 9b455c159f..29cec35fff 100644 --- a/plugins/nexus-onboarding-plugin/pom.xml +++ b/plugins/nexus-onboarding-plugin/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-onboarding-plugin diff --git a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingConfiguration.java b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingConfiguration.java index 33ad55c9d3..8c57ed8233 100644 --- a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingConfiguration.java +++ b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingConfiguration.java @@ -17,7 +17,7 @@ import javax.inject.Singleton; /** - * @since 3.next + * @since 3.17 */ @Singleton public class OnboardingConfiguration diff --git a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingItem.java b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingItem.java index 5665db5072..7f0590e024 100644 --- a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingItem.java +++ b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingItem.java @@ -16,7 +16,7 @@ * An item that needs to be configured in the onboarding process in the UI, before other actions can be taken. * * @see OnboardingManager - * @since 3.next + * @since 3.17 */ public interface OnboardingItem { diff --git a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingManager.java b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingManager.java index 174c7a5405..ffb430ed0c 100644 --- a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingManager.java +++ b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/OnboardingManager.java @@ -17,7 +17,7 @@ /** * Manage the onboarding process, will maintain a list of {@link OnboardingItem}s that need to be acted upon * - * @since 3.next + * @since 3.17 */ public interface OnboardingManager { diff --git a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/ChangeAdminPasswordOnboardingItem.java b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/ChangeAdminPasswordOnboardingItem.java index 0acc215cf2..dd428a951e 100644 --- a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/ChangeAdminPasswordOnboardingItem.java +++ b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/ChangeAdminPasswordOnboardingItem.java @@ -28,7 +28,7 @@ import static com.google.common.base.Preconditions.checkNotNull; /** - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/ConfigureAnonymousAccessItem.java b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/ConfigureAnonymousAccessItem.java index 4950fee1e5..2595700a95 100644 --- a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/ConfigureAnonymousAccessItem.java +++ b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/ConfigureAnonymousAccessItem.java @@ -23,7 +23,7 @@ import static com.google.common.base.Preconditions.checkNotNull; /** - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingManagerImpl.java b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingManagerImpl.java index 82ec958b87..ac3583a2e4 100644 --- a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingManagerImpl.java +++ b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingManagerImpl.java @@ -30,7 +30,7 @@ import static com.google.common.base.Preconditions.checkNotNull; /** - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingResource.java b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingResource.java index 4bf58f6fc0..f08e66a126 100644 --- a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingResource.java +++ b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingResource.java @@ -41,7 +41,7 @@ import static javax.ws.rs.core.MediaType.APPLICATION_JSON; /** - * @since 3.next + * @since 3.17 */ @Singleton @Named diff --git a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingStateContributor.java b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingStateContributor.java index b3ffd76772..2c4b93b557 100644 --- a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingStateContributor.java +++ b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/OnboardingStateContributor.java @@ -28,7 +28,7 @@ import static com.google.common.base.Preconditions.checkNotNull; /** - * @since 3.next + * @since 3.17 */ @Singleton @Named diff --git a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/SecurityDatabaseUpgrade_1_2.java b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/SecurityDatabaseUpgrade_1_2.java index 528dccd4d1..84347f2aa8 100644 --- a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/SecurityDatabaseUpgrade_1_2.java +++ b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/SecurityDatabaseUpgrade_1_2.java @@ -31,7 +31,7 @@ /** * Upgrade step to mark admin user as 'changepassword' so user must change it * - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/UiPluginDescriptorImpl.java b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/UiPluginDescriptorImpl.java index b734212c49..7c2b67797d 100644 --- a/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/UiPluginDescriptorImpl.java +++ b/plugins/nexus-onboarding-plugin/src/main/java/org/sonatype/nexus/onboarding/internal/UiPluginDescriptorImpl.java @@ -24,7 +24,7 @@ /** * Rapture {@link UiPluginDescriptor} for {@code nexus-onboarding-plugin}. * - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/app/PluginConfig.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/app/PluginConfig.js index e9e693f502..24ef01abe5 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/app/PluginConfig.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/app/PluginConfig.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.app.PluginConfig', { '@aggregate_priority': 100, diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/app/PluginStrings.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/app/PluginStrings.js index 0ced730557..b1f31effe4 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/app/PluginStrings.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/app/PluginStrings.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.app.PluginStrings', { '@aggregate_priority': 90, @@ -44,7 +44,11 @@ Ext.define('NX.onboarding.app.PluginStrings', { }, 'NX.onboarding.view.ConfigureAnonymousAccessScreen': { Title: 'Configure Anonymous Access', - Description: '

Configure whether anonymous access is enabled for the server.

' + Description: '

Enabling anonymous access will allow unauthenticated downloads, browsing, and ' + + 'searching of repository content by default. Permissions for unauthenticated users can be changed by ' + + 'editing the roles assigned to the anonymous user.

' + + 'More information

', + Label: 'Enable anonymous access' } } }, function(obj) { diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/controller/Onboarding.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/controller/Onboarding.js index 414cf9d105..33c9691ca5 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/controller/Onboarding.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/controller/Onboarding.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.controller.Onboarding', { extend: 'NX.wizard.Controller', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/model/Onboarding.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/model/Onboarding.js index a50bf50511..b69c2354a5 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/model/Onboarding.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/model/Onboarding.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.model.Onboarding', { extend: 'Ext.data.Model', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/ChangeAdminPasswordStep.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/ChangeAdminPasswordStep.js index c8954af90f..77ee417a0a 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/ChangeAdminPasswordStep.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/ChangeAdminPasswordStep.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.step.ChangeAdminPasswordStep', { extend: 'NX.wizard.Step', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/OnboardingCompleteStep.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/OnboardingCompleteStep.js index 1533f860d5..23f80218b7 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/OnboardingCompleteStep.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/OnboardingCompleteStep.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.step.OnboardingCompleteStep', { extend: 'NX.wizard.Step', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/OnboardingStartStep.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/OnboardingStartStep.js index dc41ad86ec..828f636792 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/OnboardingStartStep.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/OnboardingStartStep.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.step.OnboardingStartStep', { extend: 'NX.wizard.Step', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/store/Onboarding.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/store/Onboarding.js index d30e3da040..12c07485f6 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/store/Onboarding.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/store/Onboarding.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.store.Onboarding', { extend: 'Ext.data.Store', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/ChangeAdminPasswordScreen.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/ChangeAdminPasswordScreen.js index e2c9124613..1817709094 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/ChangeAdminPasswordScreen.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/ChangeAdminPasswordScreen.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.view.ChangeAdminPasswordScreen', { extend: 'NX.wizard.Screen', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/ConfigureAnonymousAccessScreen.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/ConfigureAnonymousAccessScreen.js index bd56055d30..0bd456c0f6 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/ConfigureAnonymousAccessScreen.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/ConfigureAnonymousAccessScreen.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.view.ConfigureAnonymousAccessScreen', { extend: 'NX.wizard.Screen', @@ -47,7 +47,7 @@ Ext.define('NX.onboarding.view.ConfigureAnonymousAccessScreen', { name: 'enabled', itemId: 'anonymousEnabled', value: false, - boxLabel: NX.I18n.get('Security_AnonymousSettings_Allow_BoxLabel') + boxLabel: NX.I18n.render(me, 'Label') } ] }] diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingCompleteScreen.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingCompleteScreen.js index c3550d2c09..2ebd660640 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingCompleteScreen.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingCompleteScreen.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.view.OnboardingCompleteScreen', { extend: 'NX.wizard.Screen', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingModal.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingModal.js index 78c08a1ee8..8ea9434f13 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingModal.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingModal.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.view.OnboardingModal', { extend: 'NX.view.ModalDialog', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingStartScreen.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingStartScreen.js index b8a7e13f03..7d2f44f41d 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingStartScreen.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingStartScreen.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.view.OnboardingStartScreen', { extend: 'NX.wizard.Screen', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingWizard.js b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingWizard.js index b325218745..f6fded70b7 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingWizard.js +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/view/OnboardingWizard.js @@ -13,7 +13,7 @@ /*global Ext, NX*/ /** - * @since 3.next + * @since 3.17 */ Ext.define('NX.onboarding.view.OnboardingWizard', { extend: 'NX.wizard.Panel', diff --git a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/resources/nexus-onboarding-plugin-debug.css b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/resources/nexus-onboarding-plugin-debug.css index 208bd1cd72..ff5216c694 100644 --- a/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/resources/nexus-onboarding-plugin-debug.css +++ b/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/resources/nexus-onboarding-plugin-debug.css @@ -11,6 +11,10 @@ * Eclipse Foundation. All other trademarks are the property of their respective owners. */ +[id^=nx-onboarding-wizard].nx-wizard-panel { + border-top: none !important; +} + [id^=nx-onboarding-wizard].nx-wizard-panel .screenheader { border: 0 !important; padding: 0 !important; diff --git a/plugins/nexus-repository-apt/pom.xml b/plugins/nexus-repository-apt/pom.xml index 46bdf47e44..dfad0cff0d 100644 --- a/plugins/nexus-repository-apt/pom.xml +++ b/plugins/nexus-repository-apt/pom.xml @@ -19,7 +19,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptFacet.java index 2e51ae5f31..20aba0ca10 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptFacet.java @@ -24,7 +24,7 @@ import org.sonatype.nexus.repository.view.Payload; /** - * @since 3.next + * @since 3.17 */ @Facet.Exposed public interface AptFacet diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptRestoreFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptRestoreFacet.java index 730fa59070..da37d94563 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptRestoreFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptRestoreFacet.java @@ -22,7 +22,7 @@ import org.sonatype.nexus.repository.view.Content; /** - * @since 3.next + * @since 3.17 */ @Facet.Exposed public interface AptRestoreFacet extends Facet diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptUploadHandler.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptUploadHandler.java index 49a03643ee..0b0b72a787 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptUploadHandler.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/AptUploadHandler.java @@ -39,7 +39,7 @@ import org.sonatype.nexus.transaction.UnitOfWork; /** - * @since 3.next + * @since 3.17 */ @Singleton @Named(AptFormat.NAME) diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptBrowseNodeGenerator.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptBrowseNodeGenerator.java index 85a6fd6763..1077e25fd2 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptBrowseNodeGenerator.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptBrowseNodeGenerator.java @@ -27,7 +27,7 @@ import static com.google.common.collect.Lists.newArrayList; /** - * @since 3.next + * @since 3.17 */ @Singleton @Named(AptFormat.NAME) diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptComponentDirector.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptComponentDirector.java index cc8912c001..51c5a66bea 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptComponentDirector.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptComponentDirector.java @@ -36,7 +36,7 @@ import static com.google.common.base.Preconditions.checkNotNull; /** - * @since 3.next + * @since 3.17 */ @Named(AptFormat.NAME) @Singleton diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptContentValidator.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptContentValidator.java index 4736554936..cd76d2cc52 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptContentValidator.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptContentValidator.java @@ -35,7 +35,7 @@ * Apt-specific {@link ContentValidator} that "hints" default content validator for apt package metadata and format * specific files * - * @since 3.next + * @since 3.17 */ @Named(AptFormat.NAME) @Singleton diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFacetImpl.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFacetImpl.java index d3f8aa2bb4..8d24bb4a61 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFacetImpl.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFacetImpl.java @@ -52,7 +52,7 @@ import static org.sonatype.nexus.repository.apt.internal.debian.Utils.isDebPackageContentType; /** - * @since 3.next + * @since 3.17 */ @Named public class AptFacetImpl diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFormat.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFormat.java index a192fe58cb..97e0cafdb1 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFormat.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFormat.java @@ -18,7 +18,7 @@ import org.sonatype.nexus.repository.Format; /** - * @since 3.next + * @since 3.17 */ @Named(AptFormat.NAME) @Singleton diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFormatSecurityContributor.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFormatSecurityContributor.java index 2c93b339bc..ec59e9c851 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFormatSecurityContributor.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptFormatSecurityContributor.java @@ -20,7 +20,7 @@ import org.sonatype.nexus.repository.security.RepositoryFormatSecurityContributor; /** - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptMimeTypes.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptMimeTypes.java index f9bd1fada0..51f41e3a36 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptMimeTypes.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptMimeTypes.java @@ -13,7 +13,7 @@ package org.sonatype.nexus.repository.apt.internal; /** - * @since 3.next + * @since 3.17 */ public class AptMimeTypes { diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptPackageParser.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptPackageParser.java index 69b8ec87c6..9255ca2fba 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptPackageParser.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptPackageParser.java @@ -30,7 +30,7 @@ import org.sonatype.nexus.repository.apt.internal.org.apache.commons.compress.archivers.ar.ArArchiveInputStream; /** - * @since 3.next + * @since 3.17 */ public class AptPackageParser { diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptRecipeSupport.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptRecipeSupport.java index 537c99ea70..3c3d4207eb 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptRecipeSupport.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptRecipeSupport.java @@ -16,30 +16,34 @@ import org.sonatype.nexus.repository.Type; import org.sonatype.nexus.repository.RecipeSupport; import org.sonatype.nexus.repository.config.Configuration; - -import static java.lang.Boolean.parseBoolean; -import static java.lang.System.getProperty; +import org.sonatype.nexus.repository.view.handlers.HighAvailabilitySupportChecker; /** * Support for Apt recipes * - * @since 3.next + * @since 3.17 */ public abstract class AptRecipeSupport extends RecipeSupport { + private HighAvailabilitySupportChecker highAvailabilitySupportChecker; + static { Configuration.addSensitiveFieldName("aptSigning"); } - protected AptRecipeSupport(final Type type, + protected AptRecipeSupport(final HighAvailabilitySupportChecker highAvailabilitySupportChecker, + final Type type, final Format format) { super(type, format); + this.highAvailabilitySupportChecker = highAvailabilitySupportChecker; } @Override public boolean isFeatureEnabled() { - return parseBoolean(getProperty("nexus.apt.enabled", "false")); + final boolean formatSupportHighAvailability = + highAvailabilitySupportChecker.isSupported(getFormat().getValue()); + return formatSupportHighAvailability; } } diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptRestoreFacetImpl.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptRestoreFacetImpl.java index ae237d97b7..3428a6c6a4 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptRestoreFacetImpl.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptRestoreFacetImpl.java @@ -40,7 +40,7 @@ import static org.sonatype.nexus.repository.storage.MetadataNodeEntityAdapter.P_NAME; /** - * @since 3.next + * @since 3.17 */ @Named public class AptRestoreFacetImpl diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptSecurityFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptSecurityFacet.java index 64ea8299e6..fef50fcf90 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptSecurityFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptSecurityFacet.java @@ -20,7 +20,7 @@ import org.sonatype.nexus.repository.security.VariableResolverAdapter; /** - * @since 3.next + * @since 3.17 */ @Named public class AptSecurityFacet diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptWritePolicySelector.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptWritePolicySelector.java index a8dec7bf36..872ca9746b 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptWritePolicySelector.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/AptWritePolicySelector.java @@ -17,7 +17,7 @@ import org.sonatype.nexus.repository.storage.WritePolicySelector; /** - * @since 3.next + * @since 3.17 */ public class AptWritePolicySelector implements WritePolicySelector diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/FacetHelper.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/FacetHelper.java index a1b9e9b01b..29d5d16e30 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/FacetHelper.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/FacetHelper.java @@ -34,7 +34,7 @@ import static org.sonatype.nexus.repository.apt.internal.ReleaseName.*; /** - * @since 3.next + * @since 3.17 */ public class FacetHelper { diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/PackageName.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/PackageName.java index 4bc0b69e6a..e0ddb2c5fa 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/PackageName.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/PackageName.java @@ -13,7 +13,7 @@ package org.sonatype.nexus.repository.apt.internal; /** - * @since 3.next + * @since 3.17 */ public class PackageName { diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/ReleaseName.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/ReleaseName.java index cde35ee4e7..8aee5ff426 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/ReleaseName.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/ReleaseName.java @@ -13,7 +13,7 @@ package org.sonatype.nexus.repository.apt.internal; /** - * @since 3.next + * @since 3.17 */ public class ReleaseName { diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/ControlFile.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/ControlFile.java index fb7e6a1bc3..ada2e31340 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/ControlFile.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/ControlFile.java @@ -24,7 +24,7 @@ import java.util.stream.Stream; /** - * @since 3.next + * @since 3.17 */ public class ControlFile { diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/ControlFileParser.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/ControlFileParser.java index 5f4a3d4d18..fbc2e8e22e 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/ControlFileParser.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/ControlFileParser.java @@ -27,7 +27,7 @@ import com.google.common.base.Charsets; /** - * @since 3.next + * @since 3.17 */ public class ControlFileParser { diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/DebianVersion.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/DebianVersion.java index ab178ee770..ec92e469c0 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/DebianVersion.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/DebianVersion.java @@ -22,7 +22,7 @@ * More info about debian version could be found by ref: * * @see https://www.debian.org/doc/ - * @since 3.next + * @since 3.17 */ public class DebianVersion implements Comparable diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/PackageInfo.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/PackageInfo.java index 1bfecd93c3..3aab72279d 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/PackageInfo.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/PackageInfo.java @@ -13,7 +13,7 @@ package org.sonatype.nexus.repository.apt.internal.debian; /** - * @since 3.next + * @since 3.17 */ public class PackageInfo { diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/Release.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/Release.java index c2d6c70889..d55a9cbf7f 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/Release.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/Release.java @@ -17,7 +17,7 @@ import java.util.Optional; /** - * @since 3.next + * @since 3.17 */ public class Release { diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/Utils.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/Utils.java index fca7e65778..5d03a0d925 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/Utils.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/debian/Utils.java @@ -13,7 +13,7 @@ package org.sonatype.nexus.repository.apt.internal.debian; /** - * @since 3.next + * @since 3.17 */ public class Utils { diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/gpg/AptSigningFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/gpg/AptSigningFacet.java index 4544e9194c..131acd997a 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/gpg/AptSigningFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/gpg/AptSigningFacet.java @@ -50,7 +50,7 @@ import org.bouncycastle.openpgp.operator.jcajce.JcePBESecretKeyDecryptorBuilder; /** - * @since 3.next + * @since 3.17 */ @Named @Facet.Exposed diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/gpg/AptSigningHandler.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/gpg/AptSigningHandler.java index 1d72718ebc..c73d33279c 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/gpg/AptSigningHandler.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/gpg/AptSigningHandler.java @@ -26,7 +26,7 @@ import static org.sonatype.nexus.repository.http.HttpMethods.GET; /** - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedComponentMaintenanceFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedComponentMaintenanceFacet.java index d34374de89..15ed1f70ad 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedComponentMaintenanceFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedComponentMaintenanceFacet.java @@ -38,7 +38,7 @@ import static org.sonatype.nexus.repository.storage.AssetEntityAdapter.P_ASSET_KIND; /** - * @since 3.next + * @since 3.17 */ @Named public class AptHostedComponentMaintenanceFacet diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedFacet.java index 704fb62ed1..966e084004 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedFacet.java @@ -70,7 +70,7 @@ import static org.sonatype.nexus.repository.storage.MetadataNodeEntityAdapter.P_NAME; /** - * @since 3.next + * @since 3.17 */ @Named @Facet.Exposed diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedHandler.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedHandler.java index 0c1bd62257..b0ad45724d 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedHandler.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedHandler.java @@ -31,7 +31,7 @@ import static org.sonatype.nexus.repository.http.HttpMethods.POST; /** - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedRecipe.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedRecipe.java index 9dc1bb5129..7331f09345 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedRecipe.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedRecipe.java @@ -42,16 +42,16 @@ import org.sonatype.nexus.repository.view.handlers.ConditionalRequestHandler; import org.sonatype.nexus.repository.view.handlers.ContentHeadersHandler; import org.sonatype.nexus.repository.view.handlers.ExceptionHandler; +import org.sonatype.nexus.repository.view.handlers.FormatHighAvailabilitySupportHandler; +import org.sonatype.nexus.repository.view.handlers.HighAvailabilitySupportChecker; import org.sonatype.nexus.repository.view.handlers.LastDownloadedHandler; import org.sonatype.nexus.repository.view.handlers.TimingHandler; import org.sonatype.nexus.repository.view.matchers.AlwaysMatcher; - - import static org.sonatype.nexus.repository.http.HttpHandlers.notFound; /** - * @since 3.next + * @since 3.17 */ @Named(AptHostedRecipe.NAME) @Singleton @@ -64,6 +64,9 @@ public class AptHostedRecipe @Inject Provider securityFacet; + @Inject + FormatHighAvailabilitySupportHandler highAvailabilitySupportHandler; + @Inject Provider viewFacet; @@ -128,8 +131,11 @@ public class AptHostedRecipe LastDownloadedHandler lastDownloadedHandler; @Inject - public AptHostedRecipe(@Named(HostedType.NAME) final Type type, @Named(AptFormat.NAME) final Format format) { - super(type, format); + public AptHostedRecipe(final HighAvailabilitySupportChecker highAvailabilitySupportChecker, + @Named(HostedType.NAME) final Type type, + @Named(AptFormat.NAME) final Format format) + { + super(highAvailabilitySupportChecker, type, format); } @Override @@ -153,6 +159,7 @@ private ViewFacet configure(final ConfigurableViewFacet facet) { builder.route(new Route.Builder().matcher(new AlwaysMatcher()) .handler(timingHandler) .handler(securityHandler) + .handler(highAvailabilitySupportHandler) .handler(exceptionHandler) .handler(conditionalRequestHandler) .handler(partialFetchHandler) diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedSnapshotFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedSnapshotFacet.java index d934abcc20..965fc080bf 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedSnapshotFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/AptHostedSnapshotFacet.java @@ -25,7 +25,7 @@ import org.sonatype.nexus.repository.view.Content; /** - * @since 3.next + * @since 3.17 */ @Named public class AptHostedSnapshotFacet diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/CompressingTempFileStore.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/CompressingTempFileStore.java index 80c9e3bb5a..d2d27e19d7 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/CompressingTempFileStore.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/hosted/CompressingTempFileStore.java @@ -36,7 +36,7 @@ /** * Stores a set of temp files, automatically compressing each into a GZIP, BZ2 and plain format. * - * @since 3.next + * @since 3.17 */ class CompressingTempFileStore extends ComponentSupport diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxyFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxyFacet.java index f6c8146620..7a4eef4c41 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxyFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxyFacet.java @@ -61,7 +61,7 @@ import static org.sonatype.nexus.repository.apt.internal.debian.Utils.isDebPackageContentType; /** - * @since 3.next + * @since 3.17 */ @Named @Facet.Exposed diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxyRecipe.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxyRecipe.java index 8c288159d4..13a07156f6 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxyRecipe.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxyRecipe.java @@ -44,19 +44,19 @@ import org.sonatype.nexus.repository.view.Route; import org.sonatype.nexus.repository.view.Router; import org.sonatype.nexus.repository.view.ViewFacet; +import org.sonatype.nexus.repository.view.handlers.FormatHighAvailabilitySupportHandler; import org.sonatype.nexus.repository.view.handlers.ConditionalRequestHandler; import org.sonatype.nexus.repository.view.handlers.ContentHeadersHandler; import org.sonatype.nexus.repository.view.handlers.ExceptionHandler; +import org.sonatype.nexus.repository.view.handlers.HighAvailabilitySupportChecker; import org.sonatype.nexus.repository.view.handlers.LastDownloadedHandler; import org.sonatype.nexus.repository.view.handlers.TimingHandler; import org.sonatype.nexus.repository.view.matchers.AlwaysMatcher; - - import static org.sonatype.nexus.repository.http.HttpHandlers.notFound; /** - * @since 3.next + * @since 3.17 */ @Named(AptProxyRecipe.NAME) @Singleton @@ -69,6 +69,9 @@ public class AptProxyRecipe @Inject Provider securityFacet; + @Inject + FormatHighAvailabilitySupportHandler highAvailabilitySupportHandler; + @Inject Provider viewFacet; @@ -142,8 +145,10 @@ public class AptProxyRecipe RoutingRuleHandler routingRuleHandler; @Inject - public AptProxyRecipe(@Named(ProxyType.NAME) final Type type, @Named(AptFormat.NAME) final Format format) { - super(type, format); + public AptProxyRecipe(final HighAvailabilitySupportChecker highAvailabilitySupportChecker, + @Named(ProxyType.NAME) final Type type, @Named(AptFormat.NAME) final Format format) + { + super(highAvailabilitySupportChecker, type, format); } @Override @@ -169,6 +174,7 @@ private ViewFacet configure(final ConfigurableViewFacet facet) { builder.route(new Route.Builder().matcher(new AlwaysMatcher()) .handler(timingHandler) .handler(securityHandler) + .handler(highAvailabilitySupportHandler) .handler(routingRuleHandler) .handler(exceptionHandler) .handler(negativeCacheHandler) diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxySnapshotFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxySnapshotFacet.java index 7a4da6e30e..f79e064c5e 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxySnapshotFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/proxy/AptProxySnapshotFacet.java @@ -23,7 +23,7 @@ import org.sonatype.nexus.repository.apt.internal.snapshot.SnapshotItem.ContentSpecifier; /** - * @since 3.next + * @since 3.17 */ @Named public class AptProxySnapshotFacet diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AllSnapshotComponentSelector.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AllSnapshotComponentSelector.java index fb1cd2b570..346e2a3e37 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AllSnapshotComponentSelector.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AllSnapshotComponentSelector.java @@ -17,7 +17,7 @@ import org.sonatype.nexus.repository.apt.internal.debian.Release; /** - * @since 3.next + * @since 3.17 */ public class AllSnapshotComponentSelector implements SnapshotComponentSelector diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotFacet.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotFacet.java index a9dfdd7795..c04475b782 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotFacet.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotFacet.java @@ -20,7 +20,7 @@ import org.sonatype.nexus.repository.view.Content; /** - * @since 3.next + * @since 3.17 */ @Facet.Exposed public interface AptSnapshotFacet diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotFacetSupport.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotFacetSupport.java index 2ae4752841..8301b9f1c4 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotFacetSupport.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotFacetSupport.java @@ -49,7 +49,7 @@ import static org.sonatype.nexus.repository.storage.Query.builder; /** - * @since 3.next + * @since 3.17 */ public abstract class AptSnapshotFacetSupport extends FacetSupport diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotHandler.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotHandler.java index e001ea44fe..8fce3c5b46 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotHandler.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/AptSnapshotHandler.java @@ -35,7 +35,7 @@ import static org.sonatype.nexus.repository.http.HttpMethods.PUT; /** - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/FilteredSnapshotComponentSelector.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/FilteredSnapshotComponentSelector.java index ea9a4a8000..6f80809d29 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/FilteredSnapshotComponentSelector.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/FilteredSnapshotComponentSelector.java @@ -22,7 +22,7 @@ import org.sonatype.nexus.repository.apt.internal.debian.Release; /** - * @since 3.next + * @since 3.17 */ public class FilteredSnapshotComponentSelector implements SnapshotComponentSelector diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/SnapshotComponentSelector.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/SnapshotComponentSelector.java index 6a70066039..94f9b77679 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/SnapshotComponentSelector.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/SnapshotComponentSelector.java @@ -15,7 +15,7 @@ import java.util.List; /** - * @since 3.next + * @since 3.17 */ import org.sonatype.nexus.repository.apt.internal.debian.Release; diff --git a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/SnapshotItem.java b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/SnapshotItem.java index 05f47f8198..8268c8afbf 100644 --- a/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/SnapshotItem.java +++ b/plugins/nexus-repository-apt/src/main/java/org/sonatype/nexus/repository/apt/internal/snapshot/SnapshotItem.java @@ -21,7 +21,7 @@ import static org.sonatype.nexus.repository.apt.internal.AptMimeTypes.XZ; /** - * @since 3.next + * @since 3.17 */ public class SnapshotItem { diff --git a/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptBrowseNodeGeneratorTest.java b/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptBrowseNodeGeneratorTest.java index 9aa6b32bdd..dfbb3b1a12 100644 --- a/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptBrowseNodeGeneratorTest.java +++ b/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptBrowseNodeGeneratorTest.java @@ -26,7 +26,7 @@ import static org.mockito.Mockito.when; /** - * @since 3.next + * @since 3.17 */ public class AptBrowseNodeGeneratorTest extends TestSupport diff --git a/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptComponentDirectorTest.java b/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptComponentDirectorTest.java index 052fe6ef8b..d82d3b3dae 100644 --- a/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptComponentDirectorTest.java +++ b/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptComponentDirectorTest.java @@ -37,7 +37,7 @@ import static org.mockito.Mockito.when; /** - * @since 3.next + * @since 3.17 */ public class AptComponentDirectorTest extends TestSupport diff --git a/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptRecipeTest.java b/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptRecipeTest.java index 36a9a3cad0..208e855dd2 100644 --- a/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptRecipeTest.java +++ b/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/AptRecipeTest.java @@ -13,13 +13,11 @@ package org.sonatype.nexus.repository.apt.internal; import org.sonatype.goodies.testsupport.TestSupport; -import org.sonatype.nexus.common.collect.AttributesMap; +import org.sonatype.nexus.repository.apt.internal.hosted.AptHostedRecipe; import org.sonatype.nexus.repository.apt.internal.proxy.AptProxyRecipe; import org.sonatype.nexus.repository.types.ProxyType; -import org.sonatype.nexus.repository.view.Context; -import org.sonatype.nexus.repository.view.Request; +import org.sonatype.nexus.repository.view.handlers.HighAvailabilitySupportChecker; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -27,46 +25,60 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** - * @since 3.next + * @since 3.17 */ public class AptRecipeTest extends TestSupport { @Mock - private Request request; + AptFormat format; @Mock - private Context context; + HighAvailabilitySupportChecker highAvailabilitySupportChecker; - private AttributesMap attributesMap; + AptHostedRecipe hostedRecipe; - private AptRecipeSupport underTest; + AptProxyRecipe proxyRecipe; + + final String APT_NAME = "apt"; @Before public void setUp() { - underTest = new AptProxyRecipe(new ProxyType(), new AptFormat()); + hostedRecipe = new AptHostedRecipe(highAvailabilitySupportChecker, new ProxyType(), format); + proxyRecipe = new AptProxyRecipe(highAvailabilitySupportChecker, new ProxyType(), format); + when(format.getValue()).thenReturn(APT_NAME); + } - attributesMap = new AttributesMap(); - when(context.getRequest()).thenReturn(request); - when(context.getAttributes()).thenReturn(attributesMap); + @Test + public void enabledByDefault_AptHostedRepository() { + when(highAvailabilitySupportChecker.isSupported(APT_NAME)).thenReturn(true); + assertThat(hostedRecipe.isFeatureEnabled(), is(equalTo(true))); + verify(highAvailabilitySupportChecker).isSupported(APT_NAME); } - @After - public void tearDown() { - System.getProperties().remove("nexus.apt.enabled"); + @Test + public void disabledIfNexusIsClusteredAndAptNotCluster_AptHostedRepository() { + when(highAvailabilitySupportChecker.isSupported(APT_NAME)).thenReturn(false); + assertThat(hostedRecipe.isFeatureEnabled(), is(equalTo(false))); + verify(highAvailabilitySupportChecker).isSupported(APT_NAME); } @Test - public void disabledByDefault() { - assertThat(underTest.isFeatureEnabled(), is(equalTo(false))); + public void enabledByDefault_AptProxyRepository() { + when(highAvailabilitySupportChecker.isSupported(APT_NAME)).thenReturn(true); + assertThat(proxyRecipe.isFeatureEnabled(), is(equalTo(true))); + verify(highAvailabilitySupportChecker).isSupported(APT_NAME); } @Test - public void enableApt() { - System.setProperty("nexus.apt.enabled", "true"); - assertThat(underTest.isFeatureEnabled(), is(equalTo(true))); + public void disabledIfNexusIsClusteredAndAptNotCluster_AptProxyRepository() { + when(highAvailabilitySupportChecker.isSupported(APT_NAME)).thenReturn(false); + assertThat(proxyRecipe.isFeatureEnabled(), is(equalTo(false))); + verify(highAvailabilitySupportChecker).isSupported(APT_NAME); } + } diff --git a/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/debian/DebianVersionTest.java b/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/debian/DebianVersionTest.java index 2044148aad..69db9ba489 100644 --- a/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/debian/DebianVersionTest.java +++ b/plugins/nexus-repository-apt/src/test/java/org/sonatype/nexus/repository/apt/internal/debian/DebianVersionTest.java @@ -21,7 +21,7 @@ import static org.hamcrest.Matchers.is; /** - * @since 3.next + * @since 3.17 */ public class DebianVersionTest extends TestSupport diff --git a/plugins/nexus-repository-golang/pom.xml b/plugins/nexus-repository-golang/pom.xml index 141595940a..c53901f1f5 100644 --- a/plugins/nexus-repository-golang/pom.xml +++ b/plugins/nexus-repository-golang/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-repository-golang diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/AssetKind.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/AssetKind.java index 7f1f079843..d37a038afa 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/AssetKind.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/AssetKind.java @@ -20,7 +20,7 @@ /** * Asset kinds for go * - * @since 3.next + * @since 3.17 */ public enum AssetKind { diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/GolangFormat.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/GolangFormat.java index 8e4e1bc2f7..926a8a5d9f 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/GolangFormat.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/GolangFormat.java @@ -20,7 +20,7 @@ /** * Go repository format. * - * @since 3.next + * @since 3.17 */ @Named(GolangFormat.NAME) @Singleton diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/GolangContentValidator.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/GolangContentValidator.java index 47da891112..41225b51b4 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/GolangContentValidator.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/GolangContentValidator.java @@ -35,7 +35,7 @@ * Go specific {@link ContentValidator} that validates for some go specific file * extensions and format specific files. * - * @since 3.next + * @since 3.17 */ @Named(GolangFormat.NAME) @Singleton diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/GolangRecipeSupport.groovy b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/GolangRecipeSupport.groovy index edd7134e58..6a48c49333 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/GolangRecipeSupport.groovy +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/GolangRecipeSupport.groovy @@ -38,7 +38,9 @@ import org.sonatype.nexus.repository.view.Matcher import org.sonatype.nexus.repository.view.handlers.ConditionalRequestHandler import org.sonatype.nexus.repository.view.handlers.ContentHeadersHandler import org.sonatype.nexus.repository.view.handlers.ExceptionHandler +import org.sonatype.nexus.repository.view.handlers.FormatHighAvailabilitySupportHandler import org.sonatype.nexus.repository.view.handlers.HandlerContributor +import org.sonatype.nexus.repository.view.handlers.HighAvailabilitySupportChecker import org.sonatype.nexus.repository.view.handlers.LastDownloadedHandler import org.sonatype.nexus.repository.view.handlers.TimingHandler import org.sonatype.nexus.repository.view.matchers.ActionMatcher @@ -54,7 +56,7 @@ import static org.sonatype.nexus.repository.golang.AssetKind.PACKAGE /** * Support for Go recipes. * - * @since 3.next + * @since 3.17 */ abstract class GolangRecipeSupport extends RecipeSupport @@ -62,6 +64,9 @@ abstract class GolangRecipeSupport @Inject Provider securityFacet + @Inject + FormatHighAvailabilitySupportHandler highAvailabilitySupportHandler; + @Inject Provider viewFacet @@ -116,8 +121,14 @@ abstract class GolangRecipeSupport @Inject LastDownloadedHandler lastDownloadedHandler - protected GolangRecipeSupport(final Type type, final Format format) { + private HighAvailabilitySupportChecker highAvailabilitySupportChecker; + + protected GolangRecipeSupport(final HighAvailabilitySupportChecker highAvailibilitySupportChecker, + final Type type, + final Format format) + { super(type, format) + this.highAvailabilitySupportChecker = highAvailibilitySupportChecker; } /** @@ -200,4 +211,9 @@ abstract class GolangRecipeSupport static TokenMatcher tokenMatcherForExtension(final String extension) { new TokenMatcher("/{module:.+}/@v/{version:.+}.{extension:${extension}}") } + + @Override + boolean isFeatureEnabled() { + return highAvailabilitySupportChecker.isSupported(getFormat().getValue()); + } } diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/group/GolangGroupRecipe.groovy b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/group/GolangGroupRecipe.groovy index d5386a5eb9..6eec5625da 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/group/GolangGroupRecipe.groovy +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/group/GolangGroupRecipe.groovy @@ -31,11 +31,12 @@ import org.sonatype.nexus.repository.view.ConfigurableViewFacet import org.sonatype.nexus.repository.view.Route import org.sonatype.nexus.repository.view.Router import org.sonatype.nexus.repository.view.ViewFacet +import org.sonatype.nexus.repository.view.handlers.HighAvailabilitySupportChecker /** * Go group repository recipe. * - * @since 3.next + * @since 3.17 */ @Named(GolangGroupRecipe.NAME) @Singleton @@ -51,10 +52,11 @@ class GolangGroupRecipe GroupHandler groupHandler @Inject - GolangGroupRecipe(@Named(GroupType.NAME) final Type type, + GolangGroupRecipe(final HighAvailabilitySupportChecker highAvailabilitySupportChecker, + @Named(GroupType.NAME) final Type type, @Named(GolangFormat.NAME) final Format format) { - super(type, format) + super(highAvailabilitySupportChecker, type, format) } @Override diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedFacet.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedFacet.java index fda8d8f310..dede70fa60 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedFacet.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedFacet.java @@ -22,7 +22,7 @@ import org.sonatype.nexus.repository.view.Payload; /** - * @since 3.next + * @since 3.17 */ @Exposed public interface GolangHostedFacet diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedFacetImpl.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedFacetImpl.java index f34fa6d64a..997cfe2faa 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedFacetImpl.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedFacetImpl.java @@ -58,7 +58,7 @@ /** * Go hosted implementation * - * @since 3.next + * @since 3.17 */ @Named public class GolangHostedFacetImpl diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedRecipe.groovy b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedRecipe.groovy index 5bb4aea43c..ef33a1e8b8 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedRecipe.groovy +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedRecipe.groovy @@ -29,12 +29,13 @@ import org.sonatype.nexus.repository.view.ConfigurableViewFacet import org.sonatype.nexus.repository.view.Route import org.sonatype.nexus.repository.view.Router import org.sonatype.nexus.repository.view.ViewFacet +import org.sonatype.nexus.repository.view.handlers.HighAvailabilitySupportChecker import static java.lang.Boolean.parseBoolean import static java.lang.System.getProperty /** - * @since 3.next + * @since 3.17 */ @Named(GolangHostedRecipe.NAME) @Singleton @@ -50,10 +51,12 @@ class GolangHostedRecipe Provider hostedFacet @Inject - GolangHostedRecipe(@Named(HostedType.NAME) final Type type, + GolangHostedRecipe(final HighAvailabilitySupportChecker highAvailabilitySupportChecker, + @Named(HostedType.NAME) final Type type, @Named(GolangFormat.NAME) final Format format) { - super(type, format) + super(highAvailabilitySupportChecker, type, format) + } @Override @@ -70,7 +73,7 @@ class GolangHostedRecipe @Override boolean isFeatureEnabled() { - return(parseBoolean(getProperty("nexus.golang.hosted", "false"))) + return super.isFeatureEnabled() && (parseBoolean(getProperty("nexus.golang.hosted", "false"))) } /** @@ -85,6 +88,7 @@ class GolangHostedRecipe builder.route(new Route.Builder().matcher(matcher) .handler(timingHandler) .handler(securityHandler) + .handler(highAvailabilitySupportHandler) .handler(exceptionHandler) .handler(handlerContributor) .handler(partialFetchHandler) @@ -98,6 +102,7 @@ class GolangHostedRecipe builder.route(new Route.Builder().matcher(matcher) .handler(timingHandler) .handler(securityHandler) + .handler(highAvailabilitySupportHandler) .handler(exceptionHandler) .handler(handlerContributor) .handler(partialFetchHandler) @@ -111,6 +116,7 @@ class GolangHostedRecipe builder.route(new Route.Builder().matcher(uploadMatcher()) .handler(timingHandler) .handler(securityHandler) + .handler(highAvailabilitySupportHandler) .handler(exceptionHandler) .handler(handlerContributor) .handler(conditionalRequestHandler) diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/HostedHandlers.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/HostedHandlers.java index f1e28cfc97..ceb1f349dc 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/HostedHandlers.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/hosted/HostedHandlers.java @@ -33,7 +33,7 @@ import static org.sonatype.nexus.repository.http.HttpResponses.ok; /** - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/metadata/GolangAttributes.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/metadata/GolangAttributes.java index 559f6a1f31..88608cbefe 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/metadata/GolangAttributes.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/metadata/GolangAttributes.java @@ -15,7 +15,7 @@ /** * Object for storing Go specific attributes * - * @since 3.next + * @since 3.17 */ public final class GolangAttributes { diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/metadata/GolangInfo.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/metadata/GolangInfo.java index aac0e98e7f..2717270e2a 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/metadata/GolangInfo.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/metadata/GolangInfo.java @@ -17,7 +17,7 @@ /** * Object for .info endpoint responses * - * @since 3.next + * @since 3.17 */ public class GolangInfo { diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyFacetImpl.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyFacetImpl.java index 5747cfb74e..c763e43816 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyFacetImpl.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyFacetImpl.java @@ -44,7 +44,7 @@ /** * Go {@link ProxyFacet} implementation. * - * @since 3.next + * @since 3.17 */ @Named public class GolangProxyFacetImpl diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyRecipe.groovy b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyRecipe.groovy index c9b9c0aa82..7248b9e67d 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyRecipe.groovy +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyRecipe.groovy @@ -25,16 +25,18 @@ import org.sonatype.nexus.repository.golang.GolangFormat import org.sonatype.nexus.repository.golang.internal.GolangRecipeSupport import org.sonatype.nexus.repository.http.HttpHandlers import org.sonatype.nexus.repository.proxy.ProxyHandler +import org.sonatype.nexus.repository.routing.RoutingRuleHandler import org.sonatype.nexus.repository.types.ProxyType import org.sonatype.nexus.repository.view.ConfigurableViewFacet import org.sonatype.nexus.repository.view.Route import org.sonatype.nexus.repository.view.Router import org.sonatype.nexus.repository.view.ViewFacet +import org.sonatype.nexus.repository.view.handlers.HighAvailabilitySupportChecker /** * Go proxy repository recipe. * - * @since 3.next + * @since 3.17 */ @Named(GolangProxyRecipe.NAME) @Singleton @@ -43,6 +45,9 @@ class GolangProxyRecipe { private static final String NAME = 'go-proxy' + @Inject + RoutingRuleHandler routingRuleHandler + @Inject Provider proxyFacet @@ -50,9 +55,11 @@ class GolangProxyRecipe ProxyHandler proxyHandler @Inject - GolangProxyRecipe(@Named(ProxyType.NAME) final Type type, - @Named(GolangFormat.NAME) final Format format) { - super(type, format) + GolangProxyRecipe(final HighAvailabilitySupportChecker highAvailabilitySupportChecker, + @Named(ProxyType.NAME) final Type type, + @Named(GolangFormat.NAME) final Format format) + { + super(highAvailabilitySupportChecker, type, format) } @Override @@ -81,6 +88,8 @@ class GolangProxyRecipe builder.route(new Route.Builder().matcher(matcher) .handler(timingHandler) .handler(securityHandler) + .handler(highAvailabilitySupportHandler) + .handler(routingRuleHandler) .handler(exceptionHandler) .handler(handlerContributor) .handler(negativeCacheHandler) diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/security/GolangFormatSecurityContributor.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/security/GolangFormatSecurityContributor.java index 4986e53680..eb9eacf2d1 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/security/GolangFormatSecurityContributor.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/security/GolangFormatSecurityContributor.java @@ -23,7 +23,7 @@ /** * Go format security resource. * - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/security/GolangSecurityFacet.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/security/GolangSecurityFacet.java index 0a8f6a22a7..562c4d1ed9 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/security/GolangSecurityFacet.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/security/GolangSecurityFacet.java @@ -22,7 +22,7 @@ /** * Go format security facet. * - * @since 3.next + * @since 3.17 */ @Named public class GolangSecurityFacet diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/CompressedContentExtractor.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/CompressedContentExtractor.java index 70b5af298f..6073e61c23 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/CompressedContentExtractor.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/CompressedContentExtractor.java @@ -30,7 +30,7 @@ /** * Extracts a file from a zip image * - * @since 3.next + * @since 3.17 */ public class CompressedContentExtractor extends ComponentSupport diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/GolangDataAccess.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/GolangDataAccess.java index 9cbf488629..91ab69b63e 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/GolangDataAccess.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/GolangDataAccess.java @@ -51,7 +51,7 @@ /** * Shared code between Go facets. * - * @since 3.next + * @since 3.17 */ @Named public class GolangDataAccess diff --git a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/GolangPathUtils.java b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/GolangPathUtils.java index eac509200d..1a9c6f4412 100644 --- a/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/GolangPathUtils.java +++ b/plugins/nexus-repository-golang/src/main/java/org/sonatype/nexus/repository/golang/internal/util/GolangPathUtils.java @@ -24,7 +24,7 @@ /** * Utility methods for working with Go routes and paths. * - * @since 3.next + * @since 3.17 */ @Named @Singleton diff --git a/plugins/nexus-repository-golang/src/test/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedRecipeTest.java b/plugins/nexus-repository-golang/src/test/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedRecipeTest.java index 5578f94fd2..59d6a2dba5 100644 --- a/plugins/nexus-repository-golang/src/test/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedRecipeTest.java +++ b/plugins/nexus-repository-golang/src/test/java/org/sonatype/nexus/repository/golang/internal/hosted/GolangHostedRecipeTest.java @@ -13,11 +13,10 @@ package org.sonatype.nexus.repository.golang.internal.hosted; import org.sonatype.goodies.testsupport.TestSupport; -import org.sonatype.nexus.common.collect.AttributesMap; import org.sonatype.nexus.repository.golang.GolangFormat; import org.sonatype.nexus.repository.types.HostedType; -import org.sonatype.nexus.repository.view.Context; -import org.sonatype.nexus.repository.view.Request; +import org.sonatype.nexus.repository.types.HostedType; +import org.sonatype.nexus.repository.view.handlers.HighAvailabilitySupportChecker; import org.junit.After; import org.junit.Before; @@ -27,28 +26,22 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class GolangHostedRecipeTest extends TestSupport { @Mock - private Request request; - - @Mock - private Context context; + private HighAvailabilitySupportChecker highAvailabilitySupportChecker; - private AttributesMap attributesMap; + private String GO_NAME = "go"; private GolangHostedRecipe underTest; @Before public void setUp() throws Exception { - underTest = new GolangHostedRecipe(new HostedType(), new GolangFormat()); - - attributesMap = new AttributesMap(); - when(context.getRequest()).thenReturn(request); - when(context.getAttributes()).thenReturn(attributesMap); + underTest = new GolangHostedRecipe(highAvailabilitySupportChecker, new HostedType(), new GolangFormat()); } @After @@ -58,12 +51,32 @@ public void tearDown() throws Exception { @Test public void disabledByDefault() { + when(highAvailabilitySupportChecker.isSupported(GO_NAME)).thenReturn(true); assertThat(underTest.isFeatureEnabled(), is(equalTo(false))); + verify(highAvailabilitySupportChecker).isSupported(GO_NAME); } @Test public void enableGolang() { System.setProperty("nexus.golang.hosted", "true"); + when(highAvailabilitySupportChecker.isSupported(GO_NAME)).thenReturn(true); assertThat(underTest.isFeatureEnabled(), is(equalTo(true))); + verify(highAvailabilitySupportChecker).isSupported(GO_NAME); + } + + @Test + public void disabledIfNexusIsClusteredAndGoHostedDisabled() { + System.setProperty("nexus.golang.hosted", "false"); + when(highAvailabilitySupportChecker.isSupported(GO_NAME)).thenReturn(false); + assertThat(underTest.isFeatureEnabled(), is(equalTo(false))); + verify(highAvailabilitySupportChecker).isSupported(GO_NAME); + } + + @Test + public void disabledIfNexusIsClusteredAndGoHostedEnabled() { + System.setProperty("nexus.golang.hosted", "true"); + when(highAvailabilitySupportChecker.isSupported(GO_NAME)).thenReturn(false); + assertThat(underTest.isFeatureEnabled(), is(equalTo(false))); + verify(highAvailabilitySupportChecker).isSupported(GO_NAME); } } diff --git a/plugins/nexus-repository-golang/src/test/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyRecipeTest.java b/plugins/nexus-repository-golang/src/test/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyRecipeTest.java new file mode 100644 index 0000000000..3f551b9b05 --- /dev/null +++ b/plugins/nexus-repository-golang/src/test/java/org/sonatype/nexus/repository/golang/internal/proxy/GolangProxyRecipeTest.java @@ -0,0 +1,57 @@ +/* + * Sonatype Nexus (TM) Open Source Version + * Copyright (c) 2008-present Sonatype, Inc. + * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions. + * + * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0, + * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks + * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the + * Eclipse Foundation. All other trademarks are the property of their respective owners. + */ +package org.sonatype.nexus.repository.golang.internal.proxy; + +import org.sonatype.goodies.testsupport.TestSupport; +import org.sonatype.nexus.repository.golang.GolangFormat; +import org.sonatype.nexus.repository.types.ProxyType; +import org.sonatype.nexus.repository.view.handlers.HighAvailabilitySupportChecker; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class GolangProxyRecipeTest extends TestSupport +{ + @Mock + private HighAvailabilitySupportChecker highAvailabilitySupportChecker; + + private String GO_NAME = "go"; + + private GolangProxyRecipe proxyUnderTest; + + @Before + public void setUp() throws Exception { + proxyUnderTest = new GolangProxyRecipe(highAvailabilitySupportChecker, new ProxyType(), new GolangFormat()); + } + + @Test + public void enabledByDefault_GoProxyRepository() { + when(highAvailabilitySupportChecker.isSupported(GO_NAME)).thenReturn(true); + assertThat(proxyUnderTest.isFeatureEnabled(), is(equalTo(true))); + verify(highAvailabilitySupportChecker).isSupported(GO_NAME); + } + + @Test + public void disabledIfNexusIsClusteredAndGoNotCluster_GoProxyRepository() { + when(highAvailabilitySupportChecker.isSupported(GO_NAME)).thenReturn(false); + assertThat(proxyUnderTest.isFeatureEnabled(), is(equalTo(false))); + verify(highAvailabilitySupportChecker).isSupported(GO_NAME); + } +} diff --git a/plugins/nexus-repository-httpbridge/pom.xml b/plugins/nexus-repository-httpbridge/pom.xml index 23c2d323ae..8d52e5b483 100644 --- a/plugins/nexus-repository-httpbridge/pom.xml +++ b/plugins/nexus-repository-httpbridge/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-repository-httpbridge diff --git a/plugins/nexus-repository-maven/pom.xml b/plugins/nexus-repository-maven/pom.xml index f55cdef372..ac52f3df9e 100644 --- a/plugins/nexus-repository-maven/pom.xml +++ b/plugins/nexus-repository-maven/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-repository-maven diff --git a/plugins/nexus-repository-maven/src/main/java/org/sonatype/nexus/repository/maven/internal/hosted/metadata/MetadataException.java b/plugins/nexus-repository-maven/src/main/java/org/sonatype/nexus/repository/maven/internal/hosted/metadata/MetadataException.java index 34a52e32bd..ab78077bb4 100644 --- a/plugins/nexus-repository-maven/src/main/java/org/sonatype/nexus/repository/maven/internal/hosted/metadata/MetadataException.java +++ b/plugins/nexus-repository-maven/src/main/java/org/sonatype/nexus/repository/maven/internal/hosted/metadata/MetadataException.java @@ -13,7 +13,7 @@ package org.sonatype.nexus.repository.maven.internal.hosted.metadata; /** - * @since 3.next + * @since 3.17 */ public class MetadataException extends Exception diff --git a/plugins/nexus-repository-npm/pom.xml b/plugins/nexus-repository-npm/pom.xml index 9479f4c585..6311e64684 100644 --- a/plugins/nexus-repository-npm/pom.xml +++ b/plugins/nexus-repository-npm/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-repository-npm diff --git a/plugins/nexus-repository-npm/src/main/java/org/sonatype/nexus/repository/npm/internal/NpmFieldUnmatcher.java b/plugins/nexus-repository-npm/src/main/java/org/sonatype/nexus/repository/npm/internal/NpmFieldUnmatcher.java index f97a0e5b36..6f9f8b1acd 100644 --- a/plugins/nexus-repository-npm/src/main/java/org/sonatype/nexus/repository/npm/internal/NpmFieldUnmatcher.java +++ b/plugins/nexus-repository-npm/src/main/java/org/sonatype/nexus/repository/npm/internal/NpmFieldUnmatcher.java @@ -19,7 +19,7 @@ /** * A NPM Json Field Matcher the test whether we never matched a field. * - * @since 3.next + * @since 3.17 */ public class NpmFieldUnmatcher extends NpmFieldMatcher diff --git a/plugins/nexus-repository-npm/src/main/java/org/sonatype/nexus/repository/npm/internal/NpmRevisionUpgradeRequestEvent.java b/plugins/nexus-repository-npm/src/main/java/org/sonatype/nexus/repository/npm/internal/NpmRevisionUpgradeRequestEvent.java index 5b0f112803..c09001636a 100644 --- a/plugins/nexus-repository-npm/src/main/java/org/sonatype/nexus/repository/npm/internal/NpmRevisionUpgradeRequestEvent.java +++ b/plugins/nexus-repository-npm/src/main/java/org/sonatype/nexus/repository/npm/internal/NpmRevisionUpgradeRequestEvent.java @@ -19,7 +19,7 @@ /** * Event for requesting an upgrade on the revision field of an NPM package root. * - * @since 3.next + * @since 3.17 */ public class NpmRevisionUpgradeRequestEvent { diff --git a/plugins/nexus-repository-pypi/pom.xml b/plugins/nexus-repository-pypi/pom.xml index 2b316a1870..408e9d46e7 100644 --- a/plugins/nexus-repository-pypi/pom.xml +++ b/plugins/nexus-repository-pypi/pom.xml @@ -21,7 +21,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-repository-pypi diff --git a/plugins/nexus-repository-raw/pom.xml b/plugins/nexus-repository-raw/pom.xml index e5e193deec..6ca754fed3 100644 --- a/plugins/nexus-repository-raw/pom.xml +++ b/plugins/nexus-repository-raw/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-repository-raw diff --git a/plugins/nexus-restore-apt/pom.xml b/plugins/nexus-restore-apt/pom.xml index 0e598619d5..e280281b2d 100644 --- a/plugins/nexus-restore-apt/pom.xml +++ b/plugins/nexus-restore-apt/pom.xml @@ -19,7 +19,7 @@ nexus-plugins org.sonatype.nexus.plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT 4.0.0 diff --git a/plugins/nexus-restore-apt/src/main/java/org/sonatype/nexus/blobstore/restore/apt/internal/AptRestoreBlobData.java b/plugins/nexus-restore-apt/src/main/java/org/sonatype/nexus/blobstore/restore/apt/internal/AptRestoreBlobData.java index 966cd649b8..a786fd3759 100644 --- a/plugins/nexus-restore-apt/src/main/java/org/sonatype/nexus/blobstore/restore/apt/internal/AptRestoreBlobData.java +++ b/plugins/nexus-restore-apt/src/main/java/org/sonatype/nexus/blobstore/restore/apt/internal/AptRestoreBlobData.java @@ -16,7 +16,7 @@ import org.sonatype.nexus.blobstore.restore.RestoreBlobDataSupport; /** - * @since 3.next + * @since 3.17 */ public class AptRestoreBlobData extends RestoreBlobDataSupport diff --git a/plugins/nexus-restore-apt/src/main/java/org/sonatype/nexus/blobstore/restore/apt/internal/AptRestoreBlobStrategy.java b/plugins/nexus-restore-apt/src/main/java/org/sonatype/nexus/blobstore/restore/apt/internal/AptRestoreBlobStrategy.java index 9b90c0da7b..02e14f82b4 100644 --- a/plugins/nexus-restore-apt/src/main/java/org/sonatype/nexus/blobstore/restore/apt/internal/AptRestoreBlobStrategy.java +++ b/plugins/nexus-restore-apt/src/main/java/org/sonatype/nexus/blobstore/restore/apt/internal/AptRestoreBlobStrategy.java @@ -41,7 +41,7 @@ import static org.sonatype.nexus.common.hash.HashAlgorithm.SHA256; /** - * @since 3.next + * @since 3.17 */ @Named("apt") @Singleton diff --git a/plugins/nexus-restore-maven/pom.xml b/plugins/nexus-restore-maven/pom.xml index 2c85ccdfaf..c721321862 100644 --- a/plugins/nexus-restore-maven/pom.xml +++ b/plugins/nexus-restore-maven/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-restore-maven diff --git a/plugins/nexus-restore-npm/pom.xml b/plugins/nexus-restore-npm/pom.xml index 1b95d51bd1..96d2225865 100644 --- a/plugins/nexus-restore-npm/pom.xml +++ b/plugins/nexus-restore-npm/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-restore-npm diff --git a/plugins/nexus-restore-pypi/pom.xml b/plugins/nexus-restore-pypi/pom.xml index 391385e51b..18267214ef 100644 --- a/plugins/nexus-restore-pypi/pom.xml +++ b/plugins/nexus-restore-pypi/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-restore-pypi diff --git a/plugins/nexus-restore-raw/pom.xml b/plugins/nexus-restore-raw/pom.xml index 4ea6cb5446..545f33dc7a 100644 --- a/plugins/nexus-restore-raw/pom.xml +++ b/plugins/nexus-restore-raw/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-restore-raw diff --git a/plugins/nexus-script-plugin/pom.xml b/plugins/nexus-script-plugin/pom.xml index 413aef5771..eead30dbf2 100644 --- a/plugins/nexus-script-plugin/pom.xml +++ b/plugins/nexus-script-plugin/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-script-plugin diff --git a/plugins/nexus-ssl-plugin/pom.xml b/plugins/nexus-ssl-plugin/pom.xml index fc046ad263..c465592bb9 100644 --- a/plugins/nexus-ssl-plugin/pom.xml +++ b/plugins/nexus-ssl-plugin/pom.xml @@ -21,7 +21,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-ssl-plugin diff --git a/plugins/nexus-task-log-cleanup/pom.xml b/plugins/nexus-task-log-cleanup/pom.xml index 5ebd47d314..c2c7eccd8e 100644 --- a/plugins/nexus-task-log-cleanup/pom.xml +++ b/plugins/nexus-task-log-cleanup/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.plugins nexus-plugins - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT nexus-task-log-cleanup diff --git a/plugins/pom.xml b/plugins/pom.xml index 48dfc44ce9..b9c6bbf0cb 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus nexus-parent - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins @@ -60,7 +60,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-all pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import
@@ -71,13 +71,13 @@ org.sonatype.nexus.plugins nexus-audit-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-audit-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -87,13 +87,13 @@ org.sonatype.nexus.plugins nexus-blobstore-tasks - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-blobstore-tasks - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -103,13 +103,13 @@ org.sonatype.nexus.plugins nexus-coreui-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-coreui-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -118,7 +118,7 @@ org.sonatype.nexus.plugins nexus-coreui-plugin sources - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT @@ -126,13 +126,13 @@ org.sonatype.nexus.plugins nexus-repository-httpbridge - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-repository-httpbridge - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -142,13 +142,13 @@ org.sonatype.nexus.plugins nexus-repository-go - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-repository-go - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -158,13 +158,13 @@ org.sonatype.nexus.plugins nexus-repository-golang - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-repository-golang - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -174,13 +174,13 @@ org.sonatype.nexus.plugins nexus-repository-maven - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-repository-maven - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -188,13 +188,13 @@ org.sonatype.nexus.plugins nexus-restore-maven - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-restore-maven - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -204,13 +204,13 @@ org.sonatype.nexus.plugins nexus-repository-npm - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-repository-npm - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -218,13 +218,13 @@ org.sonatype.nexus.plugins nexus-restore-npm - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-restore-npm - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -234,19 +234,19 @@ org.sonatype.nexus.plugins nexus-repository-apt - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-restore-apt - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-restore-apt - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -254,7 +254,7 @@ org.sonatype.nexus.plugins nexus-repository-apt - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -264,13 +264,13 @@ org.sonatype.nexus.plugins nexus-repository-pypi - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-repository-pypi - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -278,13 +278,13 @@ org.sonatype.nexus.plugins nexus-restore-pypi - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-restore-pypi - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -294,13 +294,13 @@ org.sonatype.nexus.plugins nexus-repository-raw - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-repository-raw - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -308,13 +308,13 @@ org.sonatype.nexus.plugins nexus-restore-raw - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-restore-raw - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -324,13 +324,13 @@ org.sonatype.nexus.plugins nexus-ssl-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-ssl-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -340,13 +340,13 @@ org.sonatype.nexus.plugins nexus-script-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-script-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -356,13 +356,13 @@ org.sonatype.nexus.plugins nexus-task-log-cleanup - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-task-log-cleanup - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -372,13 +372,13 @@ org.sonatype.nexus.plugins nexus-blobstore-s3 - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-blobstore-s3 - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -388,13 +388,13 @@ org.sonatype.nexus.plugins nexus-onboarding-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.plugins nexus-onboarding-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml diff --git a/pom.xml b/pom.xml index 545462511b..5f02d16a66 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ ${project.groupId}:${project.artifactId} pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT 2008 http://nexus.sonatype.org/ @@ -88,7 +88,7 @@ Define nexus versions. The 'nexus.version' property always refers to the version of the current project. These values must always be constants; 'nexus.version' will get update automatically by set-version. --> - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT 2.14.13-01 @@ -143,169 +143,169 @@ org.sonatype.nexus nexus-audit - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-base - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-blobstore - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-blobstore-api - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-blobstore-file - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-bootstrap - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-capability - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-cleanup - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-commands - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-common - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-core - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-crypto - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-orient - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-orient-console - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-cache - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-elasticsearch - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-email - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-extdirect - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-extender - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-httpclient - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-jmx - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-scheduling - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-formfields - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-guice-servlet - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-main - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-mime - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-oss-edition - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-oss-edition - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -313,44 +313,44 @@ org.sonatype.nexus nexus-pax-logging - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-plugin-api - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-quartz - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-rapture - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-rapture - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT sources org.sonatype.nexus nexus-repository - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-repository - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT tests test @@ -358,109 +358,109 @@ org.sonatype.nexus nexus-rest - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-rest-client - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-rest-jackson2 - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-script - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-security - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-selector - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-servlet - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-siesta - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-ssl - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-supportzip-api - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-swagger - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-task-logging - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-thread - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-transaction - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-upgrade - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-validation - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-webhooks - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-webresources-api - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT @@ -468,13 +468,13 @@ org.sonatype.nexus nexus-pax-exam - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus nexus-test-common - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT @@ -482,7 +482,7 @@ org.sonatype.nexus.assemblies nexus-startup-feature - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -490,7 +490,7 @@ org.sonatype.nexus.assemblies nexus-boot-feature - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -498,7 +498,7 @@ org.sonatype.nexus.assemblies nexus-base-feature - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -506,7 +506,7 @@ org.sonatype.nexus.assemblies nexus-core-feature - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT features xml @@ -514,7 +514,7 @@ org.sonatype.nexus.assemblies nexus-base-template - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT zip @@ -727,7 +727,7 @@ org.apache.karaf.tooling karaf-maven-plugin - 4.0.9 + 4.2.6 true @@ -744,6 +744,9 @@ javax.inject aopalliance javax.ws.rs + jaxb-api + jaxb-core + jaxb-impl jsr250-api jsr305 slf4j-api @@ -764,8 +767,6 @@ paranamer httpcore httpclient - jaxb-core - jaxb-impl metrics-guice quartz resteasy-jaxrs @@ -801,7 +802,7 @@ org.sonatype.nexus.buildsupport extjs-maven-plugin - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT diff --git a/revision.txt b/revision.txt index 7a4aa3ce14..d14226b08d 100644 --- a/revision.txt +++ b/revision.txt @@ -1 +1 @@ -b=master,r=d6a18e2c3d6731d5c7d56ecde7710a69ea4d0c6f,t=2019-06-07-1023-08730 \ No newline at end of file +b=master,r=8925b2f91fe89421777a1212df0c7a03c681bbda,t=2019-06-14-2016-21826 \ No newline at end of file diff --git a/thirdparty-bundles/elasticsearch/pom.xml b/thirdparty-bundles/elasticsearch/pom.xml index ceff1d6899..432ba9cf86 100644 --- a/thirdparty-bundles/elasticsearch/pom.xml +++ b/thirdparty-bundles/elasticsearch/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus.bundles nexus-thirdparty-bundles - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.bundles.elasticsearch diff --git a/thirdparty-bundles/pom.xml b/thirdparty-bundles/pom.xml index 6e5c032524..288f50d8ba 100644 --- a/thirdparty-bundles/pom.xml +++ b/thirdparty-bundles/pom.xml @@ -20,7 +20,7 @@ org.sonatype.nexus nexus-parent - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT org.sonatype.nexus.bundles @@ -41,7 +41,7 @@ org.sonatype.nexus.buildsupport nexus-buildsupport-all pom - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT import @@ -50,7 +50,7 @@ org.sonatype.nexus.bundles org.sonatype.nexus.bundles.elasticsearch - 3.17.0-SNAPSHOT + 3.18.0-SNAPSHOT