Java Gradle忽略从artifacts pom.xml检索时提供的配置的可传递依赖项

Java Gradle忽略从artifacts pom.xml检索时提供的配置的可传递依赖项,java,gradle,pom.xml,dependency-management,Java,Gradle,Pom.xml,Dependency Management,我的基于java的项目是使用gradle构建的。构建脚本对jar具有编译依赖关系 dependencies { compile 'com.group:artificat:1.2.3' } 在工件库中存在以下工件pom.xml-1.2.3.jar <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http:

我的基于java的项目是使用gradle构建的。构建脚本对jar具有编译依赖关系

dependencies {
  compile 'com.group:artificat:1.2.3'
}
在工件库中存在以下工件pom.xml-1.2.3.jar

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.group</groupId>
    <artifactId>artifact</artifactId>
    <version>1.2.3</version>
    <dependencies>
        <dependency>
          <groupId>org.jboss.spec.javax.ejb</groupId>
          <artifactId>jboss-ejb-api_3.1_spec</artifactId>
          <version>1.0.2.Final-redhat-3</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.jboss.spec.javax.servlet</groupId>
          <artifactId>jboss-servlet-api_3.0_spec</artifactId>
          <version>1.0.2.Final-redhat-2</version>
          <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

这个问题有更好的解决办法吗?

我怀疑这是否是一个渐变问题。(您是否看到了与
mvn
相同的问题?)。它是
提供的
。根据“这与compile非常相似,但表示您希望JDK或容器在运行时提供依赖关系。”特别是,“此作用域仅在编译和测试类路径上可用,并且不可传递。”


如果需要这些依赖项进行编译,则必须按照提供的方式显式列出它们。否则,如果依赖项是指在运行时插入的依赖项,则可能会引入错误的依赖项。我会谨慎地引入名称中带有“redhat”的编译时依赖项。

根据Maven POM参考,
提供的
依赖项是不可传递的:

提供了-这与compile非常相似,但表示您希望使用JDK 或者在运行时提供它的容器。它仅在 编译和测试类路径,并且不可传递

您应该明确地声明这些依赖项(正如您所做的那样)

根据经验,如果您的应用程序在没有工件的情况下无法编译,那么该工件应该作为显式依赖项列出

否则,当这个可传递依赖项不再包含在构建中时,您就会遇到麻烦。考虑:

  • X依赖于Y
  • 您声明了对X的依赖关系
  • 您使用来自Y的类
  • 您升级到不再依赖于Y的新版本X
  • 由于您没有对Y的显式依赖,因此构建中断

  • 这不是格拉德尔的问题。
    dependencies {
     provided 'org.jboss.spec.javax.ejb:jboss-ejb-api_3.1_spec:1.0.2.Final-redhat-3'
     provided 'org.jboss.spec.javax.servlet:jboss-servlet-api_3.0_spec:1.0.2.Final-redhat-2'
    }