我在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>
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"