maven-tools 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/Mavenfile +4 -3
  3. data/Rakefile +33 -1
  4. data/lib/maven/tools/dsl.rb +32 -119
  5. data/lib/maven/tools/dsl/dependency_dsl.rb +9 -3
  6. data/lib/maven/tools/dsl/gem_support.rb +97 -0
  7. data/lib/maven/tools/dsl/gemspec.rb +158 -0
  8. data/lib/maven/tools/dsl/jarfile.rb +72 -16
  9. data/lib/maven/tools/dsl/jarfile_lock.rb +106 -0
  10. data/lib/maven/tools/dsl/profile_gemspec.rb +42 -0
  11. data/lib/maven/tools/dsl/project_gemspec.rb +84 -0
  12. data/lib/maven/tools/gemspec_dependencies.rb +1 -0
  13. data/lib/maven/tools/jarfile.rb +7 -4
  14. data/lib/maven/tools/licenses.rb +77 -0
  15. data/lib/maven/tools/pom.rb +3 -5
  16. data/lib/maven/tools/project.rb +49 -0
  17. data/lib/maven/tools/version.rb +1 -1
  18. data/lib/maven/tools/versions.rb +3 -3
  19. data/lib/maven/tools/visitor.rb +8 -8
  20. data/spec/dsl/gemspec_spec.rb +58 -0
  21. data/spec/dsl/gemspec_spec/jars_and_poms.gemspec +22 -0
  22. data/spec/dsl/gemspec_spec/jars_and_poms.xml +47 -0
  23. data/spec/dsl/gemspec_spec/jars_and_poms_include_jars.xml +64 -0
  24. data/spec/dsl/gemspec_spec/maven-tools.gemspec +422 -0
  25. data/spec/dsl/gemspec_spec/maven-tools.xml +44 -0
  26. data/spec/dsl/jarfile_lock_spec.rb +118 -0
  27. data/spec/dsl/profile_gemspec_spec.rb +77 -0
  28. data/spec/dsl/profile_gemspec_spec/jars_and_poms.gemspec +21 -0
  29. data/spec/dsl/profile_gemspec_spec/jars_and_poms.xml +54 -0
  30. data/spec/dsl/profile_gemspec_spec/jars_and_poms_include_jars.xml +71 -0
  31. data/spec/dsl/profile_gemspec_spec/maven-tools.gemspec +422 -0
  32. data/spec/dsl/profile_gemspec_spec/maven-tools.xml +51 -0
  33. data/spec/dsl/profile_gemspec_spec/no_gems.xml +29 -0
  34. data/spec/dsl/profile_gemspec_spec/snapshot.gemspec +17 -0
  35. data/spec/dsl/profile_gemspec_spec/snapshot.xml +29 -0
  36. data/spec/dsl/project_gemspec_spec.rb +97 -0
  37. data/spec/dsl/project_gemspec_spec/extended.gemspec +22 -0
  38. data/spec/dsl/project_gemspec_spec/extended.xml +86 -0
  39. data/spec/dsl/project_gemspec_spec/jars_and_poms.gemspec +21 -0
  40. data/spec/dsl/project_gemspec_spec/jars_and_poms.xml +82 -0
  41. data/spec/dsl/project_gemspec_spec/jars_and_poms_include_jars.xml +99 -0
  42. data/spec/dsl/project_gemspec_spec/maven-tools.gemspec +422 -0
  43. data/spec/dsl/project_gemspec_spec/maven-tools.xml +79 -0
  44. data/spec/dsl/project_gemspec_spec/no_gems.xml +57 -0
  45. data/spec/dsl/project_gemspec_spec/profile.xml +84 -0
  46. data/spec/dsl/project_gemspec_spec/snapshot.gemspec +17 -0
  47. data/spec/dsl/project_gemspec_spec/snapshot.xml +57 -0
  48. data/spec/gemfile/pom.xml +1 -1
  49. data/spec/gemfile_include_jars/pom.xml +16 -1
  50. data/spec/gemfile_with_access_to_model/pom.xml +1 -1
  51. data/spec/gemfile_with_custom_source/pom.xml +1 -1
  52. data/spec/gemfile_with_custom_source_and_custom_jarname/pom.xml +1 -1
  53. data/spec/gemfile_with_extras/pom.xml +16 -1
  54. data/spec/gemfile_with_groups/pom.xml +1 -1
  55. data/spec/gemfile_with_groups_and_lockfile/pom.xml +1 -1
  56. data/spec/gemfile_with_lock/pom.xml +1 -1
  57. data/spec/gemfile_with_path/pom.xml +2 -2
  58. data/spec/gemfile_with_platforms/pom.xml +1 -1
  59. data/spec/gemfile_with_source/pom.xml +1 -1
  60. data/spec/gemfile_with_source_and_custom_jarname/pom.xml +1 -1
  61. data/spec/gemfile_with_source_and_no_jar/pom.xml +1 -1
  62. data/spec/gemfile_with_test_group/pom.xml +1 -1
  63. data/spec/gemfile_without_gemspec/pom.xml +1 -1
  64. data/spec/gemspec/bouncy-castle-java.gemspec +1 -0
  65. data/spec/gemspec/pom.xml +18 -1
  66. data/spec/gemspec_in_profile/pom.xml +1 -1
  67. data/spec/gemspec_include_jars/pom.xml +16 -1
  68. data/spec/gemspec_no_rubygems_repo/pom.xml +1 -1
  69. data/spec/gemspec_prerelease/pom.xml +2 -2
  70. data/spec/gemspec_prerelease_snapshot/pom.xml +1 -1
  71. data/spec/gemspec_with_access_to_model/pom.xml +1 -1
  72. data/spec/gemspec_with_custom_source/pom.xml +1 -1
  73. data/spec/gemspec_with_custom_source_and_custom_jarname/pom.xml +1 -1
  74. data/spec/gemspec_with_extras/pom.xml +16 -1
  75. data/spec/gemspec_with_prereleased_dependency/pom.xml +1 -1
  76. data/spec/gemspec_with_prereleased_dependency_and_no_repo/pom.xml +1 -1
  77. data/spec/gemspec_with_source/pom.xml +1 -1
  78. data/spec/gemspec_with_source_and_custom_jarname/pom.xml +1 -1
  79. data/spec/gemspec_with_source_and_no_jar/pom.xml +1 -1
  80. data/spec/mavenfile/Mavenfile +1 -1
  81. data/spec/pom.xml +1 -1
  82. data/spec/pom_from_jarfile/pom.xml +0 -7
  83. data/spec/pom_from_jarfile_and_lock/Jarfile +3 -0
  84. data/spec/pom_from_jarfile_and_lock/pom.rb +5 -0
  85. data/spec/pom_from_jarfile_and_lock/pom.xml +37 -0
  86. data/spec/pom_from_jarfile_and_lock/pom2.xml +41 -0
  87. data/spec/pom_from_jarfile_and_skip_lock/Jarfile +3 -0
  88. data/spec/pom_from_jarfile_and_skip_lock/pom.rb +5 -0
  89. data/spec/pom_from_jarfile_and_skip_lock/pom.xml +31 -0
  90. data/spec/pom_from_jarfile_with_jruby/Jarfile +1 -0
  91. data/spec/pom_from_jarfile_with_jruby/pom.xml +0 -15
  92. data/spec/pom_maven_alternative_style/pom.rb +1 -1
  93. data/spec/pom_maven_hash_style/pom.rb +1 -1
  94. data/spec/pom_maven_style/pom.rb +1 -1
  95. metadata +79 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb25e10235359acd7536276bae2fb121b54a7236
4
- data.tar.gz: 4c37c3d8d1292711cb69d91271a31f7904fb5f56
3
+ metadata.gz: 26c28a69e50f9e111649ce61924f54cabf6f63b7
4
+ data.tar.gz: 10cac74469e0e75b47982e9edc5c596ab40f6a5e
5
5
  SHA512:
6
- metadata.gz: e27447be1c62cce5080e2987d7b2d8468cbb8adf19c85fc07bc0c02703dfda8121c78737d911db5f7d85abfc465b1582c1606fb25c8585d6f6ffcfaf27b0f02f
7
- data.tar.gz: ccd6c4f02a520e416a71458b3e9efef2cee45fa88181eb7248fc0f577c721afd747ca9a7c06488c12d607ad0664751126b850fdbdaff440c73b8ad9ceffcb1bb
6
+ metadata.gz: fbed6ef1c9355e616b061e3666641fbe47084a4bc2f10b47506de85ab25003dc6b5e1f76bfa7ef46cb81b8340570783e94aa6a34410e55220bf194ff8d10dfb8
7
+ data.tar.gz: 2fbe060c86ba0bc5866f6e1d583614ae17f43f61dd818b51925a9546cfed7becb95c9585bccf6b85594073b33f629e632f2d30d3c43deb1233f19c43999fb245
data/Mavenfile CHANGED
@@ -6,13 +6,14 @@ jruby_plugin( :minitest, :minispecDirectory =>"spec/*spec.rb" ) do
6
6
  execute_goals(:spec)
7
7
  end
8
8
 
9
- snapshot_repository :jruby, 'http://ci.jruby.org/snapshots/maven'
9
+ #snapshot_repository :jruby, 'http://ci.jruby.org/snapshots/maven'
10
10
 
11
11
  # (jruby-1.6.7 produces a lot of yaml errors parsing gemspecs)
12
- properties( 'jruby.versions' => ['1.7.13','9000.dev-SNAPSHOT'].join(','),
12
+ properties( #'jruby.versions' => ['1.7.16.1','9.0.0.0-SNAPSHOT'].join(','),
13
+ 'jruby.versions' => ['1.7.16.1'].join(','),
13
14
  'jruby.modes' => ['1.9', '2.0','2.1'].join(','),
14
15
  # just lock the versions
15
- 'jruby.version' => '1.7.13',
16
+ 'jruby.version' => '1.7.16.1',
16
17
  'tesla.dump.pom' => 'pom.xml',
17
18
  'tesla.dump.readonly' => true )
18
19
 
data/Rakefile CHANGED
@@ -8,6 +8,38 @@ end
8
8
 
9
9
  task :default => [ :specs ]
10
10
 
11
+ desc 'generate licenses data from internet'
12
+ task :licenses do
13
+ require 'open-uri'
14
+ require 'ostruct'
15
+
16
+ File.open( 'lib/maven/tools/licenses.rb', 'w' ) do |f|
17
+ url = 'http://opensource.org'
18
+ f.puts "require 'ostruct'"
19
+ f.puts 'module Maven'
20
+ f.puts ' module Tools'
21
+ f.puts ' LICENSES = {}'
22
+
23
+ open( url + '/licenses/alphabetical' ).each_line do |line|
24
+
25
+ if line =~ /.*"\/licenses\// and line =~ /<li>/
26
+ l = OpenStruct.new
27
+ line.sub!( /.*"(\/licenses\/([^"]*))">/ ) do
28
+ l.url = "http://opensource.org#{$1}"
29
+ l.short = $1.sub( /\/licenses\//, '' )
30
+ ''
31
+ end
32
+ line.sub!( /\ \(.*$/, '' )
33
+ f.puts " LICENSES[ #{l.short.downcase.inspect} ] = OpenStruct.new :short => #{l.short.inspect}, :name => #{line.strip.inspect}, :url => #{l.url.inspect}"
34
+ end
35
+ end
36
+ f.puts ' LICENSES.freeze'
37
+ f.puts ' end'
38
+ f.puts 'end'
39
+ end
40
+
41
+ end
42
+
11
43
  desc 'run minispecs'
12
44
  task :specs do
13
45
  begin
@@ -19,7 +51,7 @@ task :specs do
19
51
  $LOAD_PATH << "spec"
20
52
  $LOAD_PATH << "lib"
21
53
 
22
- Dir['spec/*_spec.rb'].each { |f| require File.basename(f.sub(/.rb$/, '')) }
54
+ Dir['spec/**/*_spec.rb'].each { |f| require f.sub(/spec\//, '') }
23
55
  end
24
56
 
25
57
  task :headers do
@@ -46,6 +46,15 @@ module Maven
46
46
  @model
47
47
  end
48
48
 
49
+ # TODO remove me
50
+ def needs_torquebox= t
51
+ @needs_torquebox = t
52
+ end
53
+ # TODO remove me
54
+ def current
55
+ @current
56
+ end
57
+
49
58
  def eval_pom( src, reference_file )
50
59
  @source = reference_file || '.'
51
60
  eval( src, nil, ::File.expand_path( @source ) )
@@ -315,29 +324,16 @@ module Maven
315
324
  options = file
316
325
  file = 'Jarfile'
317
326
  end
318
- unless file.is_a?( Maven::Tools::Jarfile )
319
- file = Maven::Tools::Jarfile.new( ::File.expand_path( file ) )
327
+ if file.is_a?( Maven::Tools::Jarfile )
328
+ warn "DEPRECATED use filename instead"
329
+ file = jfile.file
320
330
  end
331
+ dsl = Maven::Tools::DSL::Jarfile.new( @current, file, options[ :skip_lock ] )
321
332
 
322
- if options[ :skip_locked ] or not file.exists_lock?
323
- dsl = file.setup_unlocked( @current )
324
- # TODO this setup should be partly part of Jarfile
325
- jarfile_dsl( dsl )
326
- else
327
- file.locked.each do |dep|
328
- artifact( dep )
329
- end
330
- file.populate_unlocked do |dsl|
331
- dsl = file.setup_locked( @current )
332
- # TODO this setup should be partly part of Jarfile
333
- jarfile_dsl( dsl )
334
- dsl.parent.dependencies.each do |d|
335
- @current.dependencies << d if d.system_path
336
- end
337
- end
338
- end
333
+ # TODO this setup should be part of DSL::Jarfile
334
+ jarfile_dsl( dsl )
339
335
  end
340
-
336
+
341
337
  def jarfile_dsl( dsl )
342
338
  dsl.repositories.each do |r|
343
339
  repository r.merge( {:id => r[:name] } )
@@ -353,112 +349,26 @@ module Maven
353
349
  @gemspec_args = [ name, options ]
354
350
  return
355
351
  end
356
- if name.is_a? Hash
357
- options = name
358
- name = nil
359
- end
360
- if name
361
- name = ::File.join( basedir, name )
362
- else name
363
- gemspecs = Dir[ ::File.join( basedir, "*.gemspec" ) ]
364
- raise "more then one gemspec file found" if gemspecs.size > 1
365
- raise "no gemspec file found" if gemspecs.size == 0
366
- name = gemspecs.first
367
- end
368
- spec = nil
369
- f = ::File.expand_path( name )
370
- spec_file = ::File.read( f )
371
- begin
372
- spec = Gem::Specification.from_yaml( spec_file )
373
- rescue Exception
374
- FileUtils.cd( basedir ) do
375
- # TODO jruby java user.dir
376
- spec = eval( spec_file, nil, f )
377
- end
378
- end
379
-
380
- self.spec( spec, name, options )
381
- end
382
-
383
- def spec( spec, name = nil, options = {} )
384
- name ||= "#{spec.name}-#{spec.version}.gemspec"
385
-
386
- @gemfile_options = nil
387
-
388
352
  if @context == :project
389
- build.directory = '${basedir}/pkg'
390
- version = spec.version.to_s
391
- if options[ :snapshot ] && spec.version.prerelease?
392
- version += '-SNAPSHOT'
393
- end
394
- id "rubygems:#{spec.name}:#{version}"
395
- name( spec.summary || spec.name )
396
- description spec.description
397
- url spec.homepage
398
- if spec.homepage && spec.homepage.match( /github.com/ )
399
- con = spec.homepage.sub( /http:/, 'https:' ).sub( /\/?$/, ".git" )
400
- scm :url => spec.homepage, :connection => con
401
- end
402
-
403
- spec.licenses.each do |l|
404
- license( l )
405
- end
406
- authors = [ spec.authors || [] ].flatten
407
- emails = [ spec.email || [] ].flatten
408
- authors.zip( emails ).each do |d|
409
- developer( :name => d[0], :email => d[1] )
410
- end
411
- end
412
-
413
- has_jars = setup_gem_support( options, spec )
414
-
415
- if @context == :project and not options[ :only_metadata ]
416
- packaging 'gem'
417
- if has_jars
418
- extension 'de.saumya.mojo:gem-with-jar-extension:${jruby.plugins.version}'
419
- else
420
- extension 'de.saumya.mojo:gem-extension:${jruby.plugins.version}'
421
- end
422
- end
423
-
424
- return if options[ :only_metadata ]
425
-
426
- config = { :gemspec => name.sub( /^#{basedir}\/?/, '' ) }
427
- if options[ :include_jars ] || options[ 'include_jars' ]
428
- config[ :includeDependencies ] = true
429
- config[ :useRepositoryLayout ] = true
430
- end
431
- jruby_plugin!( :gem, config )
432
-
433
- deps = nil
434
- if @inside_gemfile.is_a? Symbol
435
- profile! @inside_gemfile do
436
- deps = all_deps( spec )
353
+ if @inside_gemfile.is_a? Symbol
354
+ options[ :profile ] = @inside_gemfile
437
355
  end
356
+ options[ :no_gems ] = gemspec_without_gem_dependencies?
357
+ require_relative 'dsl/project_gemspec'
358
+ DSL::ProjectGemspec.new( self, name, options )
438
359
  else
439
- deps = all_deps( spec )
440
- end
441
-
442
- deps.java_dependency_artifacts.each do |a|
443
- _dependency a
360
+ require_relative 'dsl/profile_gemspec'
361
+ DSL::ProfileGemspec.new( self, name, options )
444
362
  end
445
363
  end
446
364
 
447
- def all_deps( spec )
448
- deps = Maven::Tools::GemspecDependencies.new( spec )
449
- deps.runtime.each do |d|
450
- gem d
451
- end
452
- unless deps.development.empty?
453
- scope :test do
454
- deps.development.each do |d|
455
- gem d
456
- end
457
- end
458
- end
459
- deps
365
+ # TODO remove this hack to get jar-dependencies to work
366
+ def gemspec_without_gem_dependencies?
367
+ gems = GemspecDependencies.new( Gem::Specification.new )
368
+ gems.runtime << 123
369
+ deps = gems.send( :_deps, :runtime )
370
+ deps.size == 0
460
371
  end
461
- private :all_deps
462
372
 
463
373
  def licenses
464
374
  yield
@@ -1309,6 +1219,9 @@ module Maven
1309
1219
  if @context
1310
1220
  m = "#{method}=".to_sym
1311
1221
  if @current.respond_to? m
1222
+ if method == :properties && defined? JRUBY_VERSION
1223
+ return @current.properties = java.util.Properties.new
1224
+ end
1312
1225
  #p @context
1313
1226
  #p m
1314
1227
  #p args
@@ -29,9 +29,15 @@ module Maven
29
29
 
30
30
  class << self
31
31
  def create( parent, type, scope, *args, &block )
32
- a = DependencyDSL.from( type, *args, &block )
33
- a.scope = scope if scope
34
-
32
+ if type
33
+ a = DependencyDSL.from( type, *args, &block )
34
+ a.scope = scope if scope
35
+ else
36
+ scope = args.shift
37
+ args += [nil, nil, { :scope => scope } ][ (args.size - 4 )..2 ]
38
+ a = DependencyDSL.new( *args )
39
+ end
40
+
35
41
  options = process_exclusions( a.model, a.dup )
36
42
  a.instance_eval &block if block
37
43
  fill_options( a.model, options, :type )
@@ -0,0 +1,97 @@
1
+ #
2
+ # Copyright (C) 2014 Christian Meier
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ # this software and associated documentation files (the "Software"), to deal in
6
+ # the Software without restriction, including without limitation the rights to
7
+ # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
8
+ # the Software, and to permit persons to whom the Software is furnished to do so,
9
+ # subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
16
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
17
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
+ #
21
+ module Maven
22
+ module Tools
23
+ module DSL
24
+ module GemSupport
25
+
26
+ def setup_jruby_plugins_version( project )
27
+ if not @parent.properties.key?( 'jruby.plugins.version' ) and
28
+ not project.properties.key?( 'jruby.plugins.version' )
29
+ @parent.properties( 'jruby.plugins.version' => VERSIONS[ :jruby_plugins ] )
30
+ end
31
+ end
32
+
33
+ def setup_gem_support( project, options, spec = nil )
34
+ unless project.properties.member?( 'project.build.sourceEncoding' )
35
+ @parent.properties( 'project.build.sourceEncoding' => 'utf-8' )
36
+ end
37
+ if spec.nil?
38
+ require_path = '.'
39
+ name = ::File.basename( ::File.expand_path( '.' ) )
40
+ else
41
+ require_path = spec.require_path
42
+ name = spec.name
43
+ end
44
+
45
+ if ( nil == project.current.repositories.detect { |r| r.id == 'rubygems-releases' } && options[ :no_rubygems_repo ] != true )
46
+
47
+ @parent.repository( 'rubygems-releases',
48
+ 'http://rubygems-proxy.torquebox.org/releases' )
49
+ end
50
+ @parent.needs_torquebox = true
51
+
52
+ setup_jruby_plugins_version( project )
53
+
54
+ if options.key?( :jar ) || options.key?( 'jar' )
55
+ jarpath = options[ :jar ] || options[ 'jar' ]
56
+ if jarpath
57
+ jar = ::File.basename( jarpath ).sub( /.jar$/, '' )
58
+ output = ::File.dirname( "#{require_path}/#{jarpath}" )
59
+ output.sub!( /\/$/, '' )
60
+ end
61
+ else
62
+ jar = "#{name}"
63
+ output = "#{require_path}"
64
+ end
65
+ if options.key?( :source ) || options.key?( 'source' )
66
+ source = options[ :source ] || options[ 'source' ]
67
+ @parent.build do
68
+ @parent.source_directory source
69
+ end
70
+ end
71
+ # TODO rename "no_rubygems_repo" to "no_jar_support"
72
+ if( options[ :no_rubygems_repo ] != true &&
73
+ jar &&
74
+ ( source || File.exists?( File.join( project.basedir,
75
+ 'src/main/java' ) ) ) )
76
+
77
+ unless spec.nil? || spec.platform.to_s.match( /java|jruby/ )
78
+ warn "gem is not a java platform gem but has a jar and source"
79
+ end
80
+
81
+ @parent.plugin( :jar, VERSIONS[ :jar_plugin ],
82
+ :outputDirectory => output,
83
+ :finalName => jar ) do
84
+ @parent.execute_goals :jar, :phase => 'prepare-package'
85
+ end
86
+ @parent.plugin( :clean, VERSIONS[ :clean_plugin ],
87
+ :filesets => [ { :directory => output,
88
+ :includes => [ "#{jar}.jar", '*/**/*.jar' ] } ] )
89
+ true
90
+ else
91
+ false
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,158 @@
1
+ #
2
+ # Copyright (C) 2014 Christian Meier
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ # this software and associated documentation files (the "Software"), to deal in
6
+ # the Software without restriction, including without limitation the rights to
7
+ # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
8
+ # the Software, and to permit persons to whom the Software is furnished to do so,
9
+ # subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
16
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
17
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
+ #
21
+ require 'maven/tools/coordinate'
22
+ require 'maven/tools/versions'
23
+ require 'maven/tools/dsl/jruby_dsl'
24
+ require 'maven/tools/dsl/dependency_dsl'
25
+ module Maven
26
+ module Tools
27
+ module DSL
28
+ class Gemspec
29
+
30
+ def initialize( parent, name = nil, options = {} )
31
+ @parent = parent
32
+ case name
33
+ when Hash
34
+ options = name
35
+ name = options[ 'name' ] || options[ :name ]
36
+ when Gem::Specification
37
+ process_gem_spec( name, options )
38
+ return
39
+ end
40
+ name = find_gemspec_file( name )
41
+ spec = gem_specification( name )
42
+ name ||= "#{spec.name}-#{spec.version}.gemspec"
43
+ process( spec, name, options )
44
+ end
45
+
46
+ attr_reader :parent
47
+
48
+ def help
49
+ warn "\n# Jarfile DSL #\n"
50
+ warn self.class.help_block( :local => "path-to-local-jar", :jar => nil, :pom => nil, :repository => nil, :snapshot_repository => nil, :jruby => nil, :scope => nil)[0..-2]
51
+ end
52
+
53
+ def gem( scope, coord )
54
+ DependencyDSL.create( @parent.current, :gem, scope, coord )
55
+ end
56
+
57
+ def jar( line )
58
+ maven_dependency( "jar #{line}" )
59
+ end
60
+
61
+ def pom( line )
62
+ maven_dependency( "pom #{line}" )
63
+ end
64
+
65
+ def method_missing( m, *args )
66
+ if args.size == 1
67
+ warn "unknown declaration: #{m} " + args[0]
68
+ else
69
+ super
70
+ end
71
+ end
72
+
73
+ private
74
+
75
+ include Maven::Tools::Coordinate
76
+
77
+ def process_gem_spec( spec, options )
78
+ if spec.spec_file
79
+ name = File.basename( spec.spec_file )
80
+ else
81
+ name = nil
82
+ end
83
+ process( spec, name, options )
84
+ end
85
+
86
+ def find_gemspec_file( name )
87
+ if name
88
+ ::File.join( @parent.basedir, name )
89
+ else
90
+ gemspecs = Dir[ ::File.join( @parent.basedir, "*.gemspec" ) ]
91
+ raise "more then one gemspec file found" if gemspecs.size > 1
92
+ raise "no gemspec file found" if gemspecs.size == 0
93
+ gemspecs.first
94
+ end
95
+ end
96
+
97
+ def gem_specification( name )
98
+ path = File.expand_path( name )
99
+ spec_file = File.read( path )
100
+ begin
101
+ Gem::Specification.from_yaml( spec_file )
102
+ rescue Exception
103
+ FileUtils.cd( @parent.basedir ) do
104
+ return eval( spec_file, nil, path )
105
+ end
106
+ end
107
+ end
108
+
109
+ def process( spec, name, options )
110
+ if name
111
+ config = { :gemspec => name.sub( /^#{@parent.basedir}\/?/, '' ) }
112
+ end
113
+ if options[ :include_jars ] || options[ 'include_jars' ]
114
+ config[ :includeDependencies ] = true
115
+ config[ :useRepositoryLayout ] = true
116
+ @parent.plugin :dependency do
117
+ @parent.execute_goal( 'copy-dependencies',
118
+ :phase => 'generate-test-resources',
119
+ :outputDirectory => spec.require_path,
120
+ :useRepositoryLayout => true )
121
+ end
122
+ end
123
+ @parent.jruby_plugin!( :gem, config )
124
+
125
+ gem_deps( spec, options ) unless options[ :no_gems ]
126
+ other_deps( spec )
127
+ end
128
+
129
+ def gem_deps( spec, options )
130
+ spec.dependencies.each do |dep|
131
+ versions = dep.requirement.requirements.collect do |req|
132
+ # use this construct to get the same result in 1.8.x and 1.9.x
133
+ req.collect{ |i| i.to_s }.join
134
+ end
135
+ scope = dep.type == :development ? :test : nil
136
+ gem( scope, "rubygems:#{dep.name}:#{to_version( *versions )}" )
137
+ end
138
+ end
139
+
140
+ def other_deps( spec )
141
+ spec.requirements.each do |req|
142
+ req.sub!( /#.*^/, '' )
143
+ method = req.sub(/\s.*$/, '' ).to_sym
144
+ line = req.sub(/^[^\s]*\s/, '' )
145
+ send method, line
146
+ end
147
+ end
148
+
149
+ def maven_dependency( line )
150
+ coord = to_split_coordinate_with_scope( line )
151
+ if coord && coord.size > 1
152
+ DependencyDSL.create( @parent.current, nil, nil, *coord )
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end