Google Protobuf - Java - 互相“导入”proto文件的问题

时间:2014-10-07 09:17:51

标签: java maven

我已经在java中创建了一个示例maven项目,并具有以下配置:

  • 我在 pom.xml 中使用maven-antrun-plugin:

    <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.7</version>
                <executions>
                   <execution>
                      <id>generate-sources</id>
                      <phase>generate-sources</phase>
                      <configuration>
                         <target>
                            <echo>Generate</echo>
                            <path id="proto.path">
                               <fileset dir="src/main/java/com/xyz/zrtb/simulator/proto">
                                  <include name="**/*.proto" />
                               </fileset>
                            </path>
                            <pathconvert pathsep=" " property="proto.files" refid="proto.path" />
                            <exec executable="protoc" failonerror="true">
                               <arg value="--java_out=src/main/java" />
                               <arg value="--proto_path=${project.basedir}/src/main/java/com/xyz/zrtb/simulator/proto/" />
                               <arg line="${proto.files}" />
                            </exec>
                         </target>
                         <sourceRoot>src/</sourceRoot>
                      </configuration>
                      <goals>
                         <goal>run</goal>
                      </goals>
                   </execution>
                </executions>
             </plugin>
          </plugins>

注意:以上配置适用于我没有任何“导入”的普通原型文件。陈述或对象作为变量&#39;在我的消息中然而它不适用于具有“导入”的文件。陈述或对象作为变量&#39;。

以下是我使用的原型文件:

a.proto

option java_package = "com.xyz.zrtb.simulator.protos";
option java_outer_classname = "A";

message a {
    optional string id = 1;
    optional string name = 2;
    repeated string cat = 4;
    optional string domain = 3;
}

b.proto

option java_package = "com.xyz.zrtb.simulator.protos";
option java_outer_classname = "b";

import "a.proto";

message b {
    optional string id = 1;
    optional string name = 2;
    optional string domain = 3;
    repeated string cat = 4;
    optional string page = 5;
    optional string ref = 6;
    optional A a = 7;
}

这些原型文件位于名为 com.xyz.zrtb.simulator.proto

的同一个包中

以下是项目结构:

     MyProject
       |------src/main/java (source folder)
                          |------ com.xyz.zrtb.simulator.proto
                          |------ com.xyz.zrtb.simulator.protos (for generated java files)


最重要的是解释了结构,我在运行maven generate-sources 时得到的错误如下:


    [INFO] --- maven-antrun-plugin:1.7:run (generate-sources) @ myproject-web ---
    [INFO] Executing tasks

    main:
         [echo] Generate
         [exec] site.proto:13:14: "A" is not defined.

我尝试了很多选项,但没有得到这项工作,请帮忙。它可能是一个&#39; - 原始路径&#39;问题。我已尝试过以下导入声明,但它无效:

  • import&#34; com / xyz / zrtb / simulator / proto / a.proto&#34;
  • import&#34; src / main / java / com / xyz / zrtb / simulator / proto / a.proto&#34;
  • 导入&#34; MyProject / src / main / java / com / xyz / zrtb / simulator / proto / a.proto&#34;

0 个答案:

没有答案