我可以从命令行或从Ant调用Kotlin noargs插件吗?

Kotlin有一个noarg编译器插件 ,可以用来为特殊注释类生成合成的无参数构造函数。 文档页面清楚地解释了如何在Maven和Gradle中使用它,但是不清楚它是否可以使用,或者如何使用它,无论是从Ant还是在命令行中使用kotlinc

到目前为止,我一直无法做到这一点。 这是我的NoArgs.kt源文件:

 package test annotation class NoArgs @NoArgs data class Test(val x: String, val y: String) 

以下是我尝试过的一些命令行,根本没有任何作用:

 $ kotlinc -verbose "-Xplugin:$KOTLIN_HOME/lib/noarg-compiler-plugin.jar -P plugin:org.jetbrains.kotlin.noarg:annotation=test.NoArgs NoArgs.kt 

和:

 $ kotlinc -verbose "-Xplugin=$KOTLIN_HOME/lib/kotlin-annotation-processing.jar;$KOTLIN_HOME/lib/noarg-compiler-plugin.jar;$JRE_HOME/lib/tools.jar" -P plugin:org.jetbrains.kotlin.noarg:annotation=test.NoArgs NoArgs.kt 

当我运行$ javap test.Test ,没有生成无参数构造函数的证据。 还有一些证据表明,插件并没有运行,事实上,如果我把垃圾,而不是-P选项的单词注释 ,没有错误信息或行为改变。

如果你能告诉我如何使用kotlinc或Ant来运行它,我真的很感激它!

请检查noarg-compiler-plugin.jar文件的路径。 这适用于我(从自制软件 Kotlin 1.1.3-2):

kotlinc-jvm -Xplugin=$KOTLIN_HOME/libexec/lib/noarg-compiler-plugin.jar -P plugin:org.jetbrains.kotlin.noarg:annotation=test.NoArgs NoArgs.kt

 Compiled from "NoArgs.kt" public final class test.Test { public final java.lang.String getX(); public final java.lang.String getY(); public test.Test(java.lang.String, java.lang.String); public final java.lang.String component1(); public final java.lang.String component2(); public final test.Test copy(java.lang.String, java.lang.String); public static test.Test copy$default(test.Test, java.lang.String, java.lang.String, int, java.lang.Object); public java.lang.String toString(); public int hashCode(); public boolean equals(java.lang.Object); public test.Test(); }