簡體   English   中英

Gradle - >如何從WEB-INF / lib中省略一些jar

[英]Gradle -> How to omit some jars from WEB-INF/lib

我有一個帶有戰爭規范的子項目,如下所示:

war {
    from('resources')  {
        include '*.properties'
        into 'WEB-INF/classes/'
    }    
    webXml = file('src/main/webapp/WEB-INF/web.xml')
}

效果很好。 創建可部署到Tomcat的單個胖戰文件。 問題是,當部署到TomEE和JBoss時,我遇到了沖突(即使用Javax Servlet,Jersey等)。 所以我想排除一組罐子的戰爭。 我查看了Gradle war文檔,看起來我需要使用排除。 我嘗試了兩種不同的方式,並沒有將戰爭中的罐子排除在外:

war {

    // copy properties file in classes so that 
    // they may be loaded from classpath
    from('resources')  {
        include '*.properties'
        into 'WEB-INF/classes/'
    }

    // specify web xml
    webXml = file('src/main/webapp/WEB-INF/web.xml')

    // remove jars that conflict with TomEE
    exclude '**/javax.inject-1.jar'
    exclude '**/javax.servlet-2.5.0.v201103041518.jar'
    exclude '**/servlet-api-2.5.jar'
    exclude '**/validation-api-1.0.0.GA.jar'

}

這是在github上托管的NetFlix / karyon項目中的子項目(karyon-examples)中。 子項目中的依賴項如下所示:

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.0'
    runtime 'org.slf4j:slf4j-simple:1.7.0'
    compile project(':karyon-extensions')
    compile project(':karyon-admin-web')
}

我希望避免編輯諸如編譯與運行時依賴之類的內容,尤其是在其他文件和子項目中。 事實上,我試圖在上面排除的罐子在使用碼頭和常規tomcat運行時是良性的。

我只想在不使構建腳本復雜化的情況下排除這些jar。 我錯過了什么?

謝謝

顯而易見的方法是將您不希望在戰爭中使用的依賴項從compile配置移動到providedCompile ,從runtimeprovidedRuntime 應用war插件時,提供的配置將添加到您的構建中。

關於上面代碼段的另一個注意事項:我認為排除不起作用,因為您在exclude語句中引用了目標路徑,而應該只通過/servlet-api-2.5.jar引用它。

你可以這樣

dependencies {
  compile fileTree(dir: 'WebContent/WEB-INF/lib', include: ['*.jar'])
  compile("org.apache.tomcat:tomcat-jni:8.0.37")
  providedRuntime("org.apache.tomcat:tomcat-jni:8.0.37")

}

暫無
暫無

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

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