【发布时间】:2016-01-20 11:23:59
【问题描述】:
我正在尝试构建一个 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 新手,如果这是一件超级简单的事情,我深表歉意。
【问题讨论】:
标签: java intellij-idea gradle