diff --git a/build.gradle b/build.gradle index 7b30bba..94aabd1 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.0-rc03' + classpath 'com.android.tools.build:gradle:3.5.2' } } @@ -28,21 +28,28 @@ ext { url : 'https://github.com/laenger/ViewPagerBottomSheet' ] - compileSdkVersion = 27 - buildToolsVersion = '27.0.3' - targetSdkVersion = 27 + compileSdkVersion = 29 + buildToolsVersion = '29.0.0' + targetSdkVersion = 29 - supportVersion = '27.1.0' + supportVersion = '28.0.0' butterknifeVersion = '8.8.1' } -allprojects { +subprojects { repositories { google() jcenter() maven { url "https://raw.github.com/laenger/maven-releases/master/releases" } maven { url "https://raw.github.com/laenger/maven-releases/master/snapshots" } } + + apply from: "${rootDir}/config/common.gradle" + plugins.withId('com.android.library') { + afterEvaluate { + project.apply from: "${rootDir}/config/publish-android.gradle" + } + } } task clean(type: Delete) { diff --git a/config/common.gradle b/config/common.gradle new file mode 100644 index 0000000..3910d0d --- /dev/null +++ b/config/common.gradle @@ -0,0 +1,25 @@ +def buildVersionSuffix() { + if (runningOnJenkins) { + def versionSuffix = System.getenv('VERSION_SUFFIX')?.trim() + return "${versionSuffix == null || versionSuffix.empty ? "" : "${versionSuffix}_"}${System.getenv('BUILD_NUMBER')?.trim()}_${System.getenv('GIT_COMMIT')?.subSequence(0, 6)?.trim()}" + } + return 'local' +} + +def renameLibraryVariantOutput(variant) { + variant.outputs.all { output -> + if (outputFileName.endsWith('.aar')) { + outputFileName = "${buildLibraryArchiveBaseName(variant)}.aar" + } + } +} + +def buildLibraryArchiveBaseName(variant) { + return "${project.name}_${android.defaultConfig.versionName}_${buildVersionSuffix()}-${variant.baseName}" +} + +ext { + buildVersionSuffix = this.&buildVersionSuffix + renameLibraryVariantOutput = this.&renameLibraryVariantOutput + buildLibraryArchiveBaseName = this.&buildLibraryArchiveBaseName +} diff --git a/config/publish-android.gradle b/config/publish-android.gradle new file mode 100644 index 0000000..cd360c5 --- /dev/null +++ b/config/publish-android.gradle @@ -0,0 +1,95 @@ +apply plugin: 'maven-publish' + +/** + * Sources Jar + */ +android.libraryVariants.all { variant -> + renameLibraryVariantOutput(variant) + + task("generate${variant.name.capitalize()}SourcesJar", type: Jar) { + classifier = 'sources' + from variant.sourceSets*.java.srcDirs.flatten() + baseName = buildLibraryArchiveBaseName(variant) + } +} + +/** + * Maven Publication + */ +publishing { + repositories { + maven { + name "nexus" + credentials { + username nexusUsername + password nexusPassword + } + url project.android.defaultConfig.versionName.endsWith('-SNAPSHOT') ? nexusSnapshotsRepository : nexusReleasesRepository + } + } + + afterEvaluate { + publications { + android.libraryVariants.each { variant -> + "${variant.name}"(MavenPublication) { + groupId project.group + artifactId "${project.name}${variant.buildType.name == "release" ? "" : "-${variant.buildType.name}"}" + version project.android.defaultConfig.versionName + + artifact tasks["bundle${variant.name.capitalize()}Aar"] + artifact tasks["generate${variant.name.capitalize()}SourcesJar"] + + pom { + packaging = 'aar' + name = project.title + description = project.description + url = project.scm.url + + developers { + project.developers.each { d -> + developer { + id = d.id + name = d.name + email = d.email + } + } + } + + scm { + connection = project.scm.connection + developerConnection = project.scm.developerConnection + url = project.scm.url + } + + withXml { + def dependenciesNode = asNode().appendNode('dependencies') + variant.compileConfiguration.allDependencies.each { + def dependencyNode = dependenciesNode.appendNode('dependency') + dependencyNode.appendNode('groupId', it.group) + dependencyNode.appendNode('artifactId', it.name) + dependencyNode.appendNode('version', it.version) + + if (!it.excludeRules.empty) { + def exclusionsNode = dependencyNode.appendNode('exclusions') + it.excludeRules.each { rule -> + def exclusionNode = exclusionsNode.appendNode('exclusion') + exclusionNode.appendNode('groupId', rule.group) + exclusionNode.appendNode('artifactId', rule.module) + } + } + } + } + } + } + } + } + } +} + +android.libraryVariants.all { variant -> + model { + tasks."generatePomFileFor${variant.name.capitalize()}Publication" { + destination = new File(destination.parent, "${buildLibraryArchiveBaseName(variant)}-pom.xml") + } + } +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 13372ae..5c2d1cf 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3f0f9be..674bdda 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 index 91a7e26..83f2acf --- a/gradlew +++ b/gradlew @@ -1,4 +1,20 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ############################################################################## ## @@ -6,20 +22,38 @@ ## ############################################################################## -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -30,6 +64,7 @@ die ( ) { cygwin=false msys=false darwin=false +nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -40,31 +75,11 @@ case "`uname`" in MINGW* ) msys=true ;; + NONSTOP* ) + nonstop=true + ;; esac -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -90,7 +105,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -110,10 +125,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` @@ -154,11 +170,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 8a0b282..9618d8d 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -8,14 +24,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,10 +62,9 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windowz variants +@rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +75,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/vpbs/build.gradle b/vpbs/build.gradle index a1f79c6..ccda699 100644 --- a/vpbs/build.gradle +++ b/vpbs/build.gradle @@ -8,13 +8,11 @@ description = 'Android BottomSheetBehavior with ViewPager support' android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion - defaultPublishConfig 'debug' - publishNonDefault true defaultConfig { minSdkVersion 14 targetSdkVersion rootProject.targetSdkVersion - versionName '0.0.5' + versionName '0.0.6-SNAPSHOT' } buildTypes { @@ -33,36 +31,3 @@ android { dependencies { implementation "com.android.support:design:${supportVersion}" } - -android.libraryVariants.all { variant -> - renameLibraryVariantOutput(variant) - - def sourcesJarTaskName = "generate${variant.name.capitalize()}SourcesJar" - - task(sourcesJarTaskName, type: Jar) { - classifier = 'sources' - from variant.sourceSets*.java.srcDirs.flatten() - baseName = buildLibraryArchiveBaseName(variant) - } -} - -def renameLibraryVariantOutput(variant) { - variant.outputs.all { output -> - if (outputFileName.endsWith('.aar')) { - outputFileName = "${buildLibraryArchiveBaseName(variant)}.aar" - } - } -} - -def buildLibraryArchiveBaseName(variant) { - return "${project.name}_${android.defaultConfig.versionName}_${buildVersionSuffix()}-${variant.baseName}" -} - -def buildVersionSuffix() { - if (runningOnJenkins) { - return "${System.getenv('BUILD_NUMBER').trim()}_${System.getenv('GIT_COMMIT').subSequence(0, 6).trim()}" - } - return 'local' -} - -apply from: 'publish.gradle' diff --git a/vpbs/publish.gradle b/vpbs/publish.gradle deleted file mode 100644 index 3de9dd0..0000000 --- a/vpbs/publish.gradle +++ /dev/null @@ -1,73 +0,0 @@ -apply plugin: 'maven-publish' - -publishing { - repositories { - maven { - name "nexus" - credentials { - username nexusUsername - password nexusPassword - } - url project.android.defaultConfig.versionName.endsWith('-SNAPSHOT') ? nexusSnapshotsRepository : nexusReleasesRepository - } - } - - publications { - android.libraryVariants.each { variant -> - if (variant.buildType.name == "release") { - "${variant.name}"(MavenPublication) { - groupId project.group - artifactId project.archivesBaseName - version project.android.defaultConfig.versionName - - artifact tasks["bundle${variant.name.capitalize()}"] - artifact tasks["generate${variant.name.capitalize()}SourcesJar"] - - pom.withXml { - def rootNode = asNode() - - rootNode.appendNode('name', project.title) - rootNode.appendNode('description', project.description) - rootNode.appendNode('url', project.scm.url) - - def developersNode = rootNode.appendNode('developers') - project.developers.each { - def developerNode = developersNode.appendNode('developer') - it.each { name, value -> developerNode.appendNode(name, value) } - } - - def scmNode = rootNode.appendNode('scm') - project.scm.each { name, value -> scmNode.appendNode(name, value) } - - def dependenciesNode = rootNode.appendNode('dependencies') - variant.compileConfiguration.allDependencies.each { - def dependencyNode = dependenciesNode.appendNode('dependency') - dependencyNode.appendNode('groupId', it.group) - dependencyNode.appendNode('artifactId', it.name) - dependencyNode.appendNode('version', it.version) - - if (!it.excludeRules.empty) { - def exclusionsNode = dependencyNode.appendNode('exclusions') - it.excludeRules.each { rule -> - def exclusionNode = exclusionsNode.appendNode('exclusion') - exclusionNode.appendNode('groupId', rule.group) - exclusionNode.appendNode('artifactId', rule.module) - } - } - } - } - } - } - } - } -} - -android.libraryVariants.all { variant -> - if (variant.buildType.name == 'release') { - model { - tasks."generatePomFileFor${variant.name.capitalize()}Publication" { - destination = new File(destination.parent, "${buildLibraryArchiveBaseName(variant)}-pom.xml") - } - } - } -}