2013-04-05 36 views
8

Mam podprojektu ze spec wojennej, która wygląda następująco:Gradle -> Jak pominąć kilka słoików z WEB-INF/lib

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

działa świetnie. Tworzy pojedynczy, gruby plik wojenny, który można rozmieścić na serwerze Tomcat. Problem polega na tym, że podczas wdrażania do TomEE i JBoss występują konflikty (np. Z Javaxem Servletem, Jersey itp.). Więc chcę wykluczyć zestaw słoików z wojny. Spojrzałem na dokumentację wojny w Gradle i wygląda na to, że muszę w tym celu użyć wykluczeń. Próbowałem ją na dwa różne sposoby, a słoiki nie są wyłączone z wojny:

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' 

} 

Jest w podprojektu (Karyon-examples) w ramach projektu Netflix/Karyon hostowane na github. Zależności w podprojekcie wyglądać następująco:

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

I chcę, aby uniknąć edycji rzeczy jak skompilować versus zależności wykonawczych, zwłaszcza w innych plikach i podprojektów. W rzeczywistości słoiki, które próbuję wykluczyć powyżej, są łagodne, gdy biegną z pomostem i regularnym kocurem.

Po prostu chcę wyłączyć te słoiki bez komplikowania skryptów kompilacji. czego mi brakuje?

Dzięki

Odpowiedz

8

oczywistym sposobem jest przenieść zależności, których nie chcesz mieć w swojej wojnie z konfiguracji compile do providedCompile iz runtime do providedRuntime. dostarczone konfiguracje są dodawane do twojej kompilacji, gdy wtyczka wojny zostanie zastosowana.

Jeszcze jedna uwaga na powyższym fragmencie: Myślę, że wykluczenie nie działa, ponieważ odwołujesz się do ścieżki docelowej w instrukcjach wykluczania, powinieneś po prostu odwołać się do niej przez /servlet-api-2.5.jar.

+2

@rob - 'providedRuntime' jest chyba do zrobienia. Oznacza to po prostu, że biblioteka nie zostanie dodana do pliku wojny. Możesz użyć 'exclude', ale niestety jest to nieudokumentowane i bardzo mylące, dokładnie jak to zrobić. – david

0

można w ten sposób

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

}

Powiązane problemy