簡體   English   中英

Gradle提供了Intellij的依賴

[英]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

  1. 將提供的依賴項聲明為運行時依賴項
  2. 重新生成想法文件:gradle cleanIdea idea
  3. 創意現在應該認識到依賴
  4. 將提供的依賴項更改回提供的
  5. 進入項目設置並將所有依賴項與運行時范圍轉換為Intellij提供的范圍
  6. 東西起作用:)(只是永遠不要重新生成想法文件)

顯而易見的問題是,使用您的項目的任何人都必須執行相同的操作。 每次重新生成想法文件時,都必須重復同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM