gradle-retrolambda

A gradle plugin for getting java lambda support in java 6, 7 and android

Subscribe to updates I use gradle-retrolambda


Statistics on gradle-retrolambda

Number of watchers on Github 5227
Number of open issues 69
Average time to close an issue 16 days
Main language Groovy
Average time to merge a PR 2 days
Open pull requests 6+
Closed pull requests 16+
Last commit about 1 year ago
Repo Created about 5 years ago
Repo Last Updated 6 months ago
Size 547 KB
Organization / Authorevant
Latest Releasev3.7.0
Contributors13
Page Updated
Do you use gradle-retrolambda? Leave a review!
View open issues (69)
View gradle-retrolambda activity
View on github
Latest Open Source Launches
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating gradle-retrolambda for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

Gradle Retrolambda Plugin

Maven Central

This plugin will automatically build your java or android project with retrolambda, giving you lambda goodness on java 6 or 7. It relies on the wonderful retrolambda by Esko Luontola.

Note: The minimum android gradle plugin is 1.5.0 and the minimum gradle plugin is 2.5.

Usage

  1. Download jdk8 and set it as your default.

  2. Add the following to your build.gradle

   buildscript {
      repositories {
         mavenCentral()
      }

      dependencies {
         classpath 'me.tatarka:gradle-retrolambda:3.7.0'
      }
   }

   // Required because retrolambda is on maven central
   repositories {
      mavenCentral()
   }

   apply plugin: 'com.android.application' //or apply plugin: 'java'
   apply plugin: 'me.tatarka.retrolambda'

alternatively, you can use the new plugin syntax for gradle 2.1+

   plugins {
      id "me.tatarka.retrolambda" version "3.7.0"
   }
  1. There is no step three!

The plugin will compile the source code with java8 and then replace the class files with the output of retrolambda.

Configuration

You can add a block like the following to configure the plugin:

retrolambda {
  javaVersion JavaVersion.VERSION_1_6
  jvmArgs '-arg1', '-arg2'
  defaultMethods false
  incremental true
}
  • javaVersion Set the java version to compile to. The default is 6. Only 5, 6 or 7 are accepted.
  • include 'Debug', 'Release' Sets which sets/variants to run through retrolambda. The default is all of them.
  • exclude 'Test' Sets which sets/variants to not run through retrolambda. Only one of either include or exclude should be defined.
  • jvmArgs Add additional jvm args when running retrolambda.
  • defaultMethods Turn on default and static methods in interfaces support. Note: due to a limitation in retrolamba, this will set incremental to false. The default is false.
  • incremental Setting this to false forces all of your class files to be run through retrolambda instead of only the ones that have changed. The default is true.

Using a Different Version of the retrolambda.jar

The default version of retrolambda used is 'net.orfjackal.retrolambda:retrolambda:2.5.1'. If you want to use a different one, you can configure it in your dependencies.

dependencies {
  // Latest one on maven central
  retrolambdaConfig 'net.orfjackal.retrolambda:retrolambda:+'
  // Or a local version
  // retrolambdaConfig files('libs/retrolambda.jar')
}

Deprecated Features

If you are running with java 6 or 7 you should really consider updating. However, you may use the below configuration instead.

Set the environment variable JAVA8_HOME to point to the java 8 jdk. Alternatively, you can set the jdk property.

retrolambda {
  jdk System.getenv("JAVA8_HOME")
}

You can force unit tests to be run with an older version of java by setting JAVA5_HOME/JAVA6_HOME/JAVA7_HOME or with the oldJdk property.

retrolambda {
  oldJdk System.getenv("JAVA6_HOME")
}

Android Studio Setup

Add these lines to your build.gradle to inform the IDE of the language level.

android {
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Proguard

This plugin is fully compatible with proguard (since v2.4.0). In your proguard file, add

-dontwarn java.lang.invoke.*
-dontwarn **$$Lambda$*

Known Issues

Lint fails on java files that have lambdas.

First try updating to the latest version of the android gradle plugin. Newer versions of lint are compatible with java 8 sources. If you can't for some reason, you can still use the experimental fork to fix the issue.

Using Google Play Services causes retrolambda to fail

Version 5.0.77 contains bytecode that is incompatible with retrolambda. This should be fixed in newer versions of play services, if you can update, that should be the preferred solution. To work around this issue, you can either use an earlier version like 4.4.52 or add -noverify to the jvm args. See orfjackal/retrolambda#25 for more information.

retrolambda {
  jvmArgs '-noverify'
}

Updates

All updates have moved to the CHANGELOG.

License

Copyright 2013 Evan Tatarka

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
gradle-retrolambda open issues Ask a question     (View All Issues)
  • almost 2 years Error with explicit generic casts
  • almost 2 years Robolectric-shadow-based unit tests are failing on 2.3.0
  • almost 2 years Unclear usage description
  • about 2 years Retrolambda plugin 3.3.0 doesn't strip calls to addSuppressed when using try-with-resources
  • about 2 years Error opening zip file or JAR manifest missing
  • about 2 years Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > java.lang.NoSuchFieldError: METHOD
  • about 2 years android throws java.lang.VerifyError when invoking a default method on API 16
  • about 2 years cannot find java.lang.invoke.MethodType
  • about 2 years Some Suggestion about ReadMe
  • over 2 years Compilation error
  • over 2 years Add date of each release in ChangeLog
  • over 2 years Compilation failed due to missing META-INF
  • over 2 years app:transformClassesWithRetrolambdaForDebug error
  • over 2 years Groovy: directory not found: []app/build/generated/source/apt/test/debug
  • over 2 years Beta version - Error:When running gradle with java 5, 6 or 7
  • over 2 years Could not resolve net.orfijacal.retrolambda:
  • over 2 years Can't execute 'run' task with retrolambda
  • over 2 years how to configure the plugin to apply on a specific directory of classes?
  • over 2 years NoClassDefFoundError for shadow dependency
  • over 2 years how to solve this
  • over 2 years Build fails when running connected android tests
  • over 2 years RetroLambda breaks android:onClick in layout XML files
  • over 2 years Supporting Gradle Experimental Plugin
  • over 2 years Additional info for MacOS users
  • over 2 years Sometimes inner class for lambda is not generated
  • over 2 years Sometimes ClassNotFound exception: android.support.v4.app.Fragment
  • over 2 years Check if jdk is installed
  • over 2 years Error using frameworks compiled with Java 8 to test pure java projects
  • almost 3 years Execution failed for task ':wear:compileRetrolambdaDebug' finished with non-zero exit value 1
  • almost 3 years Problem compiling APK
gradle-retrolambda open pull requests (View All Pulls)
  • Upgrade default retrolambda version to 2.3.0
  • Use the _dirName_ of a variant as the id of a JavaCompile task.
  • Add flavors to sample app to make android (connected) tests fail
  • Added support for new “quiet” config parameter introduced in Retrolambda 2.4.0
  • Reenable extractAnnotations task
  • Clarify docs
gradle-retrolambda questions on Stackoverflow (View All Questions)
  • Android, Gradle : RetroLambda not working
  • Failed to use gradle--retrolambda build project in OSX
  • Gradle + Retrolambda: Fatal Error: Unable to find package java.lang in classpath or bootclasspath
gradle-retrolambda list of languages used
gradle-retrolambda latest release notes
  • Support android gradle plugin 3.0
  • Support android feature modules
  • Support Android Gradle Plugin 2.5
  • Deprecated oldJdk (and reading from JAVA6/JAVA7_HOME).
  • Deprecated running gradle with java 6 or 7.
  • Fixed incremental build sometimes leaving deleted classes (madisp)
  • No longer fail if old jdk is not defined. Instead run with the current jdk.
  • Bumped default retrolambda version to 2.5.1
Other projects in Groovy