2015-06-08 17 views
9

Vâng, tôi di cư dự án Android của tôi để sử dụng Architecure sạch:Lớp tạo ra cho Hợp phần của Dagger 2 không được tìm thấy trong compileTestJava Java Plugin Gradle của

https://github.com/android10/Android-CleanArchitecture

Điều này có nghĩa rằng một phần của tôi mã nằm trong mô-đun miền (thuần Java, không phụ thuộc với Android). Đối với dự án này, tôi đang sử dụng Dagger 2, tạo nguồn bằng bộ xử lý chú thích (trong thời gian biên dịch).

tôi có cấu hình Gradle sau đối với dự án của tôi:

apply plugin: 'java' 

sourceCompatibility = 1.7 
targetCompatibility = 1.7 

configurations { 
    provided 
} 

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

dependencies { 
    def domainDependencies = rootProject.ext.domainDependencies 
    def domainTestDependencies = rootProject.ext.domainTestDependencies 

    provided domainDependencies.daggerCompiler 
    provided domainDependencies.javaxAnnotation 

    compile domainDependencies.dagger 
    compile domainDependencies.rxJava 
    compile domainDependencies.joda 

    testCompile domainTestDependencies.junit 
    testCompile domainTestDependencies.assertJ 
    testCompile domainTestDependencies.mockito 
    testCompile domainTestDependencies.jMockLegacy 
    testCompile domainTestDependencies.commonsCsv 
} 

Trong nguồn thử nghiệm của tôi, tôi đã tạo ra TestComponent giao diện và Dagger là nghĩa vụ phải tạo ra DaggerTestComponent. Khi tôi cố gắng xây dựng dự án của mình thông qua dòng lệnh hoặc Android Studio, tôi nhận được lỗi biên dịch không thể tìm thấy biểu tượng và sau đó: Thực hiện không thành công cho tác vụ ': domain: compileTestJava'.

Tôi đã cố gắng thay đổi 'được cung cấp' bằng 'biên dịch' và 'testCompile'. Nó vẫn không hoạt động.

Điều lạ lùng là, sau sự thất bại của compileTestJava, tôi có thể tìm thấy DaggerTestComponent.java được tạo trong miền/build/classes/test. Vì vậy, nếu nó được tạo ra, tại sao tôi nhận được lỗi biên dịch này?

Điều quan trọng cần lưu ý là sự cố này chỉ xảy ra trong nguồn thử nghiệm. Tôi đã tạo ra nguồn Dagger 2 đang được sử dụng trong nguồn chính.

CẬP NHẬT:

Tôi đã nhận xét mọi nơi cố gắng sử dụng DaggerTestComponent và cố gắng tạo lại. Trong tên miền /build/classes/test, bây giờ tôi có thể tìm thấy không chỉ DaggerTestComponent.java mà còn là kết quả .class của quá trình biên dịch. Vì vậy, nó tạo ra các tập tin nguồn và biên dịch nó. Tại sao việc biên dịch các tập tin bằng cách sử dụng nó không hoạt động? Nó có vẻ như một số vấn đề trật tự, như nguồn được tạo ra chưa sẵn sàng tại thời điểm biên dịch các nguồn khác.

+0

bạn cũng không cần phải áp dụng plugin APT? – EpicPandaForce

+0

@EpicPandaForce, tôi nghĩ là không. Bởi vì 'com.neenbedankt.android-apt' được cho là được sử dụng với một dự án Android. Mô-đun này của dự án của tôi là Java thuần túy. Dù sao, phiên bản hiện tại của Android-APT có lỗi với các bài kiểm tra đơn vị. –

Trả lời

6

Nhờ @EpicPandaForce, tôi bắt đầu lo lắng nếu có một plugin APT cho Java thuần túy. Sau khi tìm kiếm, tôi thấy điều này một:

https://github.com/tbroyer/gradle-apt-plugin

tôi chỉ áp dụng plugin và thay đổi phụ thuộc của tôi với apt và testApt.

+0

Đối với những người trong chúng ta sử dụng thư mục * test * chuẩn, chỉ cần thêm * testApt 'com.google.dagger: dagger-compiler: 2.2' *. Trừ khi bạn sử dụng một Module riêng biệt, không cần sử dụng plugin Java APT thuần túy – Maragues

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