2015-03-26 4 views
2

Я хочу интегрировать в проект Android на Gradle следующие библиотеки:Gradle + RoboBinding с AspectJ + Ломбок не совместимы друг с другом

  • Ломбок
  • RoboBinding с AspectJ
  • Dagger

В чтобы использовать RoboBinding с AspectJ и инструментами для Android 1.1.0 Я скомпилировал aspectj-plugin с этим fix.

Все библиотеки используют некоторую обработку аннотации времени компиляции. Я обнаружил, что Ломбок не совместим с AspectJ. Я заметил, что обработчик аннотаций от RoboBinding использует apt, тогда как ломбок работает только с предоставленным (Кинжал работает с обоими).

Я нашел также Lombok and AspectJ workaurond для Maven, но я не знаю, можно ли это использовать с Gradle (если да, я не знаю, как это сделать).

Без проекта Lombok компилируется и работает. Можете ли вы помочь с интеграцией Lombok и AspectJ с Gradle?

Ошибка:

Note: Start RoboBinding annotations processing... 
Note: Start RoboBinding annotations processing... 
Note: Start RoboBinding annotations processing... 
Note: Start RoboBinding annotations processing... 
:app:compileDebugAspectJ 
warning You aren't using a compiler supported by lombok, so lombok will not work and has been disabled. 
Your processor is: org.aspectj.org.eclipse.jdt.internal.compiler.apt.dispatch.BatchProcessingEnvImpl 
Lombok supports: sun/apple javac 1.6, ECJ 
error at model.setOutput(model.getInput()); 

D:\Projects\BinderExample\app\src\main\java\foo\binderexample\MainActivity.java:32:0::0 The method getInput() is undefined for the type BinderModel 
Error:Note: Start RoboBinding annotations processing... 
Note: Start RoboBinding annotations processing... 
Note: Start RoboBinding annotations processing... 
Note: Start RoboBinding annotations processing... 
error at model.setOutput(model.getInput()); 

D:\Projects\BinderExample\app\src\main\foo\binderexample\MainActivity.java:32:0::0 The method getInput() is undefined for the type BinderModel 
FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':app:compileDebugAspectJ'. 
> The method getInput() is undefined for the type BinderModel 

Модуль:

@Module(injects = MainActivity.class) 
public class BinderModule { 

    @Provides 
    @Singleton 
    BinderModel provideBinderModel() { 
     return new BinderModel(); 
    } 
} 

Модель:

@Data 
@PresentationModel 
public class BinderModel implements HasPresentationModelChangeSupport { 

    private final PresentationModelChangeSupport changeSupport = new PresentationModelChangeSupport(this); 

    private String input; 
    private String output; 

    @Override 
    public PresentationModelChangeSupport getPresentationModelChangeSupport() { 
     return changeSupport; 
    } 
} 

Активность:

public class MainActivity extends Activity { 

    @Inject 
    BinderModel model; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ObjectGraph.create(new BinderModule()).inject(this); 
     View view = Binders.inflateAndBind(this, R.layout.activity_main, model); 
     setContentView(view); 
     ButterKnife.inject(this); 
    } 

    @OnClick(R.id.button) 
    void onButtonClick() { 
     model.setOutput(model.getInput()); 
    } 
} 

Планировка:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:bind="http://robobinding.org/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 

    <EditText 
     android:id="@+id/editText" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:inputType="text" 
     bind:text="${input}"/> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="@string/button"/> 

    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     bind:text="{output}"/> 

</LinearLayout> 

Gradle сценарий:

buildscript { 
    repositories { 
     jcenter() 
     mavenLocal() 
    } 

    dependencies { 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' 
     classpath 'org.robobinding:aspectj-plugin:0.8.3-fix' 
    } 
} 

apply plugin: 'com.android.application' 
apply plugin: 'org.robobinding.android-aspectj' 
apply plugin: 'com.neenbedankt.android-apt' 

android { 
    compileSdkVersion 21 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
     applicationId "foo.binderexample" 
     minSdkVersion 15 
     targetSdkVersion 21 
     versionCode 1 
     versionName "1.0" 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:22.0.0' 

    compile 'com.jakewharton:butterknife:6.1.0' 

    //dagger 
    compile 'com.squareup.dagger:dagger:1.2.2' 
    apt 'com.squareup.dagger:dagger-compiler:1.2.2' 

    //lombok 
    provided 'org.projectlombok:lombok:1.16.2' 
    apt 'org.projectlombok:lombok:1.16.2' 

    //robobinding 
    compile('org.robobinding:robobinding:0.8.9:with-aop-and-dependencies') { 
     exclude group: 'com.google.guava', module: 'guava' 
    } 
    aspectPath('org.robobinding:robobinding:0.8.9:with-aop-and-dependencies') { 
     exclude group: 'com.google.guava', module: 'guava' 
    } 
    apt 'org.robobinding:codegen:0.8.9' 
} 

ответ

1

Если вы хотите узнать больше о ситуации Ломбок в сочетании с AspectJ, пожалуйста, прочтите my other answer, а также следуйте по ссылкам.

Смежные вопросы