背景:
项目包含了android application、android library、java library类型的模块,具体地有annotation模块(java)、processor模块(java)、common模块(java)、app模块(android),processor是注解处理器,为common模块和app模块里面使用了annotation模块中的注解来生成代码到各自模块的build目录下。
问题:
android application和android library类型的模块中,直接在build.gradle配置annotationProcessor即可自动生成代码并且引用之(生成OK、打包OK、import OK),如下:
dependencies {
annotationProcessor project(':processor')
}
但是在java library类型的模块中,无法在build.gradle中使用annotationProcessor,只是compile project(':processor')后并不能import成功,虽然项目可以编译成功。
解决:
https://stackoverflow.com/questions/47262516/error24-0-could-not-find-method-annotationprocessor-for-arguments-com-goo?rq=1
通过使用java library的apt插件来解决(对应了android的annotationProcessor),参考如下的project structure和gradle配置:
Project:
01-annotation: java library,注解
02-processor: java library,注解处理器
03-common : java library
04 -build/classes 编译后的class文件
05 -build/generated 自动生成的java文件
06 -src/main/java/com.example.common
07 -build.gradle
08 apply plugin: 'java'
09 apply plugin: "net.ltgt.apt"
10 buildscript {
11 repositories {
12 maven {
13 // url "https://plugins.gradle.org/m2/" // 需要配置证书
14 url "./repo"// 可以通过浏览器下载jar和pom到本地模块下的路径repo\net\ltgt\gradle\gradle-apt-plugin\0.18
15 }
16 }
17 dependencies {
18 classpath "net.ltgt.gradle:gradle-apt-plugin:0.18"
19 }
20 }
21 dependencies {
22 implementation fileTree(include: ['*.jar'], dir: 'libs')
23 implementation project(':annotation')
24 apt project(':processor')
25 }
26 sourceSets {
27 main {
28 java.srcDirs = ['src/main/java', 'build/generated/source/apt/main']
29 }
30 }
31 tasks.withType(JavaCompile) {
32 options.encoding = "UTF-8"
33 }
34 sourceCompatibility = "1.8"
35 targetCompatibility = "1.8"
36
37-app : android application
38 -build/generated
39 -src/main/java/com.example.android
40 -build.gradle