大局是我有一个protobuf(想象它就像一个类)数据类型,它引用另一个protobuf,它位于另一个Jar文件中,它是我的POM文件中的依赖项。这非常适用于.java文件,但遗憾的是,它不适用于protobuf文件。我能想到的最好的解决方案是告诉Maven在一个位置提取另一个依赖Jar(包含proto文件)文件,然后告诉Maven对该位置的所有这些proto文件进行protoc编译。唉,我不知道如何告诉Maven这样做。由于我们使用标准Jar文件来捕获我们的proto文件,因此将非常感谢任何帮助。
import "X.proto"; // refers to a proto file in another jar
import "Y.proto";
message A {
repeated X o = 1; // This cant be done
repeated Y e = 2;
}
由于X与此文件不在同一路径,因此上述操作无效。
答案 0 :(得分:2)
我在Gradle中找到了解决方案。填写下面的空白并正确指出你的回购,你应该能够得到以下工作。现在,您可以通过其他jar文件中的proto文件在多个项目中按层次结构组合protobufs!
在gradle中,您可以使用以下内容:
// these are your protobuf plugin repositories
buildscript {
repositories {
maven {
url 'WHERE YOUR PROTOBUF PLUGIN EXISTS. e.g. http://maven or MavenCentral()'
}
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.0'
classpath 'com.google.protobuf:protoc:2.6.1'
}
}
apply plugin: 'com.google.protobuf'
group = "YOUR PACKAGE NAME. e.g. com.x.y"
version = "1.0" // release version
// these are your regular dependencies repositories. This could be
// very similar to the ones in buildscript above.
repositories {
mavenLocal()
}
// this is needed by the plugin and is where teh magic happens. It
// tells protobuf where to extract all the proto files that it finds
// in all the dependency jar files you have
protobuf {
generatedFilesBaseDir="$projectDir/src/"
}
// also magic you need for this protobuf plugin to work
sourceSets {
main {
// this tells the plugin where your project specific
// protofiles are located
proto {
srcDir 'src/main/resources/proto/'
}
java {
srcDir 'src/main/java'
}
}
}
dependencies {
compile 'com.google.protobuf:protobuf-java:2.6.1'
}