2011-11-02 7 views
7

Tengo el proyecto básico de la aplicación web Gradle y funciona bien, pero noté que el classpath en tiempo de ejecución de Gradle se incluye en el embarcadero, lo que puede entrar en conflicto con las aplicaciones web .Excluir el tiempo de ejecución de classpath de Gradle al ejecutar JettyRun

Observe a continuación que gradle está utilizando una versión ligeramente anterior del logback y que SL4J advierte que encontró enlaces múltiples en el classpath.

:jettyRun 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/C:/dev/java/tools/gradle-1.0-milestone-5/lib/logback-classic-0.9.29.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/C:/Users/kirk.rasmussen/.gradle/caches/artifacts-3/ch.qos.logback/logback-classic/fd9fe39e28f1bd54eee47f04ca040f2b/jars/logback-classic-0.9.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 

¿Hay una manera de excluir la ruta de clases de tiempo de ejecución Gradle de ser incluido cuando se ejecuta la tarea jettyRun? Estoy usando la última versión 1.0 de hito 5 de Gradle.

Estoy buscando algo en la línea de 'includeAntRuntime' en la tarea javac en Ant.

http://ant.apache.org/manual/Tasks/javac.html

includeAntRuntime si desea incluir las bibliotecas de tiempo de ejecución de hormigas en la ruta de clase; el valor predeterminado es sí, a menos que se establezca build.sysclasspath. Por lo general, es mejor configurar esto en falso para que el comportamiento del script no sea sensible al entorno en el que se ejecuta.

Pelado abajo build.gradle:

apply plugin: 'groovy' 
apply plugin: 'war' 
apply plugin: 'jetty' 

jettyRun { 
    contextPath = '' 
} 

Respuesta

2

Como se describe en la tarea manual for jettyRun, tiene una propiedad classpath que es, por defecto, a project.sourceSets.main.runtimeClasspath. Usted sólo puede establecer esta propiedad en la ruta de clase de su elección:

configurations{ 
    myJettyRuntime 
} 

dependencies{ 
    myJettyRuntime "group:name:version" 
    ... 
} 

jettyRun{ 
    classpath = configurations.myJettyRuntime 
} 

, alternativamente, se puede añadir o restar dependencias que no sean necesarios o conflictivos de esta ruta de clases, usando -= y += operadores respectivamente.

jettyRun{ 
    classpath -= configurations.myExcludedConf 
} 
+0

Gracias es una buena idea, pero sería aún mejor si esto se construyó en la funcionalidad, así que no tengo que determinar qué cosas deben ser excluidas. No estoy convencido de que lo que sugiera funcionaría porque la documentación implica que es aditivo. La classpath Gradle parece que podría venir para el viaje. ¿Hay alguna buena razón por la que el plugin jetty necesita la classpath de Gradle para iniciar el contenedor? –

+0

He utilizado con éxito '- =' en 'sourceSet.main.compileClasspath', por lo que debería funcionar de la misma manera para jetty classpath. No sé por qué y por qué motivo gradle incluye su propio classpath. El manual sugiere que, de forma predeterminada, el classpath se establece en 'project.sourceSets.main.runtimeClasspath', que debe ser el classpath de su aplicación y no de gradle. Si el problema persiste con la última versión gradle, entonces solo puedo sugerirle que presente un informe de error. – rodion

Cuestiones relacionadas