Skip to content

Commit

Permalink
compile only agp (#184)
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredsburrows committed Apr 11, 2022
1 parent 6ae74a2 commit 12dc3a8
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 64 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Also, for Android projects the license HTML file will be copied to `<project>/sr
buildscript {
repositories {
mavenCentral()
google()
google() // For Android projects
}
dependencies {
Expand All @@ -37,7 +37,7 @@ Release versions are available in the [Sonatype's release repository](https://re
buildscript {
repositories {
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
google()
google() // For Android projects
}
dependencies {
Expand Down
9 changes: 6 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,20 +47,23 @@ task createClasspathManifest() {
outputDir.mkdirs()
// Combine both main and test plugin classpaths
file("$outputDir/plugin-classpath.txt").text = sourceSets.main.runtimeClasspath.join('\n') +
'\n' +
sourceSets.test.runtimeClasspath.join('\n')
'\n' + sourceSets.test.runtimeClasspath.join('\n')
}
}

dependencies {
compileOnly gradleApi()
compileOnly deps.android.tools.build.gradle

implementation deps.kotlin.stdlib.jdk
implementation deps.kotlinx.html
implementation deps.gson
implementation deps.android.tools.build.gradle

testRuntimeOnly files(createClasspathManifest)
testRuntimeOnly deps.android.tools.build.gradle

testImplementation localGroovy()
testImplementation gradleTestKit()
testImplementation deps.spock, { exclude module: 'groovy-all' } // Use localGroovy()
testImplementation deps.xmlunit.matchers
testImplementation deps.commons.csv
Expand Down
64 changes: 5 additions & 59 deletions src/main/kotlin/com/jaredsburrows/license/LicensePlugin.kt
Original file line number Diff line number Diff line change
@@ -1,73 +1,19 @@
package com.jaredsburrows.license

import com.android.build.gradle.AppExtension
import com.android.build.gradle.AppPlugin
import com.android.build.gradle.BaseExtension
import com.android.build.gradle.FeatureExtension
import com.android.build.gradle.FeaturePlugin
import com.android.build.gradle.LibraryExtension
import com.android.build.gradle.LibraryPlugin
import com.android.build.gradle.api.BaseVariant
import org.gradle.api.DomainObjectSet
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPlugin
import java.util.Locale

/** A [Plugin] which grabs the POM.xml files from maven dependencies. */
class LicensePlugin : Plugin<Project> {
override fun apply(project: Project) {
project.extensions.add("licenseReport", LicenseReportExtension::class.java)

project.plugins.all {
when (it) {
is JavaPlugin -> project.configureJavaProject()
is FeaturePlugin -> {
project.extensions.getByType(FeatureExtension::class.java).run {
project.configureAndroidProject(featureVariants)
project.configureAndroidProject(libraryVariants)
}
}
is LibraryPlugin -> {
project.extensions.getByType(LibraryExtension::class.java).run {
project.configureAndroidProject(libraryVariants)
}
}
is AppPlugin -> {
project.extensions.getByType(AppExtension::class.java).run {
project.configureAndroidProject(applicationVariants)
}
}
project.afterEvaluate {
when {
project.isAndroidProject() -> project.configureAndroidProject()
project.isJavaProject() -> project.configureJavaProject()
else -> throw UnsupportedOperationException("'com.jaredsburrows.license' requires Java or Android Gradle Plugins.")
}
}
}
}

/** Configure for Java projects. */
private fun Project.configureJavaProject() {
tasks.register("licenseReport", LicenseReportTask::class.java)
}

/** Configure for Android projects. */
private fun Project.configureAndroidProject(variants: DomainObjectSet<out BaseVariant>? = null) {
// Configure tasks for all variants
variants?.all { variant ->
val name = variant.name.replaceFirstChar {
if (it.isLowerCase()) {
it.titlecase(Locale.getDefault())
} else {
it.toString()
}
}

tasks.register("license${name}Report", LicenseReportTask::class.java) {
it.assetDirs = (extensions.getByName("android") as BaseExtension)
.sourceSets
.getByName("main")
.assets
.srcDirs
.toList()
it.variantName = variant.name
}
}
}
71 changes: 71 additions & 0 deletions src/main/kotlin/com/jaredsburrows/license/projectAndroid.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.jaredsburrows.license

import com.android.build.gradle.AppExtension
import com.android.build.gradle.AppPlugin
import com.android.build.gradle.BaseExtension
import com.android.build.gradle.FeatureExtension
import com.android.build.gradle.FeaturePlugin
import com.android.build.gradle.LibraryExtension
import com.android.build.gradle.LibraryPlugin
import com.android.build.gradle.api.BaseVariant
import org.gradle.api.DomainObjectSet
import org.gradle.api.Project
import java.util.Locale

/** Returns true if Android Gradle project */
internal fun Project.isAndroidProject(): Boolean {
return project.plugins.hasPlugin("android")
}

/**
* Configure for Android projects.
*
* AppPlugin - "android", "com.android.application"
* FeaturePlugin - "com.android.feature"
* LibraryPlugin - "android-library", "com.android.library"
*/
internal fun Project.configureAndroidProject() {
project.plugins.all {
when (it) {
is AppPlugin -> {
project.extensions.getByType(AppExtension::class.java).run {
configureVariant(applicationVariants)
}
}
is FeaturePlugin -> {
project.extensions.getByType(FeatureExtension::class.java).run {
configureVariant(featureVariants)
configureVariant(libraryVariants)
}
}
is LibraryPlugin -> {
project.extensions.getByType(LibraryExtension::class.java).run {
configureVariant(libraryVariants)
}
}
}
}
}

private fun Project.configureVariant(variants: DomainObjectSet<out BaseVariant>? = null) {
// Configure tasks for all variants
variants?.all { variant ->
val name = variant.name.replaceFirstChar {
if (it.isLowerCase()) {
it.titlecase(Locale.getDefault())
} else {
it.toString()
}
}

tasks.register("license${name}Report", LicenseReportTask::class.java) {
it.assetDirs = (extensions.getByName("android") as BaseExtension)
.sourceSets
.getByName("main")
.assets
.srcDirs
.toList()
it.variantName = variant.name
}
}
}
18 changes: 18 additions & 0 deletions src/main/kotlin/com/jaredsburrows/license/projectJava.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.jaredsburrows.license

import org.gradle.api.Project

/** Returns true if Java Gradle project */
internal fun Project.isJavaProject(): Boolean {
return project.plugins.hasPlugin("java")
}

/**
* Configure for Java projects.
*
* JavaPlugin - "java" - also applies JavaBasePlugin
* JavaLibraryPlugin - "java-library" - also applies JavaPlugin
*/
internal fun Project.configureJavaProject() {
tasks.register("licenseReport", LicenseReportTask::class.java)
}

0 comments on commit 12dc3a8

Please sign in to comment.