我已经使用kapt编写了一个代码生成器,并且正在用maven编译kotlin的项目中使用它。
我发现kapt生成器在Kotlin的编译阶段之后被调用,这使我无法在同一项目中的kotlin中使用生成的代码。
但是,如果我在同一项目中从Java中引用生成的类,则可以正常工作。这是因为java编译阶段是在kotlin的生成阶段之后进行的。
我已经在maven配置中指定了Kotlin的编译目标之前的kapt目标(如docs中所述),但这似乎没有什么不同:
<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>
<sourceDirs>
<sourceDir>src/main/java</sourceDir>
</sourceDirs>
<annotationProcessorPaths>
<annotationProcessorPath>
<groupId>lang.taxi</groupId>
<artifactId>taxi-annotation-processor</artifactId>
<version>${taxi.version}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
</configuration>
</execution>
<execution>
<id>compile</id>
<goals> <goal>compile</goal> </goals>
</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配置为允许我在同一项目中使用Kotlin生成的代码?
答案 0 :(得分:4)
问题是from flask import Flask, render_template
app = Flask(__name__) # or e.g. Flask(__name__, template_folder='../otherdir')
@app.route("/")
def home():
return "Hello world"
@app.route("/hello/again")
def hello_again():
return render_template("hello_again.html")
if __name__ == "__main__":
app.run()
是在没有kapt目标的父pom中定义的,然后又是在与kapt相同的模块自身pom中定义的。
这导致编译任务在kapt任务之前运行,即使模块的pom在kotlin-maven-plugin
之前指定了kapt
的顺序。
删除父pom条目即可解决此问题。
答案 1 :(得分:0)
您可以使用gradle DAG来简单地通过使编译/汇编任务依赖于kapt任务来解决问题。如果您有帮助,我知道如何在android中执行此操作,请告诉我,我将在之后发布代码。