# This file is shared between gradle and bazel build scripts and exists to keep the dependencies
# configuration between the two build systems in sync.

# The properties format is the following:
#   <dependency_type>.<artifact_name>=<value>

# Target workspace name: com_google_api_gax_java

# Versions of oneself
# {x-version-update-start:gax:current}
version.gax=2.27.0
# {x-version-update-end}
# {x-version-update-start:gax:current}
version.gax_grpc=2.27.0
# {x-version-update-end}
# {x-version-update-start:gax:current}
version.gax_bom=2.27.0
# {x-version-update-end}
# {x-version-update-start:gax-httpjson:current}
version.gax_httpjson=0.112.0
# {x-version-update-end}

# Versions for dependencies which actual artifacts differ between Bazel and Gradle.
# Gradle build depends on prebuilt maven artifacts, while Bazel build depends on Bazel workspaces
# with the sources.
version.com_google_protobuf=3.21.12
version.google_java_format=1.15.0
version.io_grpc=1.54.0

# Maven artifacts.
# Note, the actual name of each property matters (bazel build scripts depend on it).
# It should be constructed the following way:
#   1) Take full artifact id (including the group and classifier (if any) portions) and remove version portion.
#   2) Replace all characters which are neither alphabetic nor digits with the underscore ('_') character
maven.com_google_api_grpc_proto_google_common_protos=com.google.api.grpc:proto-google-common-protos:2.15.0
maven.com_google_api_grpc_grpc_google_common_protos=com.google.api.grpc:grpc-google-common-protos:2.15.0
maven.com_google_auth_google_auth_library_oauth2_http=com.google.auth:google-auth-library-oauth2-http:1.16.0
maven.com_google_auth_google_auth_library_credentials=com.google.auth:google-auth-library-credentials:1.16.0
maven.io_opencensus_opencensus_api=io.opencensus:opencensus-api:0.31.1
maven.io_opencensus_opencensus_contrib_grpc_metrics=io.opencensus:opencensus-contrib-grpc-metrics:0.31.1
maven.io_opencensus_opencensus_contrib_http_util=io.opencensus:opencensus-contrib-http-util:0.31.1
maven.io_netty_netty_tcnative_boringssl_static=io.netty:netty-tcnative-boringssl-static:2.0.59.Final
maven.io_netty_netty_handler=io.netty:netty-handler:4.1.90.Final
maven.io_netty_netty_common=io.netty:netty-common:4.1.90.Final
maven.io_netty_netty_codec_socks=io.netty:netty-codec-socks:4.1.90.Final
maven.io_netty_netty_codec_http2=io.netty:netty-codec-http2:4.1.90.Final
maven.io_netty_netty_codec_http=io.netty:netty-codec-http:4.1.90.Final
maven.io_netty_netty_codec=io.netty:netty-codec:4.1.90.Final
maven.io_netty_netty_buffer=io.netty:netty-buffer:4.1.90.Final
maven.io_netty_netty_resolver=io.netty:netty-resolver:4.1.90.Final
maven.io_netty_netty_transport=io.netty:netty-transport:4.1.90.Final
maven.io_netty_netty_handler_proxy=io.netty:netty-handler-proxy:4.1.90.Final
maven.io_netty_netty_transport_native_unix_common=io.netty:netty-transport-native-unix-common:4.1.90.Final
maven.io_perfmark_perfmark_api=io.perfmark:perfmark-api:0.26.0
maven.org_apache_tomcat_annotations_api=org.apache.tomcat:annotations-api:6.0.53
maven.com_google_code_gson_gson=com.google.code.gson:gson:2.10.1
maven.com_google_guava_guava=com.google.guava:guava:31.1-jre
maven.com_google_guava_failureaccess=com.google.guava:failureaccess:1.0.1
maven.org_apache_commons_commons_lang3=org.apache.commons:commons-lang3:3.12.0
maven.com_google_android_annotations=com.google.android:annotations:4.1.1.4
maven.com_google_code_findbugs_jsr305=com.google.code.findbugs:jsr305:3.0.2
maven.com_google_errorprone_error_prone_annotations=com.google.errorprone:error_prone_annotations:2.18.0
maven.com_google_j2objc_j2objc_annotations=com.google.j2objc:j2objc-annotations:1.3
maven.com_google_auto_value_auto_value=com.google.auto.value:auto-value:1.10.1
maven.com_google_auto_value_auto_value_annotations=com.google.auto.value:auto-value-annotations:1.10.1
maven.com_google_api_api_common=com.google.api:api-common:2.7.0
maven.org_threeten_threetenbp=org.threeten:threetenbp:1.6.8
maven.com_google_api_grpc_grpc_google_iam_v1=com.google.api.grpc:grpc-google-iam-v1:1.10.0
maven.com_google_api_grpc_proto_google_iam_v1=com.google.api.grpc:proto-google-iam-v1:1.10.0
maven.com_google_http_client_google_http_client=com.google.http-client:google-http-client:1.43.1
maven.com_google_http_client_google_http_client_gson=com.google.http-client:google-http-client-gson:1.43.1
maven.org_codehaus_mojo_animal_sniffer_annotations=org.codehaus.mojo:animal-sniffer-annotations:1.23
maven.javax_annotation_javax_annotation_api=javax.annotation:javax.annotation-api:1.3.2
maven.org_graalvm_sdk=org.graalvm.sdk:graal-sdk:22.3.1

# Testing maven artifacts
maven.junit_junit=junit:junit:4.13.2
maven.org_mockito_mockito_core=org.mockito:mockito-core:2.28.2
maven.org_hamcrest_hamcrest_core=org.hamcrest:hamcrest-core:1.3
maven.com_google_truth_truth=com.google.truth:truth:1.1.3
maven.com_googlecode_java_diff_utils_diffutils=com.googlecode.java-diff-utils:diffutils:1.3.0
maven.net_bytebuddy_byte_buddy=net.bytebuddy:byte-buddy:1.14.3
maven.org_objenesis_objenesis=org.objenesis:objenesis:2.6
