name java jar gradle war

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