Index: tasks/war.rake
===================================================================
--- tasks/war.rake	(revision 477)
+++ tasks/war.rake	(working copy)
@@ -2,14 +2,6 @@
 # Rake tasks for building a war file
 #
 
-# add the lib to the load path
-plugin_dir = File.dirname(File.dirname(File.expand_path(__FILE__)))
-$LOAD_PATH <<  File.join(plugin_dir, 'lib')
-
-# load the library
-require 'create_war'
-require 'run'
-
 # aliases for the tasks
 task 'create_war' => ['war:standalone:create']
 task 'create_war:standalone' => ['war:standalone:create']
@@ -19,37 +11,42 @@
 task 'war:shared' => ['war:shared:create']
 task 'tmp:war:clean' => ['tmp:war:clear']
 
-# create a standalone package
+task 'war:init' => [:environment] do
+  # load the library
+  require 'create_war'
+  require 'run'
+end
+
 desc 'Create a self-contained Java war'
-task 'war:standalone:create' do
+task 'war:standalone:create' => ['war:init'] do
   creator = War::Creator.new
   creator.standalone = true
   creator.create_war_file
 end
 
-# assemble the files for a standalone package
-task 'war:standalone:assemble' do
+desc "Assemble the files for a standalone package"
+task 'war:standalone:assemble' => ['war:init'] do
   creator = War::Creator.new
   creator.standalone = true
   creator.assemble
 end
 
-# create a shared package
 desc 'Create a war for use on a Java server where JRuby is available'
-task 'war:shared:create' do
+task 'war:shared:create' => ['war:init'] do
   creator = War::Creator.new
   creator.standalone = false
   creator.create_war_file
 end
 
-# clean up
 desc "Clears all files used in the creation of a war"
-task 'tmp:war:clear' do
+task 'tmp:war:clear' => ['war:init'] do
   War::Creator.new.clean_war
 end
 
-# run the war file with jetty
-desc "Run the webapp in Jetty"
-task 'war:standalone:run' => ['war:standalone:assemble'] do
+desc "Run the webapp in Jetty without assembling (significantly faster)"
+task 'war:standalone:run_no_assemble' => ['war:init'] do
   War::Runner.new.run_standalone
-end
\ No newline at end of file
+end
+
+desc "Run the webapp in Jetty"
+task 'war:standalone:run' => ['war:standalone:run_no_assemble', 'war:standalone:assemble']
Index: lib/war_config.rb
===================================================================
--- lib/war_config.rb	(revision 477)
+++ lib/war_config.rb	(working copy)
@@ -48,11 +48,22 @@
     # the real separator for the operating system
     attr_accessor :os_separator
     attr_accessor :os_path_separator
+    
+    attr_accessor :jetty_port
+    attr_accessor :jetty_java_opts
+    
+    def self.get
+      @@instance ||= Configuration.new
+    end
+    
+    def self.define
+      yield @@instance
+    end
 
     def initialize
-
+      @@instance = self
+      
       # default internal locations
-      @rails_basedir = File.dirname(File.dirname(File.dirname(File.dirname(File.dirname(File.expand_path(__FILE__))))))
       @staging = File.join('tmp', 'war')
       @excludes = []
       @local_java_lib = File.join('lib', 'java')
@@ -72,7 +83,7 @@
       @maven_remote_repository = 'http://www.ibiblio.org/maven2'
 
       # configured war name, defaults to the same as the ruby webapp
-      @name = File.basename(@rails_basedir)
+      @name = File.basename(RAILS_ROOT)
       @war_file = "#{@name}.war"
 
       @java_libraries = {}
@@ -99,6 +110,10 @@
       add_jetty_library(maven_library('org.mortbay.jetty', 'jetty-plus', '6.1.1'))
       add_jetty_library(maven_library('org.mortbay.jetty', 'jetty-naming', '6.1.1'))
       
+      # default jetty settings
+      @jetty_port = 8080
+      @jetty_java_opts = ENV['JAVA_OPTS'] || ''
+      
       # separators
       if RUBY_PLATFORM =~ /(mswin)|(cygwin)/i # watch out for darwin
         @os_separator = '\\'
@@ -133,19 +148,20 @@
       version ? "= #{version}" : nil
     end
 
-    #def is_conf(name)
-    #   return true if @config_db and @config_db[name]
-    #end
-
     def load_user_configuration
-      user_config = File.join(@rails_basedir, 'config', 'war.rb')
+      user_config = File.join(RAILS_ROOT, 'config', 'war.rb')
       if File.exists?(user_config)
-        begin
-          puts "Reading user configuration"
-          @config_db = War::Configuration::DSL.evaluate(user_config, self).result
-        rescue => e
-          puts e.backtrace.join("\n")
-          puts "Error reading user configuration (#{e.message}), using defaults"
+        puts "Reading user configuration"
+        if File.read(user_config) =~ /War::Configuration/
+          load(user_config)
+        else
+          # fall back to backwards compatible format
+          begin
+            War::Configuration::DSL.evaluate(user_config, self)
+          rescue => e
+            puts e.backtrace.join("\n")
+            puts "Error reading user configuration (#{e.message}), using defaults"
+          end
         end
       end
     end
@@ -175,6 +191,10 @@
       @gem_libraries[name] = match_version
     end
 
+    def remove_gem(name)
+      @gem_libraries.delete(name)
+    end
+
     def local_locations(artifact, version, type='jar')
       paths = []
       if local_java_lib
Index: lib/run.rb
===================================================================
--- lib/run.rb	(revision 477)
+++ lib/run.rb	(working copy)
@@ -12,10 +12,11 @@
     attr_accessor :classpath
     attr_accessor :java_opts
     
-    def initialize
-      @config = Configuration.new
+    def initialize(config = Configuration.get)
+      @config = config
+      @java_opts = config.jetty_java_opts
       @jetty_main = 'org.mortbay.start.Main'
-      @jetty_port = 8080
+      @jetty_port = config.jetty_port
       @jetty_tmp = File.join('tmp', 'jetty')
       @jetty_config = File.join(jetty_tmp, 'jetty.xml')
       @java_opts = ''
@@ -30,15 +31,14 @@
       add_jetty_libraries
       add_jetty_config
       classpath_string = classpath.join(config.os_path_separator)
-      java_opts = self.java_opts
-      java_opts << ' -Xmx128m' unless java_opts =~ /-Xmx/
-      system("java #{java_opts} -cp \"#{classpath_string}\" #{jetty_main} #{jetty_config}")
+      java_opts = @java_opts.dup
+      java_opts << ' -Xmx128m' unless @java_opts =~ /-Xmx/
+      java_opts << " -Djetty.port=#{@jetty_port}" unless java_opts =~ /jetty.port/
+      cmd = "java #{java_opts} -cp \"#{classpath_string}\" #{jetty_main} #{jetty_config}"
+      puts cmd
+      system(cmd)
     end
     
-    def java_opts
-      ENV['JAVA_OPTS'] || @java_opts
-    end
-    
     def add_jetty_libraries
       # Get the Jetty libraries
       @classpath = []
Index: lib/create_war.rb
===================================================================
--- lib/create_war.rb	(revision 477)
+++ lib/create_war.rb	(working copy)
@@ -15,8 +15,8 @@
 
     attr_accessor :config
 
-    def initialize
-      @config = Configuration.new
+    def initialize(config = Configuration.get)
+      @config = config
       @java_lib_packer = JavaLibPacker.new(@config)
       @ruby_lib_packer = RubyLibPacker.new(@config)
       @webapp_packer = WebappPacker.new(@config)
