我正在尝试构建一个 Bukkit 插件。该插件还使用exp4j. 最终结果需要将 exp4j 代码包含在发布的 jar 中,但是not包含 Bukkit 代码。
我听从了建议这个答案复制依赖项并使用这个答案按规定申报 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 中。我也尝试过推荐的插件这个答案,但两者都会导致 Bukkit 被复制到创建的 jar 中。我进一步尝试将 Bukkit 声明为运行时范围,而不是提供,但这只会导致大量编译错误(但有趣的是 Intellij 确实将 Bukkit 列为依赖项)
我很难相信以前没有人问过这个问题,但我已经搜索过但找不到完整的解决方案。我是 Gradle 新手,如果这是一件超级简单的事情,我很抱歉。
在 Gradle 2.12 及更高版本中,有一个配置称为compileOnly
具有provided您正在寻找的语义。
有关此配置的更多信息,请访问Gradle 博客文章就此主题而言。
在2.12之前,您可以使用nebula.provided-base
plugin创建一个provided
具有所有正确语义的配置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)