2012-12-26 72 views
1

我創建了一個簡單的.proto文件並執行了編譯器(protoc-2.5.0rc1-win32.zip)。一個java文件被生成到規定的包。但是,生成的文件不能編譯。 .proto文件很簡單,帶有一堆簡單類型可選字段(正確編號)的單個消息。 該java文件不編譯,例如:通過protoc生成的類生成編譯錯誤

  • 構造GeneratedMessage.FieldAccessorTable(Descriptors.Descriptor,字符串[])是未定義
  • 方法ensureFieldAccessorsInitialized(類,第)是未定義的類型GeneratedMessage.FieldAccessorTable
  • ...和其他錯誤在同一直線上(就像試圖覆蓋超final方法)

的錯誤,暗示在API版本的水平有些不吻合的主機? 任何想法?

謝謝 已解決:發現我使用的API預期版本是2.4.1,而且我使用的是最新版本。

回答

0

我的猜測是你首先需要從source distribution protobuf-2.5.0rc1.zip中建立一個新的協議buf jar(protobuf-java-2.5.0rc1.jar),並使其成爲本地「系統」依賴項你的maven pom.xml。如果我只是用新的編譯器生成新的Java存根,但在我的pom中有舊的2.4.1 jar依賴項,我也會得到編譯錯誤。我找不到一個託管已經構建的2.5.0rc1.jar的Maven倉庫。如果您只是從源代碼分發中獲取源文件,則會錯過一些類文件,如com.google.protobuf.DescriptorProtos。*。

2

對我來說,我將其追蹤到,包括舊的原型緩衝區版本,並且版本衝突。

解決方案:檢查您的所有庫的舊版本的原型緩衝區,它可能包含在你已經有的東西。

2

我已經解決了同樣的問題。 答案: 1.顯示您的協議編譯器版本

d:\ workspace2 \監視器\ SRC \主\資源> protoc --version libprotoc 2.6.1

2.make與protoc編譯版本的protoc罐子重合

例如

<dependency> 
      <groupId>com.google.protobuf</groupId> 
      <artifactId>protobuf-java</artifactId> 
      <version>2.6.1</version> 
     </dependency>