簡體   English   中英

Gradle'提供'對Java插件的依賴

[英]Gradle 'Provided' dependency for Java plugin

我正在嘗試編譯幾個WAR文件,所有這些都取決於一個常見的JAR模塊。 然而,在我的Gradle構建中,我似乎無法獲得使用Java插件的“提供”之類的依賴項。

我的編譯看起來像這樣:

apply plugin: 'java'
configurations{
    providedCompile
}

dependencies {
    compile module("org.springframework.amqp:spring-amqp:${springAmqpVersion}")
    compile module("org.slf4j:slf4j-api:${slf4jVersion}")
    compile module("org.slf4j:slf4j-ext:${slf4jVersion}")

    providedCompile "javax.servlet:servlet-api:${servletApiVersion}"

    runtime module("org.slf4j:jcl-over-slf4j:${slf4jVersion}")
    runtime module("org.slf4j:jul-to-slf4j:${slf4jVersion}")
    runtime module("org.slf4j:log4j-over-slf4j:${slf4jVersion}")

    sourceArchives module("org.springframework.amqp:spring-amqp:${springAmqpVersion}:sources")
    sourceArchives module("javax.servlet:servlet-api:${servletApiVersion}:sources")
}


sourceSets {
    main { compileClasspath += configurations.providedCompile }
}

但是,最后一位是它獲得異常的地方。 我已經嘗試在運行時依賴項擴展它之后將servlet-api(由Tomcat提供)添加到配置中,或者只是將其作為編譯模塊放入,然后將其從運行時依賴項中刪除。

我嘗試了幾種不同的修改依賴關系的方法,最接近的結果是:

newRuntime = configurations.runtime.minus(configurations.providedCompile)
configurations.runtime = newRuntime

然而,最后一點將生成具有適當依賴關系的變量newRuntime ,但是當我嘗試將變量重新分配回運行時配置時,它會拋出“找不到屬性異常”

我在Gradle的錯誤跟蹤上發現了很多關於這個確切問題的討論: Gradle-784

然而,主要的導致是來自Spring,他使用Maven和他們的gradle構建,我不熟悉。

我在SO上找到的最有希望的鏈接,但不幸的是我無法讓這些例子也能正常工作: SO提供了Stack Overflow問題的注意事項:顯示最有希望的一行:

//Include provided for compilation
sourceSets.main.compileClasspath += configurations.provided

此行不會像其他嘗試一樣給出錯誤,但似乎提供的Compile(我提供的版本)依賴項實際上並未放在編譯類路徑上,因為嘗試編譯時會出現類路徑錯誤。

我不是100%關注你的消息,但提供的編譯僅允許'war'插件。

apply plugin: 'war'

dependencies {
  // others go here
  providedCompile "javax.servlet:javax.servlet-api:${servletVersion}"
}

在“war”步驟中,不包括servlet jar。

您已添加了providedCompile配置,但您沒有對其執行任何操作。 因此它不會在任何類路徑上。 要將配置放在主編譯類路徑上,您可以執行以下操作:

sourceSets.main.compileClasspath += configurations.providedCompile

同樣,將它放在測試編譯類路徑上:

sourceSets.test.compileClasspath += configurations.providedCompile

您可以在'war'模塊中使用編譯范圍,在'war'模塊中使用providedCompile

War 提供的 Compile范圍將覆蓋jar的編譯范圍。

暫無
暫無

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

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