Class: RJack::TarPit::BaseStrategy

Inherits:
Object
  • Object
show all
Includes:
CleanTaskDefiner, DocTaskDefiner, GemTaskDefiner, GitTaskDefiner, LineMatchTaskDefiner, TestTaskDefiner, Util, Rake::DSL
Defined in:
lib/rjack-tarpit/base_strategy.rb

Overview

Base class for Rake task generation.

Constant Summary collapse

MVN_STATE_FILE =

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

'target/.tarpit'
MVN_STATE_FILE_INSTALL =
'target/.tarpit-install'

Instance Attribute Summary collapse

Attributes included from DocTaskDefiner

#publish_rdoc_rsync_flags, #rdoc_destinations, #rdoc_dir

Attributes included from LineMatchTaskDefiner

#history_date_regexp, #history_regexp, #history_version_regexp, #init_files, #init_line_regexp, #init_version_regexp

Attributes included from CleanTaskDefiner

#clean_globs

Attributes included from GemTaskDefiner

#need_tar, #need_zip

Attributes included from TestTaskDefiner

#rspec_task_config, #test_loader, #test_task_config

Instance Method Summary collapse

Methods included from Util

clean_list, read_file_list

Methods included from GitTaskDefiner

#define_git_tasks

Methods included from DocTaskDefiner

#define_doc_tasks

Methods included from LineMatchTaskDefiner

#define_line_match_tasks, #test_line_match

Methods included from CleanTaskDefiner

#define_clean_tasks

Methods included from GemTaskDefiner

#define_gem_tasks, #gem_config, #gem_file, #gem_install_dep

Methods included from TestTaskDefiner

#define_spec_tasks, #define_test_tasks

Constructor Details

#initialize(spec) ⇒ BaseStrategy

See TarPit.new



49
50
51
52
53
54
55
56
# 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

Instance Attribute Details

#specObject (readonly)

The augmented Gem::Specification as constructed.



46
47
48
# File 'lib/rjack-tarpit/base_strategy.rb', line 46

def spec
  @spec
end

Instance Method Details

#add_define_hook(sym) ⇒ Object



58
59
60
# File 'lib/rjack-tarpit/base_strategy.rb', line 58

def add_define_hook( sym )
  @defines << sym
end

#define_manifest_taskObject

Define task for dynamically generating Manifest.txt



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 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_taskObject

Define a file task tracking calls to “mvn package”



117
118
119
120
121
122
123
124
125
# 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_tasksObject

Define maven tasks based on spec strategy and other details.



68
69
70
71
72
73
74
75
76
77
78
79
80
# 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_tasksObject

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



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# 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_tasksObject

Define rake tasks (given settings)



63
64
65
# File 'lib/rjack-tarpit/base_strategy.rb', line 63

def define_tasks
  @defines.each { |sym| send( sym ) }
end

#maven_dependenciesObject

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



166
167
168
169
170
171
# 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_mavenObject

Run Maven mvn package or install and touch state files.



128
129
130
131
132
133
134
135
136
137
138
139
140
141
# 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