Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定义多个Maven回购协议时的梯度传递依赖解决问题_Java_Android_Maven_Gradle - Fatal编程技术网

Java 定义多个Maven回购协议时的梯度传递依赖解决问题

Java 定义多个Maven回购协议时的梯度传递依赖解决问题,java,android,maven,gradle,Java,Android,Maven,Gradle,在gradle文件中存在多个maven repo的情况下,我遇到了一个关于可传递依赖项解决方案的问题。下面是我的根和模块gradle文件的快照- 根梯度- allprojects { repositories { maven { name 'A' url 'someUrl1' credentials { // } } mave

在gradle文件中存在多个maven repo的情况下,我遇到了一个关于可传递依赖项解决方案的问题。下面是我的根和模块gradle文件的快照-

根梯度-

allprojects {
repositories {
        maven {
            name 'A'
            url 'someUrl1'
            credentials {
             //
            }
        }

        maven {
            name 'B'
            url 'someUrl2'

            credentials {
                //
            }
        }

}
模块级梯度-

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.android.gms:play-services-analytics:11.0.4'
compile 'com.google.android.gms:play-services-auth:11.0.4'
compile 'com.google.android.gms:play-services-gcm:11.0.4'
compile 'com.google.android.gms:play-services-location:11.0.4'
compile 'com.google.android.gms:play-services-maps:11.0.4'
}

我遇到的问题是,每次执行gradle sync/build时,gradle都会尝试从Repo“B”获取上述依赖项的一些可传递依赖项的maven元数据文件。所有依赖项都存在于Repo“A”中。我不知道为什么即使在“B”上面列出了“A”,也要搜索repo“B”的maven元数据

奇怪的是,它不会导致任何构建失败,因为它最终会从本地gradle缓存获取依赖项,但它显著增加了我的构建时间,因为它在每次构建过程中都会进行多个网络调用

我注意到的一件事是11.0.4版本的gms库使用方括号,即[11.0.4]来表示POM文件中的依赖项版本

为了从根本上解决这个问题,我将依赖项更新为11.8.0,其中POM文件不使用方括号来提及它们的依赖项版本,问题就消失了

我不确定为什么POM文件中存在特定版本依赖项会导致此问题

下面是gradle调试日志的片段-

23:24:26.977 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder] Visiting configuration com.google.android.gms:play-services-analytics:11.0.4(default).
23:24:26.978 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.ivyresolve.DynamicVersionResolver] Attempting to resolve version for com.google.android.gms:play-services-analytics-impl:[11.0.4] using repositories [C:\Users\abc\AppData\Local\Android\Sdk\extras\m2repository, C:\Users\abc\AppData\Local\Android\Sdk\extras\google\m2repository, C:\Users\abc\AppData\Local\Android\Sdk\extras\android\m2repository, maven, maven2]
23:24:26.978 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.ResourceVersionLister] Listing all in file:/C:/Users/abc/AppData/Local/Android/sdk/extras/m2repository/com/google/android/gms/play-services-analytics-impl/[revision]/play-services-analytics-impl-[revision].pom
23:24:26.978 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.ResourceVersionLister] using org.gradle.internal.resource.local.FileResourceConnector@24522fcd to list all in file:/C:/Users/abc/AppData/Local/Android/sdk/extras/m2repository/com/google/android/gms/play-services-analytics-impl/
23:24:26.978 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.MavenMetadataLoader] parsing maven-metadata: C:\Users\abc\AppData\Local\Android\sdk\extras\google\m2repository\com\google\android\gms\play-services-analytics-impl\maven-metadata.xml
23:24:26.980 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.DefaultExternalResourceArtifactResolver] Loading file:/C:/Users/abc/AppData/Local/Android/sdk/extras/google/m2repository/com/google/android/gms/play-services-analytics-impl/11.0.4/play-services-analytics-impl-11.0.4.pom
23:24:26.983 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.ExternalResourceResolver] Metadata file found for module 'com.google.android.gms:play-services-analytics-impl:11.0.4' in repository 'C:\Users\abc\AppData\Local\Android\Sdk\extras\google\m2repository'.
23:24:26.983 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.ResourceVersionLister] Listing all in file:/C:/Users/abc/AppData/Local/Android/sdk/extras/android/m2repository/com/google/android/gms/play-services-analytics-impl/[revision]/play-services-analytics-impl-[revision].pom
23:24:26.983 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.ResourceVersionLister] using org.gradle.internal.resource.local.FileResourceConnector@24522fcd to list all in file:/C:/Users/abc/AppData/Local/Android/sdk/extras/android/m2repository/com/google/android/gms/play-services-analytics-impl/
23:24:26.984 [INFO] [org.gradle.cache.internal.DefaultCacheAccess] Creating new cache for metadata-2.36/module-versions, path C:\Users\abc\.gradle\caches\modules-2\metadata-2.36\module-versions.bin, access org.gradle.cache.internal.DefaultCacheAccess@334c9d50
23:24:26.984 [DEBUG] [org.gradle.cache.internal.LockOnDemandCrossProcessCacheAccess] Acquiring file lock for artifact cache (C:\Users\abc\.gradle\caches\modules-2)
23:24:26.989 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on artifact cache (C:\Users\primanda\.gradle\caches\modules-2).
23:24:26.990 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] The file lock is held by a different Gradle process (pid: 14924, lockId: -9157439162897582946). Pinged owner at port 56301
23:24:26.990 [DEBUG] [org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler] Gradle process at port 56301 confirmed unlock request for lock with id -9157439162897582946.
23:24:26.990 [DEBUG] [org.gradle.cache.internal.locklistener.DefaultFileLockContentionHandler] Gradle process at port 56301 confirmed unlock request for lock with id -9157439162897582946.
23:24:27.001 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on artifact cache (C:\Users\abc\.gradle\caches\modules-2).
23:24:27.001 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Opening cache module-versions.bin (C:\Users\abc\.gradle\caches\modules-2\metadata-2.36\module-versions.bin)
23:24:27.002 [DEBUG] [org.gradle.cache.internal.btree.BTreePersistentIndexedCache] Opening cache module-metadata.bin (C:\Users\abc\.gradle\caches\modules-2\metadata-2.36\module-metadata.bin)
23:24:27.004 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.ivyresolve.CachingModuleComponentRepository] Using cached module metadata for module 'com.google.android.gms:play-services-analytics-impl:11.0.4' in 'maven'
23:24:27.004 [DEBUG] [org.gradle.internal.resource.transfer.DefaultCacheAwareExternalResourceAccessor] Constructing external resource: https://someurl2/com/google/android/gms/play-services-analytics-impl/maven-metadata.xml

这个问题确实是由符号
[11.0.4]
引起的,Gradle将其解释为一个范围,从而触发动态版本解析

在执行动态版本解析时,Gradle将搜索构建脚本中定义的所有存储库,以确保拥有所有可用版本的完整视图。
然后,Gradle将本地缓存检索到的信息,以提高后续构建的性能。

我怀疑是这样的。但这不是格雷德尔本身的一个缺陷吗?方括号不应解释为版本范围自由打开缺陷。但我担心这会在Maven或Ivy处理范围时隐藏一些向后兼容性问题。