ianheggie/cruisecontrol.rb

View on GitHub
lib/tasks/package/jar.rake

Summary

Maintainability
Test Coverage
namespace :package do
  namespace :jar do
    require 'tasks/rails_in_a_war'
    
    DIST_DIR = "#{Rails.root}/dist"
    DIST_JAR_DIR = "#{DIST_DIR}/jar"

    CRUISE_VERSION = CruiseControl::VERSION::STRING

    SERVER_JAR_DIR = "#{Rails.root}/server_jar"
    TARGET_DIR     = "#{SERVER_JAR_DIR}/target"

    desc "(internal) clean up all built files"
    task :clean do
      rm_rf TARGET_DIR
    end

    desc "(internal) compile the server starter sources"
    RailsInAWar::JavacTask.new(:compile) do |javac|
      javac.src_dir    = "#{SERVER_JAR_DIR}/src"
      javac.dest_dir   = "#{TARGET_DIR}/classes"
      javac.classpath += Dir["#{Rails.root}/vendor/java/jetty/jetty-start*.jar"]
      javac.classpath += Dir["#{Rails.root}/vendor/java/jruby/jruby-complete*.jar"]
      javac.classpath += Dir["#{Rails.root}/vendor/java/logging/log4j*.jar"]
    end

    desc "(internal) create the bootup jar"
    task :main_jar do
      mkdir_p "#{TARGET_DIR}/dist"
      cd "#{TARGET_DIR}/classes" do
        sh("jar cf #{TARGET_DIR}/dist/cruisecontrolrb-main.jar .")
      end

      cd "#{SERVER_JAR_DIR}/resource" do
        sh("jar uf #{TARGET_DIR}/dist/cruisecontrolrb-main.jar .")
      end
    end

    desc "(internal) create the gem dependency list"
    task :create_gem_dependency_list do
      program = "#{SERVER_JAR_DIR}/build-lib/create_gem_dependency_list.rb #{Rails.root}/Gemfile #{TARGET_DIR}"
      if defined?(JRUBY_VERSION)
        ruby(program) # this starts up jruby in a different runtime
      else
        sh("#{Rails.root}/script/jruby #{program}") # since we are in MRI land
      end
    end

    desc "(internal) package the jar"
    task :package do |task|
      rm_rf DIST_DIR
      mkdir_p DIST_DIR

      unless defined?(JRUBY_VERSION)
        sh("#{Rails.root}/script/jrake #{task.name}")  # run this in jruby land
        next # and return
      end
      require 'ant'

      jetty_config_dir = "#{SERVER_JAR_DIR}/jetty-config"

      jetty_jars_dir   = "#{Rails.root}/vendor/java/jetty"
      jruby_jars_dir   = "#{Rails.root}/vendor/java/jruby"
      logging_jars_dir = "#{Rails.root}/vendor/java/logging"

      dist_dir         = "#{TARGET_DIR}/dist"

      ant.war :destfile => "#{dist_dir}/cruisecontrolrb_server.war",
              :webxml => "#{jetty_config_dir}/WEB-INF/web.xml",
              :compress => "true",
              :keepcompression => "false" do

        metainf    :dir => "#{jetty_config_dir}/META-INF"

        lib        :dir => "#{jruby_jars_dir}",
                   :includes => "**/*.jar"

        zipfileset :prefix => "WEB-INF",
                   :dir => "#{jetty_config_dir}/WEB-INF"

        zipfileset :prefix => "WEB-INF/rails",
                   :dir => "#{Rails.root}",
                   :includes => "Gemfile, Gemfile.lock, config.ru"

         zipfileset :prefix => "WEB-INF/rails/config",
                    :dir => "#{Rails.root}/config"

        zipfileset :prefix => "WEB-INF/rails/db",
                   :dir => "#{Rails.root}/db"

        zipfileset :prefix => "WEB-INF/rails/app",
                   :dir => "#{Rails.root}/app"

        zipfileset :prefix => "WEB-INF/rails/lib",
                   :dir => "#{Rails.root}/lib",
                   :excludes => "tasks/**/*.*"

        zipfileset :prefix => "WEB-INF/rails/public",
                   :dir => "#{Rails.root}/public"

        zipfileset :prefix => "WEB-INF/rails/gems/gems",
                   :dir => "#{Bundler.bundle_path}/gems",
                   :includesfile => "#{TARGET_DIR}/gem_paths.files.txt",
                   :excludes => "*/test/**,*/spec/**"

        zipfileset :prefix => "WEB-INF/rails/gems/specifications",
                   :dir => "#{Bundler.bundle_path}/specifications",
                   :includesfile => "#{TARGET_DIR}/gem_specs.files.txt"
      end

      ant.jar :destfile => "#{DIST_JAR_DIR}/cruisecontrolrb-#{CRUISE_VERSION}.jar",
              :update => "true",
              :manifest => "#{jetty_config_dir}/META-INF/MANIFEST.MF" do

        zipfileset :prefix => "jetty.home/etc",
                   :dir => "#{jetty_config_dir}/etc"

        # our startup jar
        zipfileset :src => "#{TARGET_DIR}/dist/cruisecontrolrb-main.jar",
                   :excludes => "META-INF/**/*"

        (Dir["#{jetty_jars_dir}/**/*.jar"] + Dir["#{logging_jars_dir}/**/*.jar"]).each do |jar|
          zipfileset :src => jar,
                     :excludes => "META-INF/**/*"
        end

        zipfileset :src => "#{dist_dir}/cruisecontrolrb_server.war",
                   :prefix => "webapp"
      end
    end
  end
end