2015-07-28 25 views
12

Tôi đang thử nghiệm Dagger 2 với Kotlin trong một dự án Android. Tôi lấy cảm hứng từ repo Android Clean Architecture. Tôi có hai mô-đun trong xây dựng gradle của tôi, một là "ứng dụng" và một là "mô-đun". Mô-đun chứa một mô hình cuộc gọi cấp lớp. Trong mô-đun gradle ứng dụng của tôi, tôi đã tạo ra một mô-đun dagger được gọi là "DaggerModule" với một nhà cung cấp Mô hình. Khi tôi cố gắng xây dựng dự án, tôi nhận được lỗi biên dịch:Tham chiếu chưa được giải quyết dagger 2 + kotlin + android gradle

DaggerModule.kt: (3, 57): Unresolved reference: Model 
DaggerModule.kt: (9, 34): Unresolved reference: Model 
DaggerModule.kt: (9, 42): Unresolved reference: Model 

Khi tôi cố gắng di chuyển các lớp mẫu từ "module" module bên trong "ứng dụng" mô-đun tất cả mọi thứ biên dịch w/o lỗi. Cố gắng tìm ra nếu tôi đang làm điều gì đó ngu ngốc, hoặc nếu tôi nên gửi một lỗi ở đâu đó.

Để tham khảo ở đây các đoạn của các tập tin có vấn đề:

---- 
app/build.gradle 

buildscript { 
    repositories { 
     jcenter() 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.2.3' 
     classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:0.12.1218' 
    } 
} 
apply plugin: 'com.android.application' 
apply plugin: 'kotlin-android' 

repositories { 
    jcenter() 
    mavenCentral() 
} 

android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 

    defaultConfig { 
     applicationId "com.github.app.kotlin_unresolved_reference.app" 
     minSdkVersion 15 
     targetSdkVersion 22 
     versionCode 1 
     versionName "1.0" 
    } 

    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_6 
     targetCompatibility JavaVersion.VERSION_1_6 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 

    compile project(':module') 
    compile 'com.android.support:appcompat-v7:22.2.1' 

    kapt "com.google.dagger:dagger-compiler:2.0.1" 
    compile "com.google.dagger:dagger:2.0.1" 
    compile "javax.annotation:javax.annotation-api:1.2" 
    compile "org.jetbrains.kotlin:kotlin-stdlib:0.12.1218" 
} 


--- 
module/build.gradle 

apply plugin: 'java' 

//noinspection GroovyUnusedAssignment 
sourceCompatibility = 1.7 
//noinspection GroovyUnusedAssignment 
targetCompatibility = 1.7 

configurations { 
    provided 
} 

sourceSets { 
    main { 
     compileClasspath += configurations.provided 
    } 
} 

dependencies { 
    provided "com.google.dagger:dagger-compiler:2.0.1" 
    compile "com.google.dagger:dagger:2.0.1" 
    compile "javax.annotation:javax.annotation-api:1.2" 
    compile "org.jetbrains.kotlin:kotlin-stdlib:0.12.1218" 
} 

--- 
DaggerModule.kt 

Module 
public class DaggerModule { 
    Provides fun provideModel(): Model = Model() 
} 

---- 
Model.kt 

public class Model { } 

SỰ TỪ BỎ: Đây là thử nghiệm lần đầu tiên tôi lái xe Dagger 2 và là một newb gradle. Dự án mẫu là mã tối thiểu tôi có thể tìm thấy để hiển thị vấn đề. Tôi không mong đợi nó sẽ làm nhiều: D.

+0

là mô-đun của bạn được bao gồm trong ** settings.gradle **? – Lamorak

+0

Yep mô-đun được bao gồm trong cài đặt gradle. – donaldlittlpie

Trả lời

10

mô-đun/build.gradle được đặt thành java thay vì kotlin. Tôi đã sửa đổi nó sau đây và nó biên dịch ok.

buildscript { 
    repositories { 
     jcenter() 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:0.12.1218' 
    } 
} 

apply plugin: 'kotlin' 

dependencies { 
    kapt "com.google.dagger:dagger-compiler:2.0.1" 
    compile "com.google.dagger:dagger:2.0.1" 
    compile "javax.annotation:javax.annotation-api:1.2" 
    compile "org.jetbrains.kotlin:kotlin-stdlib:0.12.1218" 
} 
+0

Đối với tôi, tôi đã phải thêm áp dụng plugin: 'java-library và áp dụng plugin:' kotlin'' – murt

Các vấn đề liên quan