2011-04-08 6 views
1

처음으로 프로토콜 버퍼를 사용하려고합니다. Google에서 제공하는 자습서를 따르고 있습니다. 다음과 같이 내가 만드는 *의 .proto은 다음과 같습니다protoc.exe에서 클래스 파일을 가져 오는 방법

package tutorial; 
option java_package = "com.example.tutorial"; 
option java_outer_classname = "AddressBookProtos"; 

message Person { 
    required string name = 1; 
    required int32 id = 2; 
    optional string email = 3; 

    enum PhoneType { 
    MOBILE = 0; 
    HOME = 1; 
    WORK = 2; 
    } 

    message PhoneNumber { 
    required string number = 1; 
    optional PhoneType type = 2 [default = HOME]; 
    } 

    repeated PhoneNumber phone = 4; 
} 

message AddressBook { 
    repeated Person person = 1; 
} 

내가 다음 명령을 사용하여 컴파일 : 그것은 오류없이 실행 addressbook.java을 생산

protoc -I=../examples --java_out=src/main/java ../examples/addressbook.proto 

. 하지만 내가 말할 수있는 것부터, * .class가 필요해 이클립스 환경에서 사용할 수 있습니다.

protoc -I=../examples --java_out=src/main/java/addressbook.jar ../examples/addressbook.proto 

을하지만 프로젝트에 그 항아리를 가져온 후, 일식 내가 수업을 필요로 말한다 : 나는 명령으로 * .jar 파일로 출력을 시도했다. 나는 examples 디렉토리에있는 동안 명령어로 클래스를 컴파일하려고 시도했다.

javac *java 

파일을보고 있지만 "100 errors"가 뒤 따르는 일련의 줄을 반환합니다. 나는 내가 완전히 잃어버린 것일 수도 있고 올바른 생각에 가깝지 않을 수도 있음을 이해한다. 그러나 어떤 도움도 위대 할 것이다! 감사!

아 여기 ...이 프로토를 호출하는 코드입니다

import com.example.tutorial.AddressBookProtos.AddressBook; 
import com.example.tutorial.AddressBookProtos.Person; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.PrintStream; 

class ListPeople { 
    // Iterates though all people in the AddressBook and prints info about them. 
    static void Print(AddressBook addressBook) { 
    for (Person person: addressBook.getPersonList()) { 
     System.out.println("Person ID: " + person.getId()); 
     System.out.println(" Name: " + person.getName()); 
     if (person.hasEmail()) { 
     System.out.println(" E-mail address: " + person.getEmail()); 
     } 

     for (Person.PhoneNumber phoneNumber : person.getPhoneList()) { 
     switch (phoneNumber.getType()) { 
      case MOBILE: 
      System.out.print(" Mobile phone #: "); 
      break; 
      case HOME: 
      System.out.print(" Home phone #: "); 
      break; 
      case WORK: 
      System.out.print(" Work phone #: "); 
      break; 
     } 
     System.out.println(phoneNumber.getNumber()); 
     } 
    } 
    } 

    // Main function: Reads the entire address book from a file and prints all 
    // the information inside. 
    public static void main(String[] args) throws Exception { 
    if (args.length != 1) { 
     System.err.println("Usage: ListPeople ADDRESS_BOOK_FILE"); 
     System.exit(-1); 
    } 

    // Read the existing address book. 
    AddressBook addressBook = 
     AddressBook.parseFrom(new FileInputStream(args[0])); 

    Print(addressBook); 
    } 
} 

감사합니다!

Link to protobuf tutorial I am using!

답변

0

그냥 이클립스에서 src 디렉토리에있는 .java 파일을 포함한다. Eclipse는이를 .class 파일로 컴파일합니다.

+0

와우! 그게 다야 ... 이런! 정말 고맙습니다! 그게 필요해! – user697048

관련 문제