Sunday, March 25, 2012

run jetty on dependency resolved war in gradle



Background:
  • test classes(such as selenium tests) are in an independent module(maven project, etc.).
  • have an external dependency(mave, ivy, etc) to war file(s)
  • want to run jetty on dependent war file(s)
Gradle can start up jetty on dependency resolved war file(s).

// Run Jetty on dependency resolved war file
//
// you can run multiple wars with different configuration by
// adding more task definitions.
//
import org.gradle.api.plugins.jetty.JettyRunWar
apply plugin: 'java'
apply plugin: 'jetty'
repositories {
mavenCentral()
}
configurations {
// define custom dependency configuration for war file
myWebApp
}
dependencies {
// add war file dependency to my custom configuration
myWebApp "org.some:my-app:1.0@war"
}
task runMyWebApp(type: JettyRunWar) {
// specify the resolved war file
webApp = configurations.myWebApp.singleFile
// more configuration
httpPort = 8001
contextPath = 'myWebApp'
}
view raw build.gradle hosted with ❤ by GitHub

When you want to run your tests after jetty started, set "daemon=true" and make the test task depends on your new run-war task.


Monday, March 5, 2012

run multiple jetty in gradle


Background:
I have a selenium test suite for end-to-end web testing.
Currently, it is running on jenkins box but it is taking so long to finish all the tests.
So, next step is to parallelize the selenium tests.
As a first step, I need to start multiple jetty servers using different port.

With Gradle jetty plugin, I camp up how to run the multiple jetty servers before tests.

// start multiple jetties before test
//
// useful for parallel web end-to-end testing
//
import org.gradle.api.plugins.jetty.JettyRun
apply plugin: 'java'
apply plugin: 'jetty'
repositories {
mavenCentral()
}
// configuration for each jetty server
def jettyConfigs = [
[port:8001],
[port:8002]
]
def jettyMultiRunTasks = []
// create jetty tasks and assign them
jettyConfigs.eachWithIndex {jettyConfig, index ->
jettyMultiRunTasks << task("jettyMultiRun-${index}", type: JettyRun) {
httpPort = jettyConfig.port
daemon = true
// more configuration to specify each jetty to use different env...
}
}
test {
// start jetties before running tests
dependsOn(jettyMultiRunTasks)
// more test options such as maxParallelForks, etc.
}
view raw build.gradle hosted with ❤ by GitHub