当前位置: 首页 > 知识库问答 >
问题:

Java插件的分级“提供”依赖关系

殳阳飙
2023-03-14

我正在尝试编译几个WAR文件,所有这些都依赖于一个公共的JAR模块。然而,在我的Gradle构建中,我似乎无法获得类似于“提供”的依赖关系来使用Java插件。

apply plugin: 'java'
configurations{
    providedCompile
}

dependencies {
    compile module("org.springframework.amqp:spring-amqp:${springAmqpVersion}")
    compile module("org.slf4j:slf4j-api:${slf4jVersion}")
    compile module("org.slf4j:slf4j-ext:${slf4jVersion}")

    providedCompile "javax.servlet:servlet-api:${servletApiVersion}"

    runtime module("org.slf4j:jcl-over-slf4j:${slf4jVersion}")
    runtime module("org.slf4j:jul-to-slf4j:${slf4jVersion}")
    runtime module("org.slf4j:log4j-over-slf4j:${slf4jVersion}")

    sourceArchives module("org.springframework.amqp:spring-amqp:${springAmqpVersion}:sources")
    sourceArchives module("javax.servlet:servlet-api:${servletApiVersion}:sources")
}


sourceSets {
    main { compileClasspath += configurations.providedCompile }
}
newRuntime = configurations.runtime.minus(configurations.providedCompile)
configurations.runtime = newRuntime

然而,最后这一位将生成具有适当依赖关系的变量newRuntime,然而,当我试图将该变量重新分配回运行时配置时,它抛出一个“无法找到属性异常”。

我在Gradle的bug跟踪中发现了很多关于这个问题的讨论:Gradle-784

然而,这方面的主要线索来自Spring,他使用Maven来构建他们的gradle构建,我对此并不熟悉。

我在这里找到的最有希望的链接是SO,但不幸的是,我无法使示例也起作用:SO为堆栈溢出问题提供了一个值得注意的问题,显示最有希望的行:

//Include provided for compilation
sourceSets.main.compileClasspath += configurations.provided

这一行并不像其他尝试那样给出错误,但是providedCompile(我的provided版本)依赖项实际上并没有放在compile类路径上,因为在尝试编译时会出现类路径错误。

共有1个答案

耿俊
2023-03-14

我不是百分之百的跟随你的消息,但providedCompile只允许‘战争’插件。

apply plugin: 'war'

dependencies {
  // others go here
  providedCompile "javax.servlet:javax.servlet-api:${servletVersion}"
}

在“war”步骤中,不包括servlet jar。

 类似资料:
  • 在Java中开发Gradle插件所需要的确切依赖是什么?理想情况下,我希望从一个著名的存储库(如Maven Central或类似的存储库)获取它。 我有一个具有核心功能的Maven项目,我刚刚添加了两个额外的插件,一个用于Ant,一个用于Maven。它们已经经过测试并正在工作;放轻松!现在,我想为Gradle插件添加第三个模块,以使该功能也可从任何Gradle项目中获得。 null 如果有人能告诉

  • 我有一个gradle构建,它依赖于一个在buildSrc目录中编译的插件(MyTools)。这部分工作正常。我遇到的问题是试图从外部jar导入一个类以在myTools插件的源代码中使用。 我的目录结构如下: buildsrc ----build.gradle -----build.gradle -----settings.gradle -------libs -------Yuicompresso

  • 我正在尝试得到一个新的项目,并使用一个私人的artifactory gradle repo运行。我能够通过artifactory获得它解析工件,但是当我尝试将spring io&boot引入混合时,spring依赖项管理插件似乎没有在请求依赖项时添加版本,导致构建失败: 我可以在https://my-website.com/artifactory/gradle-release/org/spring

  • 在gradle构建的部分中声明存储库和在构建的根级别中声明存储库有什么区别。 或 Build.Gradle:

  • 我正在尝试构建一个Bukkit插件。该插件还使用exp4j。最终结果需要在发布的jar中包含exp4j代码,但不包含Bukkit代码。 我按照这个答案的建议将依赖项复制到中,并使用这个答案将Bukkit声明为已提供。我的build.gradle现在看起来像这样: 这非常有效,我可以从命令行使用Gradle愉快地构建和运行项目。问题在于Intellij(或者可能是Gradle idea插件)无法识别

  • 我目前正在尝试将一个通过RFC连接到SAP系统的旧Java EE解决方案迁移到Quarkus。由于项目使用maven,我再次面临sapjco3的问题。来自SAP的jar库,防止该库被重命名。如果我像那样添加库作为依赖项 它将被添加到lib目录中,名称为com.sap.sapjco3-3.1.jar.不幸的是,最终以异常结束 JAVAlang.ExceptionInInitializerError: