Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
如何让Gradle正确地下拉具有不正确元数据的可传递依赖项?_Gradle - Fatal编程技术网

如何让Gradle正确地下拉具有不正确元数据的可传递依赖项?

如何让Gradle正确地下拉具有不正确元数据的可传递依赖项?,gradle,Gradle,我正在尝试设置gradle.build文件,但遇到以下可传递依赖项问题: org.glassfish.ha:haapi:3.1.8 似乎pom.xml指定二进制文件采用hk2 jar格式,这实际上是不正确的,因为二进制文件只是采用jar格式。在做了一些研究之后,我发现了以下几点: 不幸的是,这似乎不起作用。通过阅读更多的文档,我发现我应该能够简单地执行以下操作: configurations.all { resolutionStrategy.force 'org.glassfish.ha

我正在尝试设置gradle.build文件,但遇到以下可传递依赖项问题:

org.glassfish.ha:haapi:3.1.8

似乎pom.xml指定二进制文件采用hk2 jar格式,这实际上是不正确的,因为二进制文件只是采用jar格式。在做了一些研究之后,我发现了以下几点:

不幸的是,这似乎不起作用。通过阅读更多的文档,我发现我应该能够简单地执行以下操作:

configurations.all {
    resolutionStrategy.force 'org.glassfish.ha:ha-api:3.1.8@jar'
}
这产生了同样不正确的结果:

如您所见,它试图实际下拉以下URL:

有人知道如何正确地提取正确的二进制文件并排除不正确的依赖项吗

谢谢

编辑

我只想补充一点,我遇到的最初问题是,当Gradle试图从我们的内部构件下载ha api依赖项时,返回403,因为我们的存储库中不存在hk2 jar文件,只有jar存在:

* What went wrong:
Could not resolve all dependencies for configuration ':compileClasspath'.
> Could not determine artifacts for org.glassfish.ha:ha-api:3.1.8
   > Could not get resource 'http://repo-url/artifactory/libs-release/org/glassfish/ha/ha-api/3.1.8/ha-api-3.1.8.hk2-jar'.
      > Could not HEAD 'http://repo-url/artifactory/libs-release/org/glassfish/ha/ha-api/3.1.8/ha-api-3.1.8.hk2-jar'. Received status code 403 from server: Forbidden

出于某种原因,这似乎是一个问题,主要是在使用Artifactory而不是maven central/jcenter时

在中描述的解决方案

要在一个项目中使用依赖项,请执行以下操作:

configurations.all {
   resolutionStrategy.dependencySubstitution {
      all { DependencySubstitution dependency ->
        def requested = dependency.requested
        if (requested instanceof ModuleComponentSelector && requested.group == 'org.glassfish.ha' && requested.name == 'ha-api') {
          dependency.useTarget "org.glassfish.ha:ha-ap:${requested.version}@jar"
        }
      }
   }
}
用于更改库项目中的可传递依赖项,以便其他依赖于此的项目不必执行上述操作:

publications {
    foo(MavenPublication) {
        pom.withXml {
           def dependency = asNode().dependencies.dependency.find {
              it.groupId.text() == 'org.glassfish.ha' && it.artifactId.text() == 'ha-api')
           }
           dependency.appendNode('type', 'jar')       
        } 
    }
}

如果这也可以在Artifactory中完成,可能值得检查。

@tkruse,我已经包含了原始版本。