Как использовать плагин lombok в Android Studio?
Я установил Ломбок С -1—>’Плагин’, но он не работает, когда я пытаюсь создать Getter & Setter. Мой код не распознает его.
есть ли у кого-нибудь идея, как настроить Ломбок и использовать его для создания аннотации getter & setter?
4 ответов
вам нужно не только установить Lombok Plugin , но также добавьте зависимость к build.gradle as provided :
в официальных документах есть раздел, связанный с этим:https://projectlombok.org/setup/android
следуйте предыдущим инструкциям (Gradle). В дополнение к правильной настройке вашего проекта gradle вам нужно добавить плагин Lombok IntelliJ, чтобы добавить поддержку lombok в Android Studio:
перейти в Файл > Настройки > Плагины Нажмите на обзор репозиториев. Поиск плагина Lombok Нажмите на установить плагин Перезапустить Android Studio Изменение приложения зависимости блок:
вы можете использовать этот
есть так много сообщений на эту тему его недоумение. Я на следующий:
И вырвав большую часть моих волос, пытаясь понять что, черт возьми, происходит с Gradle верхнего уровня и уровня проекта, Единственная комбинация, которая сработала для меня, это:
implementation ‘org.projectlombok:lombok:1.18.0’ annotationProcessor ‘org.projectlombok:lombok:1.18.0’
classpath ‘org.projectlombok:lombok:1.18.0’ И вот доказательство:—21—>
Мой Бог это действительно так сложно сделать что-то такое простое.
Источник
richardleggett / README.md
What does Lombok do?
In this example I just use the @Data annotation to generate getters/setters, toString() and hashCode() — in reality you may want to use the @Getter annotation and others to exact a more fine grained control (or to generate immutable classes with @Value ).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
buildscript < |
repositories < |
mavenCentral() |
> |
> |
apply plugin : ‘ com.android.application ‘ |
android < |
compileSdkVersion 25 |
buildToolsVersion » 24.0.2 « |
defaultConfig < |
applicationId » com.myapp « |
minSdkVersion 19 |
targetSdkVersion 25 |
versionCode 1 |
versionName » 0.1 « |
jackOptions < |
enabled true |
> |
testInstrumentationRunner » android.support.test.runner.AndroidJUnitRunner « |
> |
compileOptions < |
sourceCompatibility JavaVersion . VERSION_1_8 |
targetCompatibility JavaVersion . VERSION_1_8 |
> |
buildTypes < |
release < |
minifyEnabled false |
proguardFiles getDefaultProguardFile( ‘ proguard-android.txt ‘ ), ‘ proguard-rules.pro ‘ |
> |
> |
productFlavors < |
dev < |
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin |
// to pre-dex each module and produce an APK that can be tested on |
// Android Lollipop without time consuming dex merging processes. |
minSdkVersion 21 |
applicationIdSuffix » .dev « |
> |
staging < |
// staging utilizes minSDKVersion = 21 to allow the Android gradle plugin |
// to pre-dex each module and produce an APK that can be tested on |
// Android Lollipop without time consuming dex merging processes. |
minSdkVersion 21 |
applicationIdSuffix » .staging « |
> |
production < |
minSdkVersion 15 |
> |
> |
packagingOptions < |
exclude ‘ LICENSE.txt ‘ |
> |
> |
dependencies < |
compile fileTree( include : [ ‘ *.jar ‘ ], dir : ‘ libs ‘ ) |
// Testing framework |
testCompile ‘ junit:junit:4.12 ‘ |
androidTestCompile( ‘ com.android.support.test.espresso:espresso-core:2.2.2 ‘ , < |
exclude group : ‘ com.android.support ‘ , module : ‘ support-annotations ‘ |
>) |
testCompile ‘ org.mockito:mockito-core:2.2.8 ‘ |
androidTestCompile ‘ org.mockito:mockito-core:2.2.8 ‘ |
// Dagger dependency injection library |
provided ‘ javax.annotation:jsr250-api:1.0 ‘ |
compile ‘ com.google.dagger:dagger:2.7 ‘ |
annotationProcessor » com.google.dagger:dagger-compiler:2.7 « |
// Support libraries |
compile ‘ com.android.support:appcompat-v7:25.0.0 ‘ |
compile ‘ com.android.support.constraint:constraint-layout:1.0.0-alpha4 ‘ |
// Retrofit and OKHTTP |
compile ‘ com.squareup.retrofit2:retrofit:2.1.0 ‘ |
compile ‘ com.squareup.retrofit2:converter-gson:2.1.0 ‘ |
compile ‘ com.squareup.retrofit2:converter-scalars:2.1.0 ‘ |
compile ‘ com.squareup.retrofit2:adapter-rxjava:2.1.0 ‘ |
compile ‘ com.squareup.okhttp3:okhttp:3.3.0 ‘ |
compile ‘ com.squareup.okhttp3:logging-interceptor:3.3.0 ‘ |
// RxJava |
compile ‘ io.reactivex:rxjava:1.0 ‘ |
// Jodatime |
compile ‘ joda-time:joda-time:2.9.3 ‘ |
// Lombok |
provided ‘ org.projectlombok:lombok:1.16.10 ‘ |
> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
// Top-level build file where you can add configuration options common to all sub-projects/modules. |
buildscript < |
repositories < |
jcenter() |
mavenCentral() |
> |
dependencies < |
classpath ‘ com.android.tools.build:gradle:2.2.2 ‘ |
// NOTE: Do not place your application dependencies here; they belong |
// in the individual module build.gradle files |
> |
> |
allprojects < |
repositories < |
jcenter() |
> |
> |
task clean ( type : Delete ) < |
delete rootProject . buildDir |
> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
package com.myapp ; |
import com.google.gson.annotations.SerializedName ; |
import org.joda.time.DateTime ; |
import lombok.Data ; |
/** |
* Base for all entities the API returns |
*/ |
@Data |
public abstract class BaseModel < |
@SerializedName ( » id » ) |
String id = null ; |
@SerializedName ( » createdAt » ) |
DateTime createdAt = null ; |
@SerializedName ( » updatedAt » ) |
DateTime updatedAt = null ; |
@SerializedName ( » modelType » ) |
String modelType = null ; |
> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
package com.myapp ; |
import com.google.gson.annotations.SerializedName ; |
import lombok.Data ; |
import lombok.EqualsAndHashCode ; |
/** |
* Some child model class |
*/ |
@Data |
@EqualsAndHashCode ( callSuper = true ) |
public class SampleModel extends BaseModel < |
@SerializedName ( » aField » ) |
private String aField = null ; |
> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
package com.myapp.test ; |
import com.myapp.api.model.SampleModel ; |
import com.myapp.api.model.BaseModel ; |
import org.joda.time.DateTime ; |
import org.junit.Test ; |
import static junit.framework.Assert.assertEquals ; |
/** |
* Tests that Lombok is correctly generating our model class methods |
*/ |
public class LombokDomainModelTest < |
@Test |
public void sampleModelHasBaseModelFields () < |
DateTime now = DateTime . now(); |
SampleModel model = new SampleModel (); |
model . setCreatedAt(now); |
assertEquals(now, model . getCreatedAt()); |
> |
@Test |
public void identicalSampleModelsHaveEquality () < |
DateTime now = DateTime . now(); |
SampleModel model = new SampleModel (); |
model . setCreatedAt(now); |
SampleModel model2 = new SampleModel (); |
model2 . setCreatedAt(now); |
assertEquals(model, model2); |
> |
> |
This comment has been minimized.
Copy link Quote reply
Toilal commented Sep 11, 2017 •
Have you tried using @Builder annotation ? It seems to fail compiling, with Error:(xxx, xxx) Gradle: The method builder() is undefined for the type xxxxxxxxxxxxxxxx
Источник
Шпаргалки Java программиста 10: Lombok
Lombok — проект по добавлению дополнительной функциональности в Java c помощью изменения исходного кода перед Java компиляцией.
По сути, проект Lombok позволяет избавиться от многословности Java в большинстве случаев и перестать писать огромные простыни кода из гетеров, сеттеров, equals, hashcode и toString (да их обычно генерит IDE, но читать и менять все равно приходится программисту), в результате Java становиться почти такой же краткой как Kotlin, Scala или C#.
Что особенно радует, Lombok очень прост и легок в добавлении к вашему проекту. Если вам, как и мне, нравится принцип KISS, то советую посмотреть на Lombok.
Так же рекомендую, посмотреть на другие статьи цикла, например последную шпаргалку по Java SE8
Добавление в проекты очень простое, достаточно добавить обычные зависимости:
Так же можно (но не обязательно добавить плагин для работы статических компиляторов, если нужно анализировать код после компиляции Lombok), см. тут
Так же есть плагины для Idea, Eclipse и т.п. Если вы собираете Gradle или Maven, то собираться будет и без этих плагинов, но будут Idea/Eclipse возможно будут показывать ошибки при анализе кода.
Название | Описание | Пример Lombok | Пример обычной Java |
---|---|---|---|
@NonNull | обработка переменных, которые не должны получать null | ||
@Getter / @Setter | легкое создание getter’ов и setter’ов | ||
@ToString | определение аннотации перед классом, для реализации стандартного toString метода | ||
@EqualsAndHashCode | легкое создание методов Equals и HashCode | ||
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor | создания пустого конструктора, конструктора включающего все final поля, либо конструктора включающего все возможные поля | ||
@Data | генерация всех служебных методов, заменяет сразу команды @ToString, @EqualsAndHashCode, Getter, Setter, @RequiredArgsConstructor | ||
@Value | создание неизменяемых классов, аналог Data, но для неизменяемых классов | ||
@Builder | реализация паттерна bulder, Singular – используется для объектов в единственном экземпляре (добавления элемента в коллекции и т.п.) | ||
@SneakyThrows | обертка проверяемых исключений | @SneakyThrows( UnsupportedEncodingException.class) public String utf8ToString(byte[] bytes) < return new String(bytes, «UTF-8»); > | |
@Synchronized | простое создание synchronized блоков | ||
@Log | добавление инницилизации логирования, так же позволяет выбрать вид логгера: @CommonsLog, @JBossLog, Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j | ||
Val | простое создание финальной переменной с выводом типа, то есть то самый val о котором спорили | ||
@Cleanup | простое определение ресурсов, так чтобы они автоматически закрывались после окончания работы кода. (не так актуально при использовании try with resources ) |
Название: @NonNull
Описание: обработка переменных,
которые не должны получать null
Код Lombok:
Код обычной Java:
Название: Getter /
Setter
Описание: легкое создание getter’ов и
setter’ов
Код Lombok:
Код обычной Java:
Название: @ToString
Описание: определение аннотации перед классом,
для реализации стандартного toString метода
Код Lombok:
Код обычной Java:
Название: @EqualsAndHashCode
Описание: легкое создание методов Equals и HashCode
Код Lombok:
Код обычной Java:
Название:
@NoArgsConstructor,
@RequiredArgsConstructor,
@AllArgsConstructor
Описание: создания пустого конструктора,
конструктора включающего все final поля,
либо конструктора включающего все возможные поля
Код Lombok:
Код обычной Java:
Название: Data
Описание: генерация всех служебных методов,
заменяет сразу команды @ToString, @EqualsAndHashCode,
Getter, Setter, @RequiredArgsConstructor
Код Lombok:
Название: Value
Описание: создание неизменяемых классов,
аналог Data, но для неизменяемых классов
Код Lombok:
Название: Builder
Описание: реализация паттерна bulder,
Singular – используется для объектов в
единственном экземпляре (добавления элемента
в коллекции и т.п.)
Код Lombok:
Название: @SneakyThrows
Описание: обертка проверяемых исключений
Код Lombok:
@SneakyThrows(
UnsupportedEncodingException.class)
public String utf8ToString(byte[] bytes) <
return new String(bytes, «UTF-8»);
>
Название: @Synchronized
Описание: простое создание synchronized блоков
Код Lombok:
Название: Log
Описание: добавление инницилизации логирования,
так же позволяет выбрать вид логгера: @CommonsLog,
@JBossLog, Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j
Код Lombok:
Код обычной Java:
переменной с выводом типа,
то есть то самый val о котором
спорили
Название: @Cleanup
Описание: простое определение ресурсов,
так чтобы они автоматически закрывались
после окончания работы кода.
(не так актуально при использовании
try with resources )
Код Lombok:
Код обычной Java:
Источник