2011-11-25 58 views
8

我想用Gradle構建運行Jetty 7+,但看起來不幸似乎沒有辦法使用jettyRun做到這一點。所以,可能最簡單的想法,以達到我想要的是使用自定義的目標:如何使用groovy/gradle與指定的戰爭運行jetty 7+?

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

倒黴的我剛開始gradle這個,我不知道常規要麼,所以這對我來說很難創造適當的目標。我正在查看互聯網,但我無法找到任何解決方案。 任何人都可以打我一些示例groovy代碼,可以運行與碼頭現有的jar?

+0

的[可能重複有沒有簡單的方法來運行碼頭8從gradle這個(就像jettyRun)? ](http://stackoverflow.com/questions/8263168/is-there-any-easy-way-to-run-jetty-8-from-gradle-like-with-jettyrun) –

回答

14

好吧,我發現瞭如何使用直接從碼頭到倉庫運行:

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

我怎樣才能創建一個使用Jetty 8的任務,並模仿jettyRunWar打包戰爭並將其部署到服務器? –

+0

你如何指定上下文路徑?我試過--path contextPath。它不起作用。我可以在日誌中看到這一點:o.e.j.w.WebAppContext {/,null} – singhspk

1

碼頭插件支持碼頭6.1.25目前

您可以使用這樣的事情:

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

是的,我知道它有可能這樣做,但我不喜歡這一行:「jettyRoot ='/ path/to/your/jetty/root'」。是否有可能添加jetty作爲運行時依賴,並以某種方式獲取gradle保存它的路徑(獲取後)? –

+0

您可以添加碼頭7作爲一個依賴: 配置{ jetty7 } 依賴{ jetty7 「org.mortbay.jetty:碼頭:+」 } ext.jettyRoot = configurations.jetty7 –

3

這是一個使用jetty ant任務的工作版本。這終於使我用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

我沒有看到任何IP地址在這裏給出。我的主要目標是通過同一地區的其他設備連接我的網絡服務。 – masiboo