java

package
v0.23.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 29, 2026 License: Apache-2.0 Imports: 33 Imported by: 0

README

Java Package Developer Guide

This guide describes how to handle changes in the librarian repository that affect client library generation in google-cloud-java. It covers two scenarios:

  1. Breaking Changes: Changes that cause code generation failures, compilation errors, or integration test failures in google-cloud-java (see Handling Breaking Changes).
  2. Non-Breaking Diffs: Changes that introduce diffs in the generated code but do not break the build or tests (see Handling Changes That Cause Generation Diffs).

Handling Breaking Changes in google-cloud-java

If you are making changes in librarian that are expected to cause code generation failure or other breakages in the google-cloud-java repository (such as in the integration tests; see Example):

  1. Disable the Java Workflow: Temporarily disable the Java integration workflow by modifying java.yaml. You can do this by prepending false && to the if condition of the integration job:

    integration:
      runs-on: ubuntu-24.04
      if: false && github.event_name == 'push' && (github.ref == 'refs/heads/main')
    
  2. Add a TODO: Add a TODO comment in java.yaml linking to the GitHub issue or pull request you are working on to track the reinstate task:

    integration:
      runs-on: ubuntu-24.04
      # TODO(https://github.com/googleapis/librarian/issues/XXXX): Reinstate this job
      if: false && github.event_name == 'push' && (github.ref == 'refs/heads/main')
    
  3. Merge Librarian Changes: Merge your changes into the librarian repository.

  4. Update google-cloud-java: After the librarian changes are merged, update the google-cloud-java repository to use the pseudo-version containing your changes.

    You can update the version in librarian.yaml by running the following commands in the google-cloud-java repository:

    # Get the latest pseudo-version of librarian from main
    PSEUDO=$(GOPROXY=direct go list -m -f '{{.Version}}' github.com/googleapis/librarian@main)
    
    # Get the current librarian version used in the repo
    V=$(go run github.com/googleapis/librarian/cmd/librarian@latest config get version)
    
    # Update the version in librarian.yaml using the current tool version
    go run github.com/googleapis/librarian/cmd/librarian@${V} config set version $PSEUDO
    

    After updating the version, run generate -all to apply the changes.

  5. Reinstate the Java Workflow: Once google-cloud-java is updated and working with the new changes, remove the TODO and reinstate the java.yaml workflow.

Example of a Breaking Change

PR #6432 updated pom.xml templates. It passed local tests but broke librarian generate --all in google-cloud-java (Issue #6446). Because the integration test only runs in postsubmit, the failure wasn't caught before merge, requiring a revert (PR #6449). If anticipated, the author should have disabled the workflow beforehand.

Handling Changes That Cause Generation Diffs

If you are making changes in librarian that do not cause generation failure in google-cloud-java but will introduce a diff in the generated code:

  1. Librarian CI Stays Green: The java.yaml integration check in the librarian repository will not fail on such changes.
  2. Submit google-cloud-java PR: It is good practice to immediately open a pull request in the google-cloud-java repository. This PR should update the librarian dependency to the new pseudo-version containing your changes (using the commands described in Handling Breaking Changes) and run generate -all to apply the generated diff.
  3. Prevent Weekly Update Diffs: Proactively applying these diffs prevents them from being introduced abruptly during the weekly automated librarian updates.

Documentation

Overview

Package java provides Java specific functionality for librarian.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrOmitCommonResourcesConflict is returned when OmitCommonResources is true
	// but common_resources.proto is also explicitly listed in AdditionalProtos.
	ErrOmitCommonResourcesConflict = errors.New("conflict: OmitCommonResources is true but google/cloud/common_resources.proto is explicitly listed in AdditionalProtos")
	// ErrCannotDeriveReleasedVersion is returned when released_version cannot be derived.
	ErrCannotDeriveReleasedVersion = errors.New("cannot derive released version")
)

Functions

func Add added in v0.11.0

func Add(lib *config.Library) *config.Library

Add initializes a new Java library with default values.

func Clean

func Clean(library *config.Library) error

Clean removes files in the library's output directory that are not in the keep list. It targets patterns like proto-*, grpc-*, and the main GAPIC module.

func DefaultLibraryName added in v0.11.0

func DefaultLibraryName(api string) string

DefaultLibraryName derives a default library name from an API path by stripping known prefixes (e.g., "google/cloud/", "google/api/") and returning all segments except the last one, joined by dashes.

func DistributionName added in v0.15.0

func DistributionName(library *config.Library) string

DistributionName returns the Maven distribution name (GroupID:ArtifactID) for the library.

func Fill

func Fill(library *config.Library) (*config.Library, error)

Fill populates Java-specific default values for the library.

func Format

func Format(ctx context.Context, library *config.Library) error

Format formats a Java client library using google-java-format.

func Generate

func Generate(ctx context.Context, cfg *config.Config, library *config.Library, srcs *sources.Sources) error

Generate generates a Java client library.

func IdentifyMissingModules added in v0.13.0

func IdentifyMissingModules(library *config.Library, libraryDir string, srcs *sources.Sources) ([]string, error)

IdentifyMissingModules identifies all expected proto-*, grpc-*, client, BOM and Parent modules for the given library based on its configuration and checks for pom.xml presence on the filesystem. It returns a list of artifact IDs for the missing modules.

func Install added in v0.15.0

func Install(ctx context.Context, tools *config.Tools) error

Install installs Java tool dependencies. It creates two sibling directories: - bin/ ($HOME/java_tools/bin) stores the generated executable wrapper scripts. - lib/ ($HOME/java_tools/lib) isolates the downloaded compiled .jar/.exe files.

func PostGenerate

func PostGenerate(ctx context.Context, repoPath string, cfg *config.Config, missingArtifacts []MissingArtifact) error

PostGenerate performs repository-level actions after all individual Java libraries have been generated.

func ResolveMixinDependencies added in v0.14.0

func ResolveMixinDependencies(cfg *config.Config, lib *config.Library, srcs *sources.Sources) (*config.Config, error)

ResolveMixinDependencies automatically resolves mixin dependencies for a Java library.

func Tidy

func Tidy(library *config.Library) (*config.Library, error)

Tidy tidies the Java-specific configuration for a library by removing default values.

func Validate added in v0.10.0

func Validate(library *config.Library) error

Validate checks that the Java-specific configuration for a library is correctly formatted. It ensures that there are no conflicts in common resources configuration.

Types

type APICoordinate added in v0.10.0

type APICoordinate struct {
	LibraryCoordinate
	// Proto is the Maven coordinate for the proto module.
	Proto Coordinate
	// GRPC is the Maven coordinate for the gRPC module.
	GRPC Coordinate
}

APICoordinate contains Maven coordinates for the library and its API-specific modules (proto and gRPC).

func DeriveAPICoordinates added in v0.10.0

func DeriveAPICoordinates(lc LibraryCoordinate, version string, javaAPI *config.JavaAPI) APICoordinate

DeriveAPICoordinates returns the Maven coordinates for the proto and gRPC artifacts associated with a specific API version.

type Coordinate added in v0.10.0

type Coordinate struct {
	// GroupID is the Maven Group ID.
	GroupID string
	// ArtifactID is the Maven Artifact ID.
	ArtifactID string
	// Version is the Maven version.
	Version string
}

Coordinate represents a Maven Coordinate, uniquely identifies a project artifact using its GroupID, ArtifactID, and Version.

type LibraryCoordinate added in v0.10.0

type LibraryCoordinate struct {
	// GAPIC is the Maven coordinate for the GAPIC module.
	GAPIC Coordinate
	// Parent is the Maven coordinate for the parent module.
	Parent Coordinate
	// BOM is the Maven coordinate for the BOM module.
	BOM Coordinate
}

LibraryCoordinate contains Maven coordinates for the library modules (GAPIC, parent, and BOM).

func DeriveLibraryCoordinates added in v0.10.0

func DeriveLibraryCoordinates(library *config.Library) LibraryCoordinate

DeriveLibraryCoordinates calculates the Maven coordinates for the GAPIC library, its parent, and its BOM based on the library's configuration.

type MissingArtifact added in v0.13.0

type MissingArtifact struct {
	ID      string
	Library *config.Library
}

MissingArtifact pairs an artifact ID with the library it was generated from.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL