Java Proto Names

This topic covers the names that are generated by the immutable API.

This document contains information on what the fully-qualified Java name of a proto is, based on the different proto options. This name corresponds to the package you need to import to use that message.

Immutable API Message Names

The names for protos generated by the immutable API (java_proto_library BUILD target) are listed in the following table.

java_api_versionjava_multiple_filesjava_alt_api_packagejava_packagejava_outer_classnameGenerated full message name
1trueDefined-$java_alt_api_package.$message
1trueNot definedNot definedcom.google.protos.$package.proto2api.$message
1trueNot definedDefined$java_package.proto2api.$message
1falseDefined-Not defined$java_alt_api_package.$derived_outer_class.$message
1falseDefined-Defined$java_alt_api_package.$java_outer_classname.$message
1falseNot definedNot definedNot definedcom.google.protos.$package.proto2api.$derived_outer_class.$message
1falseNot definedNot definedDefinedcom.google.protos.$package.proto2api.$java_outer_classname.$message
1falseNot definedDefinedNot defined$java_package.proto2api.$derived_outer_class.$message
1falseNot definedDefinedDefined$java_package.proto2api.$java_outer_classname.$message
2true-Not defined-com.google.protos.$package.$message
2true-Defined-$java_package.$message
2false-Not definedNot definedcom.google.protos.$package.$derived_outer_class.$message
2false-Not definedDefinedcom.google.protos.$package.$java_outer_classname.$message
2false-DefinedNot defined$java_package.$derived_outer_class.$message
2false-DefinedDefined$java_package.$java_outer_classname.$message

Legend

  • - means either setting or not setting the option will not change the generated full message name.

  • $message is the actual name of the proto message.

  • $package is the name of the proto package. This is the name specified by the package directive in the proto file, which is usually at the top of the file.

  • $derived_outer_class is a name generated from the proto file name. Generally it’s computed by removing punctuation from the file name and converting it to CamelCase. For example, if the proto is foo_bar.proto, the $derived_outer_class value is FooBar.

    If the generated class name would be the same as one of the messages defined in the proto file, derived_outer_class has OuterClass appended to it. For example, if the proto is foo_bar.proto and contains a FooBar message, the $derived_outer_class value is FooBarOuterClass. The same is true when using the v1 API, whether or not the class name would be the same as one of the messages defined.

  • All other $names are the values of the corresponding proto2 file options defined in the proto file.

The recommended set of options is:

option java_multiple_files = true;
option java_outer_classname = "{UpperCamelCaseFilename}Proto";

Mutable API Message Names

The names for protos generated by the mutable API are outlined in the following sections.

Generated Proto API Version

java_api_versionjava_mutable_apijava_enable_dual_generate_mutable_apiAPI version
--trueproto1, proto2 mutable
1-falseproto1
2truefalseproto2 mutable
2falsefalseproto1

Proto2 Message Names

java_api_version(java_multiple_files, java_multiple_files_mutable_package)java_packagejava_outer_classnamejava_alt_api_packageProto2 Mutable message name
-(true, defined)---$java_multiple_files_mutable_package.$message
1!(true, defined)UndefinedUndefinedUndefinedcom.google.protos.$package.proto2api.Mutable$Filename.$message
1!(true, defined)UndefinedUndefinedDefined$java_alt_api_package.Mutable$Filename.$message
1!(true, defined)UndefinedDefinedUndefinedcom.google.protos.$package.proto2api.Mutable$java_outer_classname.$message
1!(true, defined)UndefinedDefinedDefined$java_alt_api_package.Mutable$java_outer_classname.$message
1!(true, defined)DefinedUndefinedUndefined$java_package.proto2api.Mutable$Filename.$message
1!(true, defined)DefinedUndefinedDefined$java_alt_api_package.Mutable$Filename.$message
1!(true, defined)DefinedDefinedUndefined$java_package.proto2api.Mutable$java_outer_classname.$message
1!(true, defined)DefinedDefinedDefined$java_alt_api_package.Mutable$java_outer_classname.$message
2!(true, defined)UndefinedUndefined-com.google.protos.$package.Mutable$Filename.$message
2!(true, defined)UndefinedDefined-com.google.protos.$package..Mutable$java_outer_classname.$message
2!(true, defined)DefinedUndefined-$java_package.Mutable$Filename.$message
2!(true, defined)DefinedDefined-$java_package.Mutable$java_outer_classname.$message

Legend

  • - means either setting or not setting the option will not change the generated full message name.
  • $message is the actual name of the proto message.
  • All other $names are the values of the corresponding proto2 file options defined in the proto file.

Proto1 Message Names

java_api_versionjava_multiple_filesjava_packagejava_outer_classnamejava_alt_api_packageProto1 message name
1trueUndefined--com.google.protos.$package.$message
1trueDefined--$java_package.$message
1falseUndefinedDefined-com.google.protos.$package.$java_outer_class.$message
1falseUndefinedUndefined-com.google.protos.$package.$message
1falseDefinedDefined-$java_package.$java_outer_class.$message
1falseDefinedUndefined-$java_package.$message
2trueUndefined-Undefinedcom.google.protos.$package.proto1api.$message
2trueDefined-Undefined$java_package.proto1api.$message
2falseUndefinedDefinedUndefinedcom.google.protos.$package.proto1api.$java_outer_class.$message
2falseUndefinedUndefinedUndefinedcom.google.protos.$package.proto1api.$message
2falseDefinedDefinedUndefined$java_package.proto1api.$java_outer_class.$message
2falseDefinedUndefinedUndefined$java_package.proto1api.$message
2trueUndefined-Definedcom.google.protos.$package.$java_alt_api_package.$message
2trueDefined-Defined$java_package.$java_alt_api_package.$message
2falseUndefinedDefinedDefinedcom.google.protos.$package.$java_alt_api_package.$java_outer_class.$message
2falseUndefinedUndefinedDefinedcom.google.protos.$package.$java_alt_api_package.$message
2falseDefinedDefinedDefined$java_package.$java_alt_api_package.$java_outer_class.$message
2falseDefinedUndefinedDefined$java_package.$java_alt_api_package.$message

Legend

  • - means either setting or not setting the option will not change the generated full message name.
  • $message is the actual name of the proto message.
  • All other $names are the values of the corresponding proto2 file options defined in the proto file.