class RJack::TarPit::BaseStrategy

Base class for Rake task generation.

Constants

MVN_STATE_FILE

File touched to record the time of last successful 'mvn package' run.

MVN_STATE_FILE_INSTALL

Attributes

spec[R]

The augmented Gem::Specification as constructed.

Public Class Methods

new( spec ) click to toggle source

See RJack::TarPit.new

Calls superclass method RJack::TarPit::GitTaskDefiner.new
# File lib/rjack-tarpit/base_strategy.rb, line 49
def initialize( spec )
  @defines = [ :define_maven_tasks ]
  super()

  @spec = spec

  @install_request = Rake.application.top_level_tasks.include?( "install" )
end

Public Instance Methods

add_define_hook( sym ) click to toggle source
# File lib/rjack-tarpit/base_strategy.rb, line 58
def add_define_hook( sym )
  @defines << sym
end
define_manifest_task() click to toggle source

Define task for dynamically generating Manifest.txt

# File lib/rjack-tarpit/base_strategy.rb, line 83
def define_manifest_task

  if File.exist?( 'Manifest.static' )
    file 'Manifest.txt' => [ 'Manifest.static' ]
  end

  gf = clean_list( spec.generated_files ).sort
  [ :gem, :test ].each { |t| task t => gf }

  unless gf.empty?
    task :gen_clean do
      rm_f gf
    end
    task :clean => :gen_clean
  end

  desc "Force update of Manifest.txt"
  task :manifest do
    spec.generate_manifest
  end

  mtask = file 'Manifest.txt' do
    spec.generate_manifest
  end

  mtask
end
define_maven_package_task() click to toggle source

Define a file task tracking calls to “mvn package”

# File lib/rjack-tarpit/base_strategy.rb, line 117
def define_maven_package_task
  [ MVN_STATE_FILE, MVN_STATE_FILE_INSTALL ].each do |sf|
    file sf => maven_dependencies do
      run_maven
    end
  end

  task :install => MVN_STATE_FILE_INSTALL
end
define_maven_tasks() click to toggle source

Define maven tasks based on spec strategy and other details.

# File lib/rjack-tarpit/base_strategy.rb, line 68
def define_maven_tasks
  from_assembly = ( spec.maven_strategy == :jars_from_assembly )
  do_maven = from_assembly || spec.jars.size > 0

  define_maven_package_task if do_maven

  if do_maven || spec.generated_files
    define_manifest_task
    task( :manifest => [ MVN_STATE_FILE ] ) if from_assembly
  end

  define_post_maven_tasks if do_maven
end
define_post_maven_tasks() click to toggle source

Define file tasks for all jar symlinks and other misc. maven associated tasks like :mvn_clean.

# File lib/rjack-tarpit/base_strategy.rb, line 145
def define_post_maven_tasks
  jfrom = spec.jar_from
  spec.jars.each do |jar|
    from = File.join( jfrom, jar )
    dest = File.join( spec.jar_dest, jar )
    file from => [ MVN_STATE_FILE ]
    file dest => [ from ] do
      ln( from, dest, :force => true )
    end
    [ :gem, :test ].each { |t| task t => [ dest ] }
  end

  task :mvn_clean do
    spec.remove_dest_jars
    rm_rf 'target' if File.directory?( 'target' )
  end
  task :clean => :mvn_clean
end
define_tasks() click to toggle source

Define rake tasks (given settings)

# File lib/rjack-tarpit/base_strategy.rb, line 63
def define_tasks
  @defines.each { |sym| send( sym ) }
end
maven_dependencies() click to toggle source

Dependencies on “mvn package” including pom.xml, any assembly.xml, all files under the “src” directory.

# File lib/rjack-tarpit/base_strategy.rb, line 166
def maven_dependencies
  deps  = [ 'pom.xml' ]
  deps << 'assembly.xml' if File.exist?( 'assembly.xml' )
  deps += FileList[ "src/**/*" ].exclude { |f| ! File.file?( f ) }
  deps
end
run_maven() click to toggle source

Run Maven mvn package or install and touch state files.

# File lib/rjack-tarpit/base_strategy.rb, line 128
def run_maven
  # Delay till now, in case we were not running on jvm
  require 'rjack-maven'

  target = @install_request ? 'install' : 'package'

  status = RJack::Maven.launch( [ target ] )
  unless status == 0
    raise "TARPIT: Maven #{target} failed (exit code: #{status})"
  end

  touch( MVN_STATE_FILE )
  touch( MVN_STATE_FILE_INSTALL ) if @install_request
end