我想在项目Gradle中使用Dagger2和MVP,但在本机Java中没有Android。 但我无法构建我的项目,DaggerAppComponent类从未生成。 该类由Dagger lib在编译时自动生成。
build.gradle:
plugins {
id "net.ltgt.apt" version "0.11"
}
apply plugin: 'java'
apply plugin: 'idea'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
compileJava {
options.annotationProcessorPath = configurations.apt
}
configurations {
apt
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile "com.google.dagger:dagger:2.11"
apt "com.google.dagger:dagger-compiler:2.11"
apt "com.google.dagger:dagger-producers:2.11"
compileOnly "com.google.auto.factory:auto-factory:1.0-beta3"
apt "com.google.auto.factory:auto-factory:1.0-beta3"
compileOnly "org.immutables:value:2.2.10:annotations"
apt "org.immutables:value:2.2.10"
provided 'javax.annotation:jsr250-api:1.0'
compile 'org.glassfish:javax.annotation:10.0-b28'
}
Main.java
public class Main {
private static AppComponent appComponent;
public static void main(String[] args) {
/**
* Launch the application.
*/
EventQueue.invokeLater(new Runnable() {
public void run() {
appComponent = initDagger();
try {
MainViewImpl mainView = new MainViewImpl();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public AppComponent getAppComponent() {
return appComponent;
}
public static AppComponent initDagger() {
return DaggerAppComponent.builder().appModule(new AppModule())
.build();
}
}
当我构建我的项目时,我有这个错误:
Error:(38, 16) java: cannot find symbol
symbol: variable DaggerAppComponent
location: class main.Main
DaggerAppComponent类永远不会构建。 你有什么想法吗?
答案 0 :(得分:0)
我会说这段代码
compileJava {
options.annotationProcessorPath = configurations.apt
}
configurations {
apt
}
没有必要。
您还必须在IDE选项中激活注释处理。您可以通过运行gradle compile
来检查是否属于这种情况,并检查gradle是否生成了源
答案 1 :(得分:0)
您需要遵循Gradle Annotation Processing插件https://github.com/tbroyer/gradle-apt-plugin
的IDE说明像Dagger2和Lombok这样的注释需要一个注释处理器。这可以通过配置IDE来完成,但最好尽可能地通过gradle处理。
话虽如此,你仍然需要为Eclipse或IntelliJ做些什么。 对于IntelliJ,这是重要的部分:
在IntelliJ IDEA中使用Gradle集成时(而不是 ida task),建议将IDE构建操作委托给 Gradle本身从IDEA 2016.3开始: https://www.jetbrains.com/idea/whatsnew/#v2016-3-gradle否则, 您必须手动启用注释处理:在设置...→ 构建,执行,部署→编译器→注释处理器,检查 启用注释处理并从项目中获取处理器 类路径。要模仿Gradle行为和生成的文件行为, 您可以配置生产和测试源目录 build / generated / source / apt / main 和 build / generated / source / apt / test 分别选择存储生成的源相对于:Module 内容根。
在Launcher的Project Defaults中配置它,这样你只需要执行一次。
请注意,从IntelliJ IDEA 2016.1开始,除非您委派 为Gradle构建操作,您必须取消选中创建单独的模块 导入项目时每个源设置。
答案 2 :(得分:0)
例如,要在Java库中实现Dagger2。我编写了一个简短的演示,您将在其中看到如何做。看看这个: