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

  • 我在 pom.xml 中使用maven-antrun-plugin下面:
&ltplugins>
            &ltplugin>
                &ltgroupId&gtorg.apache.maven.plugins</groupId>
                &ltartifactId&gtmaven-antrun-plugin</artifactId>
                &ltversion&gt1.7</version>
                &ltexecutions>
                   &ltexecution>
                      &ltid&gtgenerate-sources</id>
                      &ltphase&gtgenerate-sources</phase>
                      &ltconfiguration>
                         &lttarget>
                            &ltecho&gtGenerate</echo>
                            &ltpath id="proto.path">
                               &ltfileset dir="src/main/java/com/xyz/zrtb/simulator/proto">
                                  &ltinclude name="**/*.proto" />
                               </fileset>
                            </path>
                            &ltpathconvert pathsep=" " property="proto.files" refid="proto.path" />
                            &ltexec executable="protoc" failonerror="true">
                               &ltarg value="--java_out=src/main/java" />
                               &ltarg value="--proto_path=${project.basedir}/src/main/java/com/xyz/zrtb/simulator/proto/" />
                               &ltarg line="${proto.files}" />
                            </exec>
                         </target>
                         &ltsourceRoot&gtsrc/</sourceRoot>
                      </configuration>
                      &ltgoals>
                         &ltgoal&gtrun</goal>
                      </goals>
                   </execution>
                </executions>
             </plugin>
          </plugins>

Note: 以上配置适用于普通原型文件,其中我的消息中没有任何'import'语句或'objects as variables'但是它不适用于具有'import'语句或'objects as variables'的文件 .

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

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;
}

这些proto文件位于名为 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.

我尝试了很多选项,但没有得到这个工作,请帮忙 . 它可能是一个' - prot-path'问题 . 我已经尝试了下面的import语句,但它不起作用:

  • import "com/xyz/zrtb/simulator/proto/a.proto"

  • import "src/main/java/com/xyz/zrtb/simulator/proto/a.proto"

  • import "MyProject/src/main/java/com/xyz/zrtb/simulator/proto/a.proto"