2013-04-05 12 views
8

ich wegzulassen habe ein Teilprojekt mit einem Krieg spec, die wie folgt aussieht:Gradle -> Wie einige Gläser aus WEB-INF/lib

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

Arbeiten groß. Erstellt eine einzelne, fette War-Datei, die in Tomcat bereitgestellt werden kann. Problem ist, wenn ich auf TomEE und JBoss versetze, laufe ich auf Konflikte (dh mit Javax Servlet, Jersey, usw.). Also möchte ich eine Reihe von Gläsern von der Kriegsführung ausschließen. Ich habe mir die Gradle-Kriegsdokumentation angesehen, und es sieht so aus, als müsste ich Ausschlüsse dafür verwenden. Ich versuchte es zwei verschiedene Arten, und die Gläser werden nicht aus dem Krieg ausgeschlossen:

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' 

} 

Dieses in einem Teilprojekt ist (karyon-Beispiele) innerhalb des NetFlix/karyon Projekt auf Github gehostet. Die Abhängigkeiten im Teilprojekt wie folgt aussehen:

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') 
} 

Und ich will Bearbeitung Dinge vermeiden, wie im Vergleich zu Laufzeit Abhängigkeiten kompilieren, vor allem in anderen Dateien und Unterprojekte. In der Tat sind die Gläser, die ich oben ausschließen möchte, gutartig, wenn sie mit Anlegesteg und normalem Kater laufen.

Ich möchte einfach diese Gläser ausschließen, ohne die Build-Skripte zu verkomplizieren. Was vermisse ich?

Dank

Antwort

8

der offensichtliche Weg zu gehen, um die Abhängigkeiten bewegen Sie von der compile Konfiguration providedCompile im Krieg haben wollen, nicht und runtime-providedRuntime. Die bereitgestellten Konfigurationen werden Ihrem Build hinzugefügt, wenn das War-Plugin angewendet wird.

Noch eine Anmerkung zu Ihrem Code oben: Ich denke, der Ausschluss funktioniert nicht, weil Sie den Zielpfad in Ihren Exclude-Anweisungen referenzieren, stattdessen sollten Sie ihn einfach mit /servlet-api-2.5.jar referenzieren.

+2

@ Rob - 'providedRuntime' ist wahrscheinlich der Weg zu gehen. Es bedeutet nur, dass die Bibliothek nicht zur Kriegsdatei hinzugefügt wird. Sie können möglicherweise 'exclude' verwenden, aber leider ist es undokumentiert und sehr verwirrend, wie genau es gemacht wird. – david

0

Sie können auf diese Weise

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

}