[英]Gradle provided dependencies with Intellij
我正在嘗試構建Bukkit插件。 該插件還使用exp4j 。 最終結果需要在已發布的jar中包含exp4j代碼,但不包含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導入任何內容都會導致它錯誤地報告錯誤。
我如何才能獲得提供的依賴關系,使其與想法很好地配合?
我也嘗試過聲明提供的范圍,如下所示:
configurations {
provided
compile.extendsFrom provided
}
但這會導致將提供的依賴項復制到最終的jar中。 我還按照此答案的建議嘗試了插件,但是兩者都導致Bukkit被復制到創建的jar中。 我進一步嘗試聲明將Bukkit改為提供運行時范圍,但這只是引起了很多編譯錯誤(但有趣的是Intellij確實將Bukkit列為依賴項)
我很難相信以前沒有問過這個問題,但是我已經搜索過並且無法找到完整的解決方案。 我是Gradle的新手,如果這是一件非常簡單的事情,請您道歉。
在搖籃2.12后來,有一個稱為配置compileOnly
有你正在尋找提供的語義。
有關此主題的Gradle博客文章 ,更多有關此配置的信息 。
在2.12之前,您可以使用nebula.provided-base
插件創建具有所有正確語義的provided
配置。
請參閱此處的Gradle問題 。
gradle中沒有提供的配置,盡管實際上應該有一個。 當前,最合理的解決方法似乎是創建自己的配置:
configurations {
provided
}
接着:
sourceSets {
main {
compileClasspath += configurations.provided
}
}
extendsFrom
的問題在於,所提供的依賴項無論如何都將最終捆綁在您的發行版中,除非您添加另一個顯式排除, extendsFrom
了所提供的要點。
編輯:為了告訴想法使用提供的依賴項,您可以應用'idea'
插件,然后:
idea {
module {
scopes.PROVIDED.plus += [ configurations.provided ]
}
}
我確實找到了一個非常棘手的解決方案。 但這太糟糕了,我在這里發布它感到很遺憾:P
顯而易見的問題是,使用您的項目的任何人都必須執行相同的操作。 每次重新生成想法文件時,都必須重復同樣的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.