2017-01-25 19 views
8

Tôi hoàn toàn kiệt sức với Dagger 2 trong ứng dụng không phải là Android (IDE là IntelliJ IDEA).Dagger 2 không tạo thành phần

build.gradle

buildscript { 
    repositories { 
     maven { 
      url "https://plugins.gradle.org/m2/" 
     } 
    } 
    dependencies { 
     classpath "net.ltgt.gradle:gradle-apt-plugin:0.9" 
    } 
} 

apply plugin: 'java' 
apply plugin: 'net.ltgt.apt' 

dependencies { 
    compile 'com.google.dagger:dagger:2.8' 
    apt 'com.google.dagger:dagger-compiler:2.8' 
    compileOnly 'javax.annotation:jsr250-api:1.0' 
} 

Component

@Component(modules = {MyModule.class}) public interface MyComponent {} 

Mô-đun

@Module class MyModule {} 

Main

DaggerMyComponent component = DaggerMyComponent.builder().build(); 

Compiler nói

không thể tìm thấy biểu tượng DaggerMyComponent

Tuyệt đối không có nhiều ý tưởng những gì có thể sai :(

Bằng cách này, nếu tôi chạy gradlew clean build --refresh-dependencies, không có lỗi, mọi thứ đều ổn!

Nhưng chỉ khi tôi sử dụng 'Dự án xây dựng lại' trong IDE - lỗi lần nữa. Có thể IDEA lỗi (thời gian để quay lại Eclipse)?

Và có, tôi đã thêm thư mục với các lớp được tạo dưới dạng nội dung gốc, vì vậy IDE có thể xem DaggerMyComponent.

Trả lời

3

tôi đã gửi vấn đề này để JetBrains

https://youtrack.jetbrains.com/issue/IDEA-169387

và giải pháp là trong bình luận đầu tiên.

Nếu bạn sử dụng trình biên dịch nội bộ IntelliJ để xây dựng dự án, bạn cần để cho phép xử lý chú thích tại File | Cài đặt | Xây dựng, Thi công, Triển khai | Trình biên dịch | Bộ xử lý chú thích

Thay vào đó, bạn có thể ủy quyền các hành động IDE chạy/chạy để chấm điểm. Bạn có thể tìm thấy tùy chọn tại File | Cài đặt | Xây dựng, Thi công, Triển khai | Công cụ xây dựng | Gradle | Runner

Trong xây dựng 171.4073.35Delegate IDE build/run actions to gradle tùy chọn được thiết lập theo mặc định.

+0

Aha, tôi đã bật chế độ chú thích, vì câu trả lời cho các hương vị khác của câu hỏi này gợi ý cho nó (ví dụ: [here] (http://stackoverflow.com/questions/33444356/is-there-any- cách thức tạo ra-intellij-idea-recognizing-dagger-2-tạo-lớp)), nhưng mẹo về tùy chọn về ủy nhiệm xây dựng/chạy là mới đối với tôi. Cảm ơn bạn đã nỗ lực tìm hiểu điều này :) – mous

0

Alexey Câu trả lời là tốt, nhưng IntelliJ doesnt chỉ có vấn đề chuyển sang xử lý chú thích mà không cần làm sạch, bạn cũng cần xác nhận nếu vi xử lý chú thích được kích hoạt trong

file ->Cài đặt Khác ->Default Settings ->Compiler ->Chú xử lý

Nếu này được kích hoạt, bạn cũng có thể thay đổi compiler.xml của bạn trong

[project root] /. Idea/compiler.xml và bật chú thíchĐăng nhập đúng cho hồ sơ của bạn. (Kiểm tra hình ảnh dưới đây sao chép từ một stackoverflow bài)

<component name="CompilerConfiguration"> 
    <annotationProcessing> 
     <profile default="true" name="Default" enabled="true" /> 
    </annotationProcessing> 
    </component> 

Hãy chắc chắn để [File -> làm mất hiệu lực bộ nhớ cache và Restart] sau

khác thông báo rằng họ đã phải sử dụng

áp dụng Plugin : 'idea'

trong tệp gradle của họ để cho phép intellij nhận ra các lớp được tạo ra do dagger tạo ra.

enter image description here

0

Ngoài việc cho phép xử lý chú thích như thể hiện bởi @ spierce7, vấn đề của tôi là tôi đã chạy Build Project từ menu Build IntelliJ mà không có thiết lập Gradle -> Runner thiết lập để Đại biểu IDE xây dựng/chạy hành động để gradle. Tôi nhận ra điều này sau khi chạy ./gradlew build từ thiết bị đầu cuối và thấy rằng thư mục xây dựng/tạo đã được tạo.

Một nguồn gây nhầm lẫn khác cho tôi là danh sách các thư mục sẽ không cập nhật trong IntelliJ cho đến khi tôi nhấp vào phần đó của ide.

Tôi đã xóa apply plugin: 'idea' và nó vẫn hoạt động để không cần thiết.

Tôi không chắc liệu Tệp -> invalidate Cache và Restart là cần thiết nhưng tôi đã thử như @Emanuel Seibold đã chỉ ra trước khi tôi nhận thấy nó bắt đầu hoạt động.

0

tôi phiên bản 2017.3.3 của IntelliJ IDEA, phiên bản 0.14 của net.ltgt.apt plugin và phiên bản 2.14.1 của Dagger và những gì làm việc đối với tôi là thêm dòng sau vào tập tin build.gradle tôi nói với IntelliJ nơi nó có thể tìm ra nguồn tạo ra bởi Dagger:

apply plugin: 'idea' 
idea { 
    module { 
     sourceDirs += file("$buildDir/generated/source/apt/main") 
     testSourceDirs += file("$buildDir/generated/source/apt/test") 
    } 
} 
Các vấn đề liên quan