2013-04-05 55 views
8

一些罐子我有一戰的規格看起來像這樣的一個子項目:搖籃 - >如何省略掉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 { 

    // 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 /細胞核項目中的一個子項目(細胞核-例子)。在子項目的依賴關係是這樣的:

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運行時是良性的。

我只想排除這些罐子而不會使構建腳本複雜化。我錯過了什麼?

感謝

回答

8

明顯的路要走是從compile配置打動你不想有依賴關係在你的戰爭providedCompileruntimeprovidedRuntime。所提供的配置會在應用war插件時添加到您的版本中。

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

+2

@rob - 'providedRuntime'可能是要走的路。這只是意味着庫不會被添加到war文件中。你可能可以使用'exclude',但不幸的是它沒有記錄,並且很清楚如何去做。 – david 2013-04-06 17:16:11

0

,你可以用這種方式

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") 

}