Как получить файл класса из protoc.exe - PullRequest
1 голос
/ 08 апреля 2011

Я пытаюсь использовать буфер протокола впервые. Я следую инструкциям, предоставленным Google. * .Proto, который я делаю, выглядит следующим образом:

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

Затем я компилирую его с помощью следующей команды:

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

Он работает без ошибок и выдает addressbook.java. Но из того, что я могу сказать, мне нужен * .class, чтобы я мог использовать это в среде затмения. Я попытался вывести его в файл * .jar с помощью команды:

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

Но после импорта этого фляги в проект Eclipse говорит, что мне нужны классы. Я также пытался скомпилировать его в класс с помощью команды, пока я нахожусь в каталоге примеров.

javac *java

Он видит файл, но возвращает тонну строк, за которыми следует «100 ошибок». Я понимаю, что я могу быть полностью потерян и даже не близок к правильной идее ... но любая помощь будет отличной! Спасибо!

о, а вот код, который вызывает этот прото ...

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

СПАСИБО!

Ссылка на учебник по protobuf, который я использую!

1 Ответ

0 голосов
/ 08 апреля 2011

Просто включите файл .java в каталог src в eclipse.Eclipse скомпилирует его в файл .class.

...