class Buildr::Jetty6
Provides a collection of tasks and methods for using Jetty
, specifically as a server for testing your application.
Build
files should always start Jetty
by invoking the use
task, typically as a prerequisite. This task will start Jetty
once during the build, and shut it down when the build completes.
If you want to keep Jetty
running across builds, and look at error messages, you can start Jetty
in a separate console with:
buildr jetty:start
To stop this instance of Jetty
, simply kill the process (Ctrl-C) or run:
buildr jetty:stop
If you start Jetty
separately from the build, the use
task will connect to that existing server. Since you are using Jetty
across several builds, you will want to cleanup any mess created by each build. You can use the setup
and teardown
tasks, which are called when Jetty
is first used in the build, and when the build ends.
Constants
Attributes
The URL
for the Jetty
server. Leave as is if you want to use the default server (localhost:8080).
Public Class Methods
Returns an instance of Jetty
.
# File addon/buildr/jetty6.rb, line 62 def instance() @instance ||= Jetty6.new("jetty", URL) end
Public Instance Methods
Deploy a WAR in the specified URL
.
# File addon/buildr/jetty6.rb, line 142 def deploy(url, webapp) use.invoke uri = URI.parse(url) Net::HTTP.start(uri.host, uri.port) do |http| response = http.request_post("/buildr/deploy", "webapp=#{webapp}&path=#{uri.path}") if Net::HTTPOK === response && response.body =~ /Deployed/ path = response.body.split[1] puts "Deployed #{webapp}, context path #{uri.path}" if trace? path else fail "Deployment failed: #{response}" end end end
Returns true if it finds a running Jetty
server that supports the Buildr
requests for deploying, stopping, etc.
# File addon/buildr/jetty6.rb, line 126 def running?() uri = URI.parse(url) begin Net::HTTP.start(uri.host, uri.port) do |http| response = http.request_get("/buildr/") response.is_a?(Net::HTTPSuccess) && response.body =~ /Alive/ end rescue Errno::ECONNREFUSED, Errno::EBADF false end end
Starts Jetty
. This method does not return, it keeps the thread running until Jetty
is stopped. If you want to run Jetty
parallel with other tasks in the build, invoke the use
task instead.
# File addon/buildr/jetty6.rb, line 87 def start(sync = nil) begin puts "classpath #{Java.classpath.inspect}" port = URI.parse(url).port puts "Starting Jetty at http://localhost:#{port}" if verbose Java.load jetty = Java.org.apache.buildr.Jetty6Wrapper.new(port) sync << "Started" if sync sleep # Forever rescue Interrupt # Stopped from console rescue Exception=>error puts "#{error.class}: #{error.message}" end exit! # No at_exit end
Stops Jetty
. Stops a server running in a separate process.
# File addon/buildr/jetty6.rb, line 107 def stop() uri = URI.parse(url) begin Net::HTTP.start(uri.host, uri.port) do |http| http.request_post "/buildr/stop", "" end rescue Errno::ECONNREFUSED # Expected if Jetty server not running. rescue EOFError # We get EOFError because Jetty is brutally killed. end puts "Jetty server stopped" end
This task executes when the build is done. You can use it to undeploy artifacts previously deployed into Jetty
.
# File addon/buildr/jetty6.rb, line 190 def teardown(*prereqs, &block) @teardown.enhance prereqs, &block end
Undeploys a WAR from the specified URL
.
# File addon/buildr/jetty6.rb, line 161 def undeploy(url) use.invoke uri = URI.parse(url) Net::HTTP.start(uri.host, uri.port) do |http| response = http.request_post("/buildr/undeploy", "path=#{uri.path}") if Net::HTTPOK === response && response.body =~ /Undeployed/ true else fail "Deployment failed: #{response}" end end end
If you intend to use Jetty
, invoke this task. It will start a new instance of Jetty
and close it when the build is done. However, if you already have a server running in the background (e.g. jetty:start), it will use that server and will not close it down.
# File addon/buildr/jetty6.rb, line 202 def use(*prereqs, &block) @use.enhance prereqs, &block end
Protected Instance Methods
If you want to start Jetty
inside the build, call this method instead of start
. It will spawn a separate process that will run Jetty
, and will stop Jetty
when the build ends. However, if you already started Jetty
from the console (with take jetty:start), it will use the existing instance without shutting it down.
# File addon/buildr/jetty6.rb, line 212 def fire() unless running? sync = Queue.new Thread.new { start sync } # Wait for Jetty to fire up before doing anything else. sync.pop == "Started" or fail "Jetty not started" puts "Jetty started" if verbose at_exit { stop } end @setup.invoke at_exit { @teardown.invoke } end