gpt4 book ai didi

java - Gradle 提供了对 Intellij 的依赖

转载 作者:行者123 更新时间:2023-11-30 06:55:50 25 4
gpt4 key购买 nike

我正在尝试构建一个 Bukkit 插件。该插件还使用 exp4j . 最终结果需要在发布的 jar 中包含 exp4j 代码,但包含 Bukkit 代码。

我听从了 this answer 的建议复制依赖项并使用 this answer按照提供的方式声明 Bukkit。我的 build.gradle 现在看起来像这样:

apply plugin: 'java'
apply plugin: 'idea'

configurations {
provided
}

sourceSets {
main.compileClasspath += configurations.provided
test.compileClasspath += configurations.provided
test.runtimeClasspath += configurations.provided
}

dependencies {
provided "org.bukkit:bukkit:1.8.8-R0.1-SNAPSHOT"
compile "net.objecthunter:exp4j:0.4.5"
}

jar {
// copy the dependencies across
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}

效果很好,我可以从命令行使用 Gradle 愉快地构建和运行项目。问题在于 Intellij(或者可能是 Gradle idea 插件)无法识别提供的依赖项,因此,从 Bukkit 导入任何内容都会导致它错误地报告错误。

如何获得提供的依赖项以很好地与 idea 配合使用?

我尝试过的其他事情:

我也试过像这样声明提供的范围:

configurations {
provided
compile.extendsFrom provided
}

但这会导致提供的依赖项被复制到最终的 jar 中。我也尝试过 this answer 推荐的插件,但两者都会导致 Bukkit 被复制到创建的 jar 中。我进一步尝试将 Bukkit 声明为运行时范围而不是提供,但这只会导致很多编译错误(但有趣的是 Intellij 确实将 Bukkit 列为依赖项)

我很难相信以前没有人问过这个问题,但我已经搜索过但找不到完整的解决方案。我是 Gradle 的新手,如果这是一件非常简单的事情,我深表歉意。

最佳答案

在 Gradle 2.12 及更高版本中,有一个名为 compileOnly 的配置,它具有您正在寻找的提供的语义。

有关此配置的更多信息,请访问 Gradle blog post关于这个问题。

2.12之前,可以使用nebula.provided-base plugin创建具有所有正确语义的提供的配置。

关于java - Gradle 提供了对 Intellij 的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com