Java 11-Kotlin注解处理器
Java 11-Kotlin annotation processor
我们有一个生成代码的注解处理器。这个注释处理器自 2013 年以来一直在使用,并且工作正常。但是,我根本无法让它与 Kotlin classes 一起工作。
java 的当前用法是
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<annotationProcessors>
<annotationProcessor>db.annotationprocessing.PropertyAnnotationProcessor</annotationProcessor>
</annotationProcessors>
<annotationProcessorPaths>
<dependency>
<groupId>to.etc.domui</groupId>
<artifactId>property-annotations-processor</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
但这不处理 kotlin,因为它是一个 java 编译器。所以我在那之前编译了Kotlin,插件:
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<configuration>
<annotationProcessorArgs>
<processorArg>
kapt.kotlin.generated=${project.build.outputDirectory}/kaptStubs
</processorArg>
</annotationProcessorArgs>
<sourceDirs>
<sourceDir>src/main/java</sourceDir>
<sourceDir>src/test/java</sourceDir>
</sourceDirs>
<annotationProcessorPaths>
<!-- Specify your annotation processors here. -->
<annotationProcessorPath>
<groupId>to.etc.domui</groupId>
<artifactId>property-annotations-processor</artifactId>
<version>${domui.version}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
</configuration>
</execution>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
我将调试器附加到注释处理器,并期望在 kotlin-maven-plugin 期间命中断点。这没有发生。它是在 java 编译期间完成的,并且没有任何关于 Kotlin class 的参考资料我用来测试它。
奇怪的是,它在 /target/kaptStubs 下生成了 classes,IntellIJ 将其解释为 java class 而在 target/classes/ 下将其解释为 Kotlin class.
然而,这是警告:
[警告] 'tools.jar' 未找到,kapt 可能工作不可靠。
环境:
java --version
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1, mixed mode, sharing)
Kotlin class 被编译(我可以找到它 target/classes),但注释处理器甚至没有被触发。有人知道问题出在哪里吗?
出于某种原因,kapt 没有使用
META-INF/services/javax.annotation.processing.Processor
文件。我认为这是 kapt 中的一个错误,因为这是做事的标准方式。
解决它的方法是通过定义来指定您想要的注释处理器:
<annotationProcessors>
<processor>db.annotationprocessing.PropertyAnnotationProcessor</processor>
</annotationProcessors>
这仍然会在错误的目录中生成代码,但是嘿,至少它在生成代码。
完整的执行步骤如下:
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<phase>process-sources</phase>
<configuration>
<sourceDirs>
<sourceDir>src/main/java</sourceDir>
</sourceDirs>
<annotationProcessorPaths>
<annotationProcessorPath>
<groupId>to.etc.domui</groupId>
<artifactId>property-annotations-processor</artifactId>
<version>${domui.version}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
<annotationProcessors>
<processor>db.annotationprocessing.PropertyAnnotationProcessor</processor>
</annotationProcessors>
</configuration>
</execution>
我们有一个生成代码的注解处理器。这个注释处理器自 2013 年以来一直在使用,并且工作正常。但是,我根本无法让它与 Kotlin classes 一起工作。
java 的当前用法是
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<annotationProcessors>
<annotationProcessor>db.annotationprocessing.PropertyAnnotationProcessor</annotationProcessor>
</annotationProcessors>
<annotationProcessorPaths>
<dependency>
<groupId>to.etc.domui</groupId>
<artifactId>property-annotations-processor</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
但这不处理 kotlin,因为它是一个 java 编译器。所以我在那之前编译了Kotlin,插件:
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<configuration>
<annotationProcessorArgs>
<processorArg>
kapt.kotlin.generated=${project.build.outputDirectory}/kaptStubs
</processorArg>
</annotationProcessorArgs>
<sourceDirs>
<sourceDir>src/main/java</sourceDir>
<sourceDir>src/test/java</sourceDir>
</sourceDirs>
<annotationProcessorPaths>
<!-- Specify your annotation processors here. -->
<annotationProcessorPath>
<groupId>to.etc.domui</groupId>
<artifactId>property-annotations-processor</artifactId>
<version>${domui.version}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
</configuration>
</execution>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
我将调试器附加到注释处理器,并期望在 kotlin-maven-plugin 期间命中断点。这没有发生。它是在 java 编译期间完成的,并且没有任何关于 Kotlin class 的参考资料我用来测试它。
奇怪的是,它在 /target/kaptStubs 下生成了 classes,IntellIJ 将其解释为 java class 而在 target/classes/ 下将其解释为 Kotlin class.
然而,这是警告: [警告] 'tools.jar' 未找到,kapt 可能工作不可靠。
环境:
java --version
openjdk 11.0.8 2020-07-14
OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1, mixed mode, sharing)
Kotlin class 被编译(我可以找到它 target/classes),但注释处理器甚至没有被触发。有人知道问题出在哪里吗?
出于某种原因,kapt 没有使用
META-INF/services/javax.annotation.processing.Processor
文件。我认为这是 kapt 中的一个错误,因为这是做事的标准方式。 解决它的方法是通过定义来指定您想要的注释处理器:
<annotationProcessors>
<processor>db.annotationprocessing.PropertyAnnotationProcessor</processor>
</annotationProcessors>
这仍然会在错误的目录中生成代码,但是嘿,至少它在生成代码。
完整的执行步骤如下:
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<phase>process-sources</phase>
<configuration>
<sourceDirs>
<sourceDir>src/main/java</sourceDir>
</sourceDirs>
<annotationProcessorPaths>
<annotationProcessorPath>
<groupId>to.etc.domui</groupId>
<artifactId>property-annotations-processor</artifactId>
<version>${domui.version}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
<annotationProcessors>
<processor>db.annotationprocessing.PropertyAnnotationProcessor</processor>
</annotationProcessors>
</configuration>
</execution>