在 gradle 中使用 sbt Avrohugger 插件
Using sbt Avrohugger plugin in gradle
我正在使用 https://github.com/julianpeeters/avrohugger sbt 插件为 Avro .avsc
文件生成 Scala case 类。如何在 Gradle 项目中使用相同的插件?
我最终使用 Gradle 中的 avrohugger-tools
库在我的模式更新时自动生成 Scala 案例 类。你的里程可能会有所不同,但这最终对我有用:
build.gradle.kts
import java.io.File
plugins {
scala
id("com.github.maiflai.scalatest") version "0.19"
}
version = "1.0"
configurations {
register("avrohugger-tools")
}
dependencies {
// Scala std-libs
implementation(Dependencies.Libs.Scala.library)
// AvroHugger tools JAR
"avrohugger-tools"("com.julianpeeters:avrohugger-tools_2.12:1.0.0-RC14")
// testing
testImplementation(gradleTestKit())
testImplementation("junit:junit:4.12")
testImplementation("org.scalatest:scalatest_2.12:3.0.5")
testRuntime("org.pegdown:pegdown:1.4.2")
}
fun normalizeFileSeparator(path: String) = path.replace('/', File.separatorChar)
val genAvro = task<JavaExec>("genAvro") {
val sourceAvroPath = normalizeFileSeparator("src/main/avro/")
val sourceAvroFiles = fileTree(mapOf(
"dir" to sourceAvroPath, "include" to listOf("**/*.avsc")
))
val targetPath = normalizeFileSeparator("src/gen/")
doFirst {
delete(targetPath)
}
classpath = configurations["avrohugger-tools"]
main = "avrohugger.tool.Main"
args(
"generate", "schema",
sourceAvroFiles.files.joinToString(separator=" "),
targetPath
)
inputs.files(sourceAvroFiles)
outputs.files(targetPath)
}
the<JavaPluginConvention>().sourceSets.getByName(
SourceSet.MAIN_SOURCE_SET_NAME
).java.srcDir("gen")
tasks.withType<ScalaCompile> {
dependsOn(genAvro)
}
inline fun <reified T : Task> TaskContainer.existing() = existing(T::class)
inline fun <reified T : Task> TaskContainer.register(name: String, configuration: Action<in T>) = register(name, T::class, configuration)
请注意,我也是此包中的 building/test Scala 源代码树,因此可能会省略一些特定于 Scala 的部分。
真心希望对您有所帮助!
我创建了 gradle 用于从 Avro 模式生成 Scala 案例 类 的插件,它在内部使用 avrohugger
库。
所以现在可以将这个插件添加到您的项目中了:
plugins {
id 'com.zlad.gradle.avrohugger' version '0.2.1'
}
当你想编译 Scala 源时,你也需要 Scala 库依赖:
plugins {
id 'scala'
id 'com.zlad.gradle.avrohugger' version '0.2.1'
}
repositories {
mavenCentral()
}
dependencies {
compile 'org.scala-lang:scala-library:2.12.8'
}
Scala 类 将在 compileScala
任务之前的构建过程中自动生成。默认情况下,avro 架构应在 src/main/avro
中,生成的源将在 build/generated-src/avro
中
您可以调用 generateAvroScala
手动调用 Scala 源代码生成。
您可以在 gradle-avrohugger-plugin github page 上找到所有详细信息和配置选项。
我正在使用 https://github.com/julianpeeters/avrohugger sbt 插件为 Avro .avsc
文件生成 Scala case 类。如何在 Gradle 项目中使用相同的插件?
我最终使用 Gradle 中的 avrohugger-tools
库在我的模式更新时自动生成 Scala 案例 类。你的里程可能会有所不同,但这最终对我有用:
build.gradle.kts
import java.io.File
plugins {
scala
id("com.github.maiflai.scalatest") version "0.19"
}
version = "1.0"
configurations {
register("avrohugger-tools")
}
dependencies {
// Scala std-libs
implementation(Dependencies.Libs.Scala.library)
// AvroHugger tools JAR
"avrohugger-tools"("com.julianpeeters:avrohugger-tools_2.12:1.0.0-RC14")
// testing
testImplementation(gradleTestKit())
testImplementation("junit:junit:4.12")
testImplementation("org.scalatest:scalatest_2.12:3.0.5")
testRuntime("org.pegdown:pegdown:1.4.2")
}
fun normalizeFileSeparator(path: String) = path.replace('/', File.separatorChar)
val genAvro = task<JavaExec>("genAvro") {
val sourceAvroPath = normalizeFileSeparator("src/main/avro/")
val sourceAvroFiles = fileTree(mapOf(
"dir" to sourceAvroPath, "include" to listOf("**/*.avsc")
))
val targetPath = normalizeFileSeparator("src/gen/")
doFirst {
delete(targetPath)
}
classpath = configurations["avrohugger-tools"]
main = "avrohugger.tool.Main"
args(
"generate", "schema",
sourceAvroFiles.files.joinToString(separator=" "),
targetPath
)
inputs.files(sourceAvroFiles)
outputs.files(targetPath)
}
the<JavaPluginConvention>().sourceSets.getByName(
SourceSet.MAIN_SOURCE_SET_NAME
).java.srcDir("gen")
tasks.withType<ScalaCompile> {
dependsOn(genAvro)
}
inline fun <reified T : Task> TaskContainer.existing() = existing(T::class)
inline fun <reified T : Task> TaskContainer.register(name: String, configuration: Action<in T>) = register(name, T::class, configuration)
请注意,我也是此包中的 building/test Scala 源代码树,因此可能会省略一些特定于 Scala 的部分。
真心希望对您有所帮助!
我创建了 gradle 用于从 Avro 模式生成 Scala 案例 类 的插件,它在内部使用 avrohugger
库。
所以现在可以将这个插件添加到您的项目中了:
plugins {
id 'com.zlad.gradle.avrohugger' version '0.2.1'
}
当你想编译 Scala 源时,你也需要 Scala 库依赖:
plugins {
id 'scala'
id 'com.zlad.gradle.avrohugger' version '0.2.1'
}
repositories {
mavenCentral()
}
dependencies {
compile 'org.scala-lang:scala-library:2.12.8'
}
Scala 类 将在 compileScala
任务之前的构建过程中自动生成。默认情况下,avro 架构应在 src/main/avro
中,生成的源将在 build/generated-src/avro
您可以调用 generateAvroScala
手动调用 Scala 源代码生成。
您可以在 gradle-avrohugger-plugin github page 上找到所有详细信息和配置选项。