java - name - Gradle: ¿Cómo excluir JAR de un WAR?
gradle war name (4)
Tengo una estructura de compilación Gradle de varios proyectos, donde el proyecto hijo depende de un JAR, que no quiero estar en el archivo WAR. Intenté "excluir" pero no funciona.
El guión principal del proyecto:
apply plugin: ''war''
war {
dependencies {
runtime (project('':childProject'')) {
exclude group: ''javax.servlet.jsp'', module: ''jsp-api''
}
}
}
El script childProject:
apply plugin: ''java''
dependencies {
compile ''javax.servlet.jsp:jsp-api''
}
De la documentación de Gradle.
El plugin War agrega dos configuraciones de dependencia: allowedCompile y el tiempo de ejecución. Esas configuraciones tienen el mismo alcance que las configuraciones de compilación y tiempo de ejecución respectivas, excepto que no se agregan al archivo WAR.
Por lo tanto, en otras palabras, agregar una entrada a la Compilación providedCompile
o al Tiempo de providedCompile
providedRuntime
hará que esa dependencia sea excluida del archivo war.
- use
providedCompile
si tiene una fuente que se basa en algunas clases para compilar - use el
providedRuntime
si lo usa para probar y no compilar.
http://www.gradle.org/docs/current/userguide/war_plugin.html
Ejemplo
providedCompile "javax.servlet:servlet-api:2.5"
Lo estoy haciendo de esta manera.
war {
rootSpec.exclude("**/some-*.jar")
}
Me di cuenta de que la compilación proporcionada a veces presentaba problemas de dependencias para mí, por ejemplo, algunas clases no se encuentran. Entonces me di cuenta de una solución más flexible.
Solo podemos configurar las dependencias requeridas como ''compilar'' y luego excluir archivos específicos del archivo war usando la siguiente configuración war:
war {
classpath = classpath.filter { file ->
println file.name
(
!file.name.startsWith(''gwt-dev'') &&
!file.name.startsWith(''gwt-user'') &&
!file.name.startsWith(''guava-gwt'') &&
!file.name.startsWith(''gwtbootstrap3'') &&
!file.name.startsWith(''gwtbootstrap3-extras'') &&
!file.name.startsWith(''servlet-api'')
)
}
}
Hasta ahora, encontré que esta es la solución más limpia para mí. Espero que ayude.
Tuve el mismo problema pero encontré una solución genérica basada en la de Jake W.
En su proyecto hijo, sin el plugin de guerra, agregue su propia Compilación proporcionada y Tiempo de ejecución proporcionado de esta manera:
configurations {
providedCompile
providedRuntime.extendsFrom providedCompile
}
plugins.withId(''java'') {
configurations {
compile.extendsFrom providedCompile
runtime.extendsFrom providedRuntime
}
}
En el proyecto con su archivo de guerra, copie esto en cualquier lugar que desee:
configurations.runtime.allDependencies.withType(ProjectDependency) { ProjectDependency dep ->
Project proj = dep.dependencyProject
evaluationDependsOn(proj.path)
Configuration cfg = proj.configurations.findByName(''providedRuntime'')
if (cfg != null){
war {
classpath -= cfg
}
}
}