Reverts "Gradle Lockfile workaround and Android Embedder dependency change for ExifInterface (#177508)" (#178428)

<!-- start_original_pr_link -->
Reverts: flutter/flutter#177508
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: jtmcdole
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: tree is no bueno 

```
┌─ Flutter Fix ───────────────────────────────────────────────────────────────────┐ [2025-11-12 16:47:24.646119] [STDOUT] stdout: │ You need to update the lockfile, or disable Gradle dependency locking. │ [2025-11-12 16:47:24.646119] [STDOUT] stdout: │ To regenerate the lockfiles run: `.\gradlew.bat :generateLockfiles` in │ [2025-11-12 16:47:24.646119] [STDOUT] stdout: │ c:\
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: mboetger
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {reidbaker, gmackall}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
Create a workaround for generating gradle lock files.  When the ignore file exists, gradle locking will be disabled. This will allow deps for the embedder to be checked in, and then in a follow-up PR the lockfiles can correctly be updated and the ignore file can be deleted.

Fixes: #177066, #177071

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs.
- [X] I read the [Tree Hygiene] wiki page, which explains my responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description above.
- [X] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is [test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven Fixes] where supported.
- [X] All existing and new tests are passing.


<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
This commit is contained in:
auto-submit[bot] 2025-11-13 03:13:19 +00:00 committed by GitHub
parent 9fed4d2839
commit d48aa42950
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
32 changed files with 50 additions and 126 deletions

2
DEPS
View File

@ -624,7 +624,7 @@ deps = {
'packages': [
{
'package': 'flutter/android/embedding_bundle',
'version': 'last_updated:2025-10-15T09:53:03-0700'
'version': 'last_updated:2024-09-10T16:32:16-0700'
}
],
'condition': 'download_android_deps',

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -31,8 +31,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add("io.flutter:*")
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty("local-engine-repo")) {
if (!project.hasProperty("local-engine-repo")) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -1 +0,0 @@
Reason: https://github.com/flutter/flutter/pull/177508

View File

@ -15,7 +15,6 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:file/file.dart';
import 'package:file/local.dart';
import 'package:path/path.dart' as path;
import 'package:yaml/yaml.dart';
void main(List<String> arguments) {
@ -27,8 +26,6 @@ void main(List<String> arguments) {
'defined at dev/tools/bin/config/lockfile_exclusion.yaml.\n'
'To disable this behavior, run with `--no-exclusion`.\n';
const String ignoreFileName = '.ignore-locking.md';
final ArgParser argParser = ArgParser()
..addFlag(
'gradle-generation',
@ -40,11 +37,6 @@ void main(List<String> arguments) {
help:
'Run the script using the config file at ./configs/lockfile_exclusion.yaml to skip the specified subdirectories.',
defaultsTo: true,
)
..addOption(
'ignore-locking',
help:
'Reason to disable gradle dependency locking. A reason must be given if --ignore-locking is used.',
);
ArgResults args;
@ -64,15 +56,6 @@ void main(List<String> arguments) {
// Skip android subdirectories specified in the ./config/lockfile_exclusion.yaml file.
final bool useExclusion = (args['exclusion'] as bool?) ?? true;
final bool ignoreLocking = args['ignore-locking'] != null;
final String ignoreReason = (args['ignore-locking'] as String?) ?? '';
if (ignoreLocking && ignoreReason.isEmpty) {
stderr.writeln('A reason must be provided for --ignore-locking.');
stderr.writeln(usageMessage);
exit(1);
}
const FileSystem fileSystem = LocalFileSystem();
final Directory repoRoot = (() {
@ -84,19 +67,6 @@ void main(List<String> arguments) {
return repoRoot;
})();
final File ignoreFile = repoRoot
.childDirectory('dev')
.childDirectory('tools')
.childDirectory('bin')
.childDirectory('config')
.childFile(ignoreFileName);
if (ignoreLocking) {
print('Writing ignore file in ${ignoreFile.path}');
ignoreFile.writeAsStringSync(ignoreReason);
} else if (ignoreFile.existsSync()) {
ignoreFile.deleteSync();
}
final Iterable<Directory> androidDirectories = discoverAndroidDirectories(repoRoot);
final File exclusionFile = repoRoot
@ -201,12 +171,11 @@ void main(List<String> arguments) {
}
if (gradleGeneration) {
final String relativeIgnorePath = path.relative(ignoreFile.path, from: androidDirectory.path);
// Write file content corresponding to original file language.
if (rootBuildGradle.basename.endsWith('.kts')) {
rootBuildGradle.writeAsStringSync(createGradleKtsFileContent(relativeIgnorePath));
rootBuildGradle.writeAsStringSync(rootGradleKtsFileContent);
} else {
rootBuildGradle.writeAsStringSync(createGradleFileContent(relativeIgnorePath));
rootBuildGradle.writeAsStringSync(rootGradleFileContent);
}
if (settingsGradle.basename.endsWith('.kts')) {
@ -248,8 +217,7 @@ String exec(String cmd, List<String> args, {String? workingDirectory}) {
return result.stdout as String;
}
String createGradleFileContent(String path) {
const String rootGradleFileContent = r'''
const String rootGradleFileContent = r'''
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@ -275,8 +243,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/<IGNORE_FILE>")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}
@ -286,8 +253,6 @@ tasks.register("clean", Delete) {
delete rootProject.layout.buildDirectory
}
''';
return rootGradleFileContent.replaceAll('<IGNORE_FILE>', path);
}
const String settingGradleFileContent = r'''
// Copyright 2014 The Flutter Authors. All rights reserved.
@ -333,12 +298,11 @@ plugins {
include ":app"
''';
String createGradleKtsFileContent(String path) {
// Consider updating this file to reflect the latest updates to app templates
// when performing batch updates (this file is modeled after
// root_app/android/build.gradle.kts).
// After modification verify formatting with ktlint.
const String rootGradleKtsFileContent = r'''
// Consider updating this file to reflect the latest updates to app templates
// when performing batch updates (this file is modeled after
// root_app/android/build.gradle.kts).
// After modification verify formatting with ktlint.
const String rootGradleKtsFileContent = r'''
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@ -372,8 +336,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add("io.flutter:*")
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/<IGNORE_FILE>")
if (!ignoreFile.exists() && !project.hasProperty("local-engine-repo")) {
if (!project.hasProperty("local-engine-repo")) {
lockAllConfigurations()
}
}
@ -383,8 +346,6 @@ tasks.register<Delete>("clean") {
delete(rootProject.layout.buildDirectory)
}
''';
return rootGradleKtsFileContent.replaceAll('<IGNORE_FILE>', path);
}
// Consider updating this file to reflect the latest updates to app templates
// when performing batch updates (this file is modeled after

View File

@ -385,7 +385,7 @@ android_java_sources = [
embedding_dependencies_jars = [
"//flutter/third_party/android_embedding_dependencies/lib/activity-1.8.1.jar",
"//flutter/third_party/android_embedding_dependencies/lib/annotation-jvm-1.8.1.jar",
"//flutter/third_party/android_embedding_dependencies/lib/annotation-jvm-1.8.0.jar",
"//flutter/third_party/android_embedding_dependencies/lib/annotation-experimental-1.4.0.jar",
"//flutter/third_party/android_embedding_dependencies/lib/annotations-23.0.0.jar",
"//flutter/third_party/android_embedding_dependencies/lib/collection-1.1.0.jar",
@ -395,7 +395,6 @@ embedding_dependencies_jars = [
"//flutter/third_party/android_embedding_dependencies/lib/core-runtime-2.2.0.jar",
"//flutter/third_party/android_embedding_dependencies/lib/customview-1.0.0.jar",
"//flutter/third_party/android_embedding_dependencies/lib/fragment-1.7.1.jar",
"//flutter/third_party/android_embedding_dependencies/lib/exifinterface-1.4.1.jar",
"//flutter/third_party/android_embedding_dependencies/lib/kotlin-stdlib-1.8.22.jar",
"//flutter/third_party/android_embedding_dependencies/lib/kotlin-stdlib-common-1.8.22.jar",
"//flutter/third_party/android_embedding_dependencies/lib/kotlin-stdlib-jdk7-1.8.20.jar",

View File

@ -4,9 +4,10 @@
package io.flutter.embedding.engine.image;
//noinspection ExifInterface
import android.media.ExifInterface;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.exifinterface.media.ExifInterface;
import io.flutter.Log;
import java.io.ByteArrayInputStream;
import java.io.IOException;

View File

@ -6,8 +6,9 @@ package io.flutter.embedding.engine.image;
import android.graphics.Bitmap;
import android.graphics.Matrix;
//noinspection ExifInterface
import android.media.ExifInterface;
import androidx.annotation.NonNull;
import androidx.exifinterface.media.ExifInterface;
import io.flutter.Log;
import java.nio.ByteBuffer;

View File

@ -37,9 +37,9 @@
]
},
{
"url": "https://maven.google.com/androidx/annotation/annotation/1.8.1/annotation-1.8.1.jar",
"url": "https://maven.google.com/androidx/annotation/annotation/1.8.0/annotation-1.8.0.jar",
"out_file_name": "androidx_annotation.jar",
"maven_dependency": "androidx.annotation:annotation:1.8.1",
"maven_dependency": "androidx.annotation:annotation:1.8.0",
"provides": [
"androidx.annotation.CallSuper",
"androidx.annotation.FloatRange",
@ -92,13 +92,5 @@
"out_file_name": "relinker-1.4.5.aar",
"maven_dependency": "com.getkeepsafe.relinker:relinker:1.4.5",
"provides": ["com.getkeepsafe.relinker.ReLinker"]
},
{
"url": "https://maven.google.com/androidx/exifinterface/1.4.1/exifinterface:1.4.1.aar",
"out_file_name": "exifinterface.aar",
"maven_dependency": "androidx.exifinterface:exifinterface:1.4.1",
"provides": [
"androidx.exifinterface.media.ExifInterface"
]
}
]

View File

@ -34,16 +34,11 @@ below explain how to fetch the license information for the dependencies.
new tag: `last_updated:"$version_tag"`.
1. Update the GN list `embedding_dependencies_jars` in
`src/flutter/shell/platform/android/BUILD.gn`.
1. The Gradle lockfiles will need to be updated, but they cannot be
updated in this PR. They will need to be updated in a follow-up
PR. Instead, run
`<repo_root>/dev/tools/bin/generate_gradle_lockfiles.dart
--no-gradle-generation --no-exclusion --ignore-locking=Reason: <ISSUE>`.
Replace <ISSUE> a link to the issue. This will
create a '.ignore-locking.md' file that will disable Gradle locking
and allow tests to pass without locking.
1. Once the initial PR is submitted, you will need to create a
follow-up PR that updates the Gradle Lockfiles. Run
`<repo_root>/dev/tools/bin/generate_gradle_lockfiles.dart
--no-gradle-generation --no-exclusion` to delete all the ignore
files and update the Gradle Lockfiles. Submit this PR as well.
## Updating Gradle Lockfiles in the Framework After Adding Dependencies
If you land a pr that changes the versions of the embedding dependencies,
or adds a new dependency and makes use of it, you will also need to
perform a manual roll of that change to the framework that re-generates
the Gradle lockfiles using the script at
`<framework_repo>/dev/tools/bin/generate_gradle_lockfiles.dart`
(run with the `--no-gradle-generation` and `--no-exclusion` flags).

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../dev/tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -31,8 +31,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add("io.flutter:*")
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../dev/tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty("local-engine-repo")) {
if (!project.hasProperty("local-engine-repo")) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../dev/tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../dev/tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../dev/tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -23,8 +23,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add('io.flutter:*')
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../dev/tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty('local-engine-repo')) {
if (!project.hasProperty('local-engine-repo')) {
lockAllConfigurations()
}
}

View File

@ -31,8 +31,7 @@ subprojects {
dependencyLocking {
ignoredDependencies.add("io.flutter:*")
lockFile = file("${rootProject.projectDir}/project-${project.name}.lockfile")
var ignoreFile = file("${rootProject.projectDir}/../../../../dev/tools/bin/config/.ignore-locking.md")
if (!ignoreFile.exists() && !project.hasProperty("local-engine-repo")) {
if (!project.hasProperty("local-engine-repo")) {
lockAllConfigurations()
}
}