Java Proto-Namen
Dieses Dokument enthält Informationen darüber, wie der vollständig qualifizierte Java-Name eines Proto basierend auf verschiedenen Proto-Optionen lautet. Dieser Name entspricht dem Paket, das Sie importieren müssen, um diese Nachricht zu verwenden.
Empfehlung
- Setzen Sie
option java_multiple_files = true; - Setzen Sie
option java_outer_classname = "FileNameProto"; - Setzen Sie
option java_package = "com.google.package";
Erklärung
Mehrere Dateien
Mit java_multiple_files = true wird die generierte Java-Klasse für jede Nachricht in einer separaten .java-Datei abgelegt. Dies erleichtert das Verschieben von Nachrichten von einer .proto-Datei in eine andere erheblich.
Outer Classname
Für die .proto-Datei selbst wird eine Java-Klasse generiert. Der Name der Klasse für die Datei wird automatisch generiert, wenn er nicht angegeben ist. Die Regeln, wie dieser Name generiert wird, sind jedoch übermäßig kompliziert und nicht offensichtlich. Die beste Vorgehensweise ist, die Option java_outer_classname explizit auf den Namen der .proto-Datei zu setzen, konvertiert in PascalCase, wobei der '.' entfernt wird. Zum Beispiel:
Die Datei
student_record_request.protosollte Folgendes festlegen:option java_outer_classname = "StudentRecordRequestProto";
Java-Paket
Das Java-Paket für generierte Bindings wird automatisch auf das Proto-Paket gesetzt. Dies entspricht jedoch normalerweise nicht den Java-Konventionen. Um einen konventionellen Java-Paketnamen sicherzustellen, empfehlen wir, die Option java_package explizit zu setzen. Innerhalb von Google ist es beispielsweise üblich, com.google. dem Proto-Paket voranzustellen.
Namen unveränderlicher API-Nachrichten
Das Java-Plugin für protoc generiert Namen gemäß dieser Tabelle.
| java_multiple_files | java_package | java_outer_classname | Generierter vollständiger Nachrichtenname |
|---|---|---|---|
| wahr | Nicht definiert | ignoriert | com.google.protos.$package.$message |
| wahr | Definiert | ignoriert | $java_package.$message |
| falsch | Nicht definiert | Nicht definiert | com.google.protos.$package.$derived_outer_class.$message |
| falsch | Nicht definiert | Definiert | com.google.protos.$package.$java_outer_classname.$message |
| falsch | Definiert | Nicht definiert | $java_package.$derived_outer_class.$message |
| falsch | Definiert | Definiert | $java_package.$java_outer_classname.$message |
Legende
$messageist der tatsächliche Name der Proto-Nachricht.$packageist der Name des Proto-Pakets. Dies ist der Name, der durch diepackage-Direktive in der Proto-Datei angegeben wird, die sich normalerweise am Anfang der Datei befindet.$derived_outer_classist ein Name, der aus dem Namen der Proto-Datei generiert wird. Im Allgemeinen wird er berechnet, indem Satzzeichen aus dem Dateinamen entfernt und in PascalCase konvertiert werden. Wenn das Proto beispielsweisefoo_bar.protolautet, ist der Wert von$derived_outer_classFooBar.Wenn der generierte Klassenname mit einer der in der Proto-Datei definierten Nachrichten identisch wäre, wird
OuterClassanderived_outer_classangehängt. Wenn das Proto beispielsweisefoo_bar.protolautet und eineFooBar-Nachricht enthält, ist der Wert von$derived_outer_classFooBarOuterClass. Das Gleiche gilt bei der Verwendung der v1-API, unabhängig davon, ob der Klassenname mit einer der definierten Nachrichten identisch wäre oder nicht.Alle anderen
$namessind die Werte der entsprechenden Dateioptionen, die in der.proto-Datei definiert sind.