2011-11-25 14 views
8

Quiero ejecutar Jetty 7+ con gradle build, pero desafortunadamente parece que no hay forma de hacerlo con jettyRun. Así que probablemente la idea más sencilla de lograr lo que quiero sería utilizar objetivo de encargo:¿Cómo ejecutar el embarcadero 7+ con una guerra específica con groovy/gradle?

task runJetty << { 
    def server = new Server() 
    // more code here 
    server.start() 
    server.join() 
} 

mala suerte acabo de empezar con Gradle y no sé ya sea maravilloso, así que es difícil para mí para crear destino adecuado. Estaba buscando en Internet, pero no pude encontrar ninguna solución. ¿Alguien puede golpearme con un código groovy de muestra que puede ejecutar el jar existente con embarcadero?

+0

posible duplicado de [¿Hay alguna forma fácil de ejecutar muelle 8 de Gradle (como con jettyRun)? ] (http://stackoverflow.com/questions/8263168/is-there-any-easy-way-to-run-jetty-8-from-gradle-like-with-jettyrun) –

Respuesta

14

Bueno, he encontrado la manera de ejecutarlo utilizando embarcadero directamente desde el repositorio:

jettyVersion = "8.1.0.RC0" 

configurations { 
    jetty8 
} 

dependencies { 
    jetty8 "org.mortbay.jetty:jetty-runner:$jettyVersion" 
} 

task runJetty8(type: JavaExec) { 
    main = "org.mortbay.jetty.runner.Runner" 
    args = [war.archivePath] 
    classpath configurations.jetty8 
} 
+0

¿Cómo puedo crear una tarea que utiliza Jetty 8 e imita a jettyRunWar que empaqueta la guerra y la implementa en el servidor? –

+0

¿Cómo se especifica la ruta de contexto? Intenté --path contextPath. No funciona Puedo ver esto en los registros: o.j.w.WebAppContext {/, null} – singhspk

1

embarcadero plug-in compatible con embarcadero 6.1.25 en la actualidad

Puede usar algo como esto:

jettyRoot = '/path/to/your/jetty/root' 
task runJetty7 << { 
    description = "Runs jetty 7" 
    ant.java(dir: jettyRoot, jar: jettyRoot + '/start.jar', failOnError: 'true', fork: 'true') { 
    classpath { 
     ... 
    } 
    } 
} 
+0

Sí, sé que es posible hazlo de esta manera, pero no me gusta esta línea: "jettyRoot = '/ path/to/your/jetty/root'". ¿Es posible agregar embarcadero como dependencia de tiempo de ejecución y de alguna manera obtener la ruta donde gradle lo guardó (después de recuperar)? –

+0

Se podría añadir embarcadero 7 como una dependencia: configuraciones { jetty7 } { dependencias jetty7 "org.mortbay.jetty: amarre: +" } ext.jettyRoot = configurations.jetty7 –

3

Aquí hay una versión que funciona, usando las tareas de embarcadero. Esto finalmente me permitió el control adecuado con deamon = true.

configurations { jetty } 
dependencies { jetty 'org.eclipse.jetty:jetty-ant:9.0.4.v20130625' } 
task jetty(dependsOn: build) << { 
    ant.taskdef(name: 'jettyRun', classname: 'org.eclipse.jetty.ant.JettyRunTask', classpath: configurations.jetty.asPath, loaderref: "jetty.loader") 
    ant.typedef(name: "connector", classname: "org.eclipse.jetty.ant.types.Connector", classpath: configurations.jetty.asPath, loaderref: "jetty.loader") 
    ant.jettyRun(daemon:true, stopPort: 8999, stopKey: "STOP") { 
     webApp(war: THE_WAR_PRODUCING_TASK.archivePath, contextPath: '/context') 
     connectors { connector(port: 9000) } 
     systemProperties { 
      systemProperty(name: 'environment.type', value: 'development') 
     } 
    } 
} 
task jettyStop << { 
    ant.taskdef(name: 'jettyStop', classname: 'org.eclipse.jetty.ant.JettyStopTask', classpath: configurations.jetty.asPath) 
    ant.jettyStop(stopPort: 8999, stopKey: "STOP") 
} 
+0

No veo que se proporcione ninguna dirección IP aquí. Mi objetivo principal es conectar mi servicio web a través de otros dispositivos en la misma área local. – masiboo

Cuestiones relacionadas