上下文
我已经使用Gradle
作为构建系统在java中启动了个人项目,我想使用Dagger 2作为DI。这样做的主要原因是习惯了该库,并能够在更大的项目中轻松使用它。
我尝试了什么
我已成功在IntelliJ IDEA上运行Google sample
问题
IntelliJ IDEA一直告诉我它无法解析生成的类(在本例中为DaggerCoffeeApp_Coffee
)。不知道编写的代码是否正确(特别是在学习使用Dagger 2时),这有点烦人。
所有java类都与Google sample相同。这是我的build.gradle
文件:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.0.1'
compile 'com.google.dagger:dagger-compiler:2.0.1'
}
问题
有没有办法让IntelliJ IDEA将DaggerCoffeeApp_Coffee
识别为生成的类(因此可以通过`ctrl + left click实现它的实现)?
答案 0 :(得分:16)
Finally I made it!
I had to add the apt
and the idea
plugin so right now my build.gradle
file look like this:
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-apt-plugin:0.4"
}
}
apply plugin: "net.ltgt.apt"
apply plugin: 'java'
apply plugin: 'idea'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.0.1'
apt 'com.google.dagger:dagger-compiler:2.0.1'
}
答案 1 :(得分:12)
我发现最简单的方法:
添加for media in mediaDict {
if let url = media["thumb_url"] as? String {
images.append(url)
}
}
插件并添加Dagger2依赖项,如下所示:
idea
打开IntelliJ的plugins {
id "net.ltgt.apt" version "0.10"
}
apply plugin: 'java'
apply plugin: 'idea'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.11'
apt 'com.google.dagger:dagger-compiler:2.11'
}
:转到Annotation Processing
并搜索Settings
,选中启用注释处理,如下图所示:
答案 2 :(得分:5)
您必须在IntelliJ中手动启用 注释处理 。
发件人:设置 - >构建,执行,部署 - >编译器 - >注释处理器 - > 启用注释处理 和 从项目类路径获取处理器
然后重建项目,您将在项目中找到生成的类。
请注意,我已在(java) android 项目中使用此解决方案。
答案 3 :(得分:4)
我正在使用IntelliJ IDEA的版本2017.3.3
,0.14
插件的版本net.ltgt.apt
和Dagger版本2.14.1
以及应用{{1} idea
文件中的插件(如在Pelocho的answer中)我发现我还必须告诉IntelliJ它可以找到Dagger生成的源,如下所示:
build.gradle
答案 4 :(得分:2)
以下是适用于我的解决方案:
档案 - >项目结构 - > (在模块列表下选择您的项目) - >打开'依赖'标签
然后,点击绿色' +'签名,选择' JAR或目录'并选择' build / classes / main'文件夹中。
另一种解决方案是使用'依赖关系'将文件夹与构建类文件链接起来。在build.gradle中阻止:
答案 5 :(得分:1)
这是我要使Idea与Dagger2和gradle一起工作所要做的。
将以下内容添加到build.gradle
文件中,以便Idea可以将生成的类视为源。
sourceDirs += file("$projectDir/out/production/classes/generated/")
这是我的build.gradle
plugins {
id 'java'
id 'idea'
id "net.ltgt.apt" version "0.10"
}
idea {
module {
sourceDirs += file("$projectDir/out/production/classes/generated/")
}
}
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.dagger:dagger:2.16'
apt 'com.google.dagger:dagger-compiler:2.16'
}
sourceCompatibility = 1.8
此外,我还必须添加以下gradle任务(到我的build.gradle文件中)以清除我的out
目录。当我移动一些文件并且Dagger2重新生成源文件时,out
目录没有被清除:(.。我还在运行配置中包括了此任务,以便在重建项目之前触发它。
task clearOutFolder(type: Delete) {
delete 'out'
}
答案 6 :(得分:0)
使用IntelliJ IDEA 2019.1和Gradle 5.4.1,这似乎足够了:
plugins {
id 'java'
}
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
implementation 'com.google.dagger:dagger:2.23.1'
annotationProcessor 'com.google.dagger:dagger-compiler:2.23.1'
}
不过,我不知道该解决方案的最低版本。
答案 7 :(得分:0)
我有一个类似的问题,我很长一段时间都找不到原因。
刚推出,结果令我惊讶。
Intellij Idea 2018.3.6-
build.gradle
:
plugins {
id "java"
}
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.11'
apt 'com.google.dagger:dagger-compiler:2.11'
}