无法加载类“ com.squareup.javapoet.TypeName”

时间:2019-01-16 00:33:03

标签: java android gradle jar android-library

我创建了一个注释处理器作为Java库,该处理器依赖于其中具有注释的android模块。如果我只是导入模块并将代码导入到我正在处理的任何android项目中,它的效果就很好。当我实际构建编译器jar文件并将其导入我的android项目时,就会出现问题。一旦这样做并尝试构建项目,我就会收到错误

  

无法加载类'com.squareup.javapoet.TypeName'

我最初是在线上学习如何为Android创建注释处理器的教程,它说在项目中创建2个不同的模块,一个作为Java模块,另一个作为android库,然后在编译器中添加android库作为build.gradle文件中的依赖项,所以我做到了。这是编译器的build.gradle文件...

apply plugin: 'java-library'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':annotations')

    implementation 'com.squareup:javapoet:1.9.0'
    implementation 'com.google.guava:guava:24.1-jre'
    implementation 'com.google.auto.service:auto-service:1.0-rc2'
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

这是注释的一个...

apply plugin: 'java-library'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

注释代码非常简单...

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @Interface Challenge {
  int position() default 0;
}

编译器要复杂得多。它扩展了AbstractProcessor并使用AutoService遍历代码,并使用@Challenge批注查找所有内容,然后使用这些类名称创建一个新类,该类允许应用程序通过静态方法访问挑战。

在我尝试实际构建编译器并在android项目中使用生成的jar文件之前,整个过程运行良好。现在,它无法加载编译器需要使用的类。 我正在使用它的项目已在settings.gradle文件中声明了它,就像这样...

  

包括':app',':compiler'

以及我依赖项中的build.gradle文件...

implementation 'com.squareup.javapoet:1.9.0'
implementation 'com.google.guava:guava:24.1-jre'
implementation 'com.google.auto.service:auto-service:1.0-rc2'
annotationProcessor project(':compiler')
annotationProcessor 'com.google.auto.service:auto-service:1.0-rc2'

无论我如何将其用作jar文件,总是会给我同样的错误,但是如果我只是将模块作为代码而不是jar文件导入,则效果很好。我也尝试过将注释构建为jar文件,并将其也包含到项目中,但这无济于事。我一直在搜索,无法弄清楚为什么它会像jar一样失败,而只能作为代码工作。奇怪的是,我什至在代码中的任何地方都找不到使用TypeName的单个实例。我在路径中找到了,唯一靠近它的地方就是使用ParameterizedTypeName.get(...)。所以我不知道为什么TypeName会引起问题。

0 个答案:

没有答案