我的开发环境是Win7 64 bit ;JDK 1.7;protobuf-2.5.0-win32;
如摘要所言,我下载的是win32的protoc.exe,网上找了一圈都没有win 64bit的版本。
测试生成Java文件失败,截图如下:
这是书上的方式,但是是失败的执行,因为作者没有说清楚,protoc是按照:protoc input output 来编译的。所以,cmd执行命令报Missing input file错误。
先来看下我的.proto文件的定义:
SubscribeReq.proto
package netty;
option java_package="com.boonya.netty.codec.protobuf";
option java_outer_classname="SubscribeReqProto";
message SubscribeReq{
required int32 subReqID=1;
required string userName=2;
required string productName=3;
required string address=4;
}
因为没有64位环境下的protoc.exe,所以在公司的时候没有测出结果。
晚上在家里的win32电脑上测试还是有Missing input file 异常 所以问题不是出在32位和64位的区别上:
于是在网上搜到了这篇文章:http://www.tuicool.com/articles/EJrQRr3按照其路径格式生成就成功了。
最终在F:\GoogleProtobuf路径下生成了com源码文件路径,如图:
最终生成的Java文件SubscribeReqProto.java,内容如下:
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: SubscribeReq.proto
package com.boonya.netty.codec.protobuf;
public final class SubscribeReqProto {
private SubscribeReqProto() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
}
public interface SubscribeReqOrBuilder
extends com.google.protobuf.MessageOrBuilder {
// required int32 subReqID = 1;
/**
* <code>required int32 subReqID = 1;</code>
*/
boolean hasSubReqID();
/**
* <code>required int32 subReqID = 1;</code>
*/
int getSubReqID();
// required string userName = 2;
/**
* <code>required string userName = 2;</code>
*/
boolean hasUserName();
/**
* <code>required string userName = 2;</code>
*/
java.lang.String getUserName();
/**
* <code>required string userName = 2;</code>
*/
com.google.protobuf.ByteString
getUserNameBytes();
// required string productName = 3;
/**
* <code>required string productName = 3;</code>
*/
boolean hasProductName();
/**
* <code>required string productName = 3;</code>
*/
java.lang.String getProductName();
/**
* <code>required string productName = 3;</code>
*/
com.google.protobuf.ByteString
getProductNameBytes();
// required string address = 4;
/**
* <code>required string address = 4;</code>
*/
boolean hasAddress();
/**
* <code>required string address = 4;</code>
*/
java.lang.String getAddress();
/**
* <code>required string address = 4;</code>
*/
com.google.protobuf.ByteString
getAddressBytes();
}
/**
* Protobuf type {@code netty.SubscribeReq}
*/
public static final class SubscribeReq extends
com.google.protobuf.GeneratedMessage
implements SubscribeReqOrBuilder {
// Use SubscribeReq.newBuilder() to construct.
private SubscribeReq(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
super(builder);
this.unknownFields = builder.getUnknownFields();
}
private SubscribeReq(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
private static final SubscribeReq defaultInstance;
public static SubscribeReq getDefaultInstance() {
return defaultInstance;
}
public SubscribeReq getDefaultInstanceForType() {
return defaultInstance;
}
private final com.google.protobuf.UnknownFieldSet unknownFields;
@java.lang.Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private SubscribeReq(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
initFields();
int mutable_bitField0_ = 0;
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
default: {
if (!parseUnknownField(input, unknownFields,
extensionRegistry, tag)) {
done = true;
}
break;
}
case 8: {
bitField0_ |= 0x00000001;
subReqID_ = input.readInt32();
break;
}
case 18: {
bitField0_ |= 0x00000002;
userName_ = input.readBytes();
break;
}
case 26: {
bitField0_ |= 0x00000004;
productName_ = input.readBytes();
break;
}
case 34: {
bitField0_ |= 0x00000008;
address_ = input.readBytes();
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(
e.getMessage()).setUnfinishedMessage(this);
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return com.boonya.netty.codec.protobuf.SubscribeReqProto.internal_static_netty_SubscribeReq_descriptor;
}
protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
internalGetFieldAccessorTable() {
return com.boonya.netty.codec.protobuf.SubscribeReqProto.internal_static_netty_SubscribeReq_fieldAccessorTable
.ensureFieldAccessorsInitialized(
com.boonya.netty.codec.protobuf.SubscribeReqProto.SubscribeReq.class, com.boonya.netty.codec.protobuf.SubscribeReqProto.SubscribeReq.Builder.class);
}
public static com.google.protobuf.Parser<SubscribeReq> PARSER =
new com.google.protobuf.AbstractParser<SubscribeReq>() {
public SubscribeReq parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)