在 Java 中创建自定义协议插件
Create custom protoc plugin in Java
我正在尝试编写自定义 ProtoC 插件,但无法使协议与 jar 文件一起使用。似乎它试图 运行 它作为一个应用程序,我有:
.../libs/plugin-java-protobuf-1.0-jvm8.jar: program not found or is not executable
我看过解决方案,其中使用 java -jar ...
创建了 .sh 脚本,但我想将我的插件与 Gradle Protobuf 插件和复合构建 (includeBuild ...
) 一起使用。
我找到了解决这个问题的 kroto-plus 插件 https://github.com/marcoferrer/kroto-plus/blob/master/protoc-gen-kroto-plus/build.gradle。它的 jar 似乎是可执行的。
但不幸的是,我不明白我到底需要做什么。我试过 bootJar:
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.21'
id 'org.springframework.boot'
}
jar {
archiveClassifier = 'jvm8'
manifest {
attributes 'Main-Class': 'plugin.PluginKt'
}
}
bootJar {
archiveClassifier = 'jvm8'
}
但结果是一样的:
.../libs/plugin-java-protobuf-1.0-jvm8.jar: program not found or is not executable
那么如何让 jar 真正可执行呢?
我真傻,忘了设置launchScript()
。所以下一个配置有效:
plugins {
id 'org.springframework.boot' version '2.1.5.RELEASE'
}
jar {
enabled = false
archiveClassifier = 'jvm8'
}
bootJar {
launchScript()
archiveClassifier = 'jvm8'
mainClassName = 'plugin.PluginKt'
}
jar.dependsOn(bootJar)
我正在尝试编写自定义 ProtoC 插件,但无法使协议与 jar 文件一起使用。似乎它试图 运行 它作为一个应用程序,我有:
.../libs/plugin-java-protobuf-1.0-jvm8.jar: program not found or is not executable
我看过解决方案,其中使用 java -jar ...
创建了 .sh 脚本,但我想将我的插件与 Gradle Protobuf 插件和复合构建 (includeBuild ...
) 一起使用。
我找到了解决这个问题的 kroto-plus 插件 https://github.com/marcoferrer/kroto-plus/blob/master/protoc-gen-kroto-plus/build.gradle。它的 jar 似乎是可执行的。
但不幸的是,我不明白我到底需要做什么。我试过 bootJar:
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.21'
id 'org.springframework.boot'
}
jar {
archiveClassifier = 'jvm8'
manifest {
attributes 'Main-Class': 'plugin.PluginKt'
}
}
bootJar {
archiveClassifier = 'jvm8'
}
但结果是一样的:
.../libs/plugin-java-protobuf-1.0-jvm8.jar: program not found or is not executable
那么如何让 jar 真正可执行呢?
我真傻,忘了设置launchScript()
。所以下一个配置有效:
plugins {
id 'org.springframework.boot' version '2.1.5.RELEASE'
}
jar {
enabled = false
archiveClassifier = 'jvm8'
}
bootJar {
launchScript()
archiveClassifier = 'jvm8'
mainClassName = 'plugin.PluginKt'
}
jar.dependsOn(bootJar)