Skip to content

Commit

Permalink
Merge pull request #14 from LemonadeLabInc/apply_gradle5
Browse files Browse the repository at this point in the history
Adapt to Gradle5
  • Loading branch information
tkcmrc authored Jul 15, 2020
2 parents a13671c + 7c83616 commit e95f0de
Show file tree
Hide file tree
Showing 8 changed files with 50 additions and 132 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
build/
local.properties

# Lemonade
# Private
lemonade.properties
16 changes: 7 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
Lemonade Lab Gradle Plugins
LEOMO Gradle Plugins
===========================

This project contains a set of [Gradle](http://gradle.org/) plugins to
customize the standard build conventions to the ones used at
[Lemonade Lab](http://lemona.de/)
[LEOMO, Inc.](http://leomo.io/)

* [Main Plugin](#main-plugin)
* [Android Plugin](#android-plugin)
* [Publishing Plugin](#publishing-plugin)
* [S3 Repository Plugin](#s3-repository-plugin)


Supported Version
-----------------
* Gradle 2.13 - 4.0.1
Expand Down Expand Up @@ -66,10 +65,11 @@ This plugin will:
> be left untouched.</small>
3. Initialize the project's `version` filed following Lemonade's
[versioning convertions](#versioning)
4. Set up three repositories for dependency resolution:
4. Set up repositories for dependency resolution:
* Lemonade's OSS repository on [Bintray](https://bintray.com/lemonade/maven).
* Bintray's [JCenter](https://bintray.com/lemonade/maven) repository.
* The [Maven Central](http://search.maven.org/) repository.
* [Google's Maven](https://maven.google.com/) repository.
5. Set up the rest of our plugins:
* Add the [Android Plugin](#android-plugin) if either the
`com.android.application` or `com.android.library` plugins were specified
Expand Down Expand Up @@ -152,13 +152,11 @@ repository under `${buildDir}/maven`.
For Java artifacts the main java component, sources and javadoc jars will
be published.

For Android _libraries_ the the jar, aar, sources and javadoc jars will be
published under the `${buildDir}/maven/${variant.name}` directory.
For Android _libraries_ the aar file will be published.

By default the `release` variant will be published, to publish a _different_
build variant specify its name in the `publishVariant` project property or
`PUBLISH_VARIANT` environment variable.
For Android _app_ an zip file which contains the apk file and the obfuscation mapping file.

The `release` variant will be published.

S3 Repository Plugin
--------------------
Expand Down
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ gradle.taskGraph.whenReady { taskGraph ->
pluginBundle {
website = 'https://www.leomo.io/'
vcsUrl = 'https://github.com/LemonadeLabInc/gradle-snippets'
description = 'Lemonade Android and Java conventions plugin'
tags = ['lemonade']
description = 'LEOMO Android and Java conventions plugin'
tags = ['leomo']
plugins {
gradle {
id = 'de.lemona.gradle'
displayName = 'Lemonade Gradle plugin'
displayName = 'LEOMO Gradle plugin'
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
group = de.lemona
version = 0.2
version = 0.3
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class GradlePlugin implements Plugin<Project> {

// Trigger actions on our plugins
plugins.withId('java') { project.apply plugin: 'de.lemona.gradle.java' }
plugins.withId('java-library') { project.apply plugin: 'de.lemona.gradle.java' }
plugins.withId('maven-publish') { project.apply plugin: 'de.lemona.gradle.publish' }

plugins.withId('com.android.application') {
Expand Down
143 changes: 26 additions & 117 deletions src/main/groovy/de/lemona/gradle/plugins/PublishPlugin.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package de.lemona.gradle.plugins

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact
import org.gradle.api.internal.java.JavaLibrary
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.bundling.Jar

Expand Down Expand Up @@ -63,76 +61,22 @@ class PublishPlugin implements Plugin<Project> {
/* ================================================================== */

plugins.withId('com.android.library') {

// By default we publish the "release" variant
def _variant = Utilities.resolveValue(project, 'publishVariant', 'PUBLISH_VARIANT', 'release')
def _variantName = _variant.capitalize()

// Process all the library variants
android.libraryVariants.all { variant ->
if (variant.name != _variant) {
logger.info('Skipping publishing of "{}" variant', variant.name)
return;
}

// Sources JAR for publishing
def _publishSourcesJar = task([type: Jar], 'publish' + _variantName + 'SourcesJar') {
classifier = 'sources'
from android.sourceSets.main.javaDirectories
from android.sourceSets.main.resourcesDirectories
}

def _jarTaskName = 'package' + _variantName + 'Jar'
if (tasks.findByName(_jarTaskName) == null) {
println 'No Jar task found, creating one: ' + _jarTaskName
task([type: Jar], _jarTaskName) {
dependsOn variant.javaCompiler
from variant.javaCompiler.destinationDir
exclude '**/R.class', '**/R$*.class', '**/R.html', '**/R.*.html'
}
}

// Prepare our publication artifact (from the AAR)
def _packageTask = tasks[_jarTaskName]
def _artifact = new ArchivePublishArtifact(_packageTask);
def _dependencies = configurations.compile.dependencies
def _component = new JavaLibrary(_artifact, _dependencies);

// Also get the AAR itself, to publish alongside
def _bundleTask = tasks['bundle' + _variantName + 'Aar']

// Publish in our maven repository
def _versionCode = version.versionCode
publishing.publications.create(_variant, MavenPublication) {
from _component
artifact _bundleTask
artifact _publishSourcesJar
pom {
packaging = 'jar'
withXml {
asNode().appendNode('properties')
.appendNode('versionCode', _versionCode)
// cf. https://developer.android.com/studio/build/maven-publish-plugin
afterEvaluate {
publishing {
publications {
def _group = group
def _name = name
def _version = version
release(MavenPublication) {
from components.release

groupId = _group
artifactId = _name
version = _version
}
}
}

// The "javadocVariantName" task might not be here quite just yet
tasks.all { _javadocTask ->
// Ignore if not named "javadocVariantName"
if (_javadocTask.name != 'javadoc' + _variantName) return

// Create a "publishVariantNameJavadocJar" task from the _javadocTask
def _publishJavadocJar = task([type: Jar], 'publish' + _variantName + 'JavadocJar') {
dependsOn _javadocTask
classifier = 'javadoc'
from _javadocTask.destinationDir
}

// Add the Javadoc JAR artifact to our publication
publishing.publications.getByName(_variant) { publication ->
publication.artifact _publishJavadocJar
}
}
}
}

Expand All @@ -141,48 +85,19 @@ class PublishPlugin implements Plugin<Project> {
/* ================================================================== */

plugins.withId('com.android.application') {

// By default we publish the "release" variant
def _variant = Utilities.resolveValue(project, 'publishVariant', 'PUBLISH_VARIANT', 'release')
def _variantName = _variant.capitalize()

// Process all the application variants
android.applicationVariants.all { variant ->
if (variant.name != _variant) {
logger.info('Skipping publishing of "{}" variant', variant.name)
return;
}

// The package task (creates APK) and version code
def _packageTask = tasks['package' + _variantName]
def _versionCode = version.versionCode

// Make sure we *depend* on the package task
tasks['publish'].dependsOn _packageTask

// Create our APK publication
publishing.publications.create(_variant, MavenPublication) {
_packageTask.outputs.files.each {
logger.debug("debugInfo: output files {}", it.toString())
def files = it.listFiles(new FileFilter() {
@Override
boolean accept(File file) {
if (file.name.endsWith(".apk") && file.name.contains(_variant)) {
return true;
}
return false
}
})
if (files != null && files.length > 0) {
File apk = files[0]
artifact apk.absolutePath
pom {
packaging = 'apk'
withXml {
asNode().appendNode('properties')
.appendNode('versionCode', _versionCode)
}
}
// cf. https://developer.android.com/studio/build/maven-publish-plugin
afterEvaluate {
publishing {
publications {
def _group = group
def _name = name
def _version = version
release(MavenPublication) {
from components.release_apk

groupId = _group
artifactId = _name
version = _version
}
}
}
Expand All @@ -191,10 +106,4 @@ class PublishPlugin implements Plugin<Project> {
}
}
}

def canBeResolved(configuration) {
// isCanBeResolved() was introduced with Gradle 3.3 so check for its existence first
configuration.metaClass.respondsTo(configuration, "isCanBeResolved") ?
configuration.isCanBeResolved() : true
}
}
10 changes: 10 additions & 0 deletions updating.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Updating individual projects

## Version 0.3.0
0.3.0 supports Gradle 5.
You can use the latest (as 2020) Android gradle plugin in dependent Android projects.
However, the publishing plugin doesn't have a backward compatibility for Android projects.
So, please update the followings:

* Gradle -> 5.6.4
* Android Plugin -> 3.6.0
* Android Build Tools -> 28.0.3 or later

## Version 0.1.0

The 0.1.0 version of this plugin is fully backward compatible. Simply bumping its version in dependent projects will have no side effects.
Expand Down

0 comments on commit e95f0de

Please sign in to comment.