buildr 1.4.12-x86-mswin32 → 1.4.13-x86-mswin32

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 (42) hide show
  1. checksums.yaml +15 -0
  2. data/CHANGELOG +62 -0
  3. data/addon/buildr/checkstyle.rb +6 -4
  4. data/addon/buildr/gpg.rb +9 -2
  5. data/addon/buildr/gwt.rb +1 -0
  6. data/buildr.gemspec +18 -20
  7. data/doc/download.textile +30 -6
  8. data/doc/index.textile +21 -9
  9. data/doc/packaging.textile +29 -0
  10. data/lib/buildr.rb +3 -0
  11. data/lib/buildr/core/application.rb +24 -0
  12. data/lib/buildr/core/assets.rb +93 -0
  13. data/lib/buildr/core/build.rb +3 -2
  14. data/lib/buildr/core/common.rb +3 -2
  15. data/lib/buildr/core/compile.rb +0 -1
  16. data/lib/buildr/core/generate.rb +2 -2
  17. data/lib/buildr/core/project.rb +1 -1
  18. data/lib/buildr/core/shell.rb +1 -1
  19. data/lib/buildr/core/transports.rb +4 -1
  20. data/lib/buildr/core/util.rb +8 -0
  21. data/lib/buildr/ide/idea.rb +267 -114
  22. data/lib/buildr/java/commands.rb +16 -2
  23. data/lib/buildr/java/packaging.rb +6 -4
  24. data/lib/buildr/java/pom.rb +1 -1
  25. data/lib/buildr/java/tests.rb +3 -3
  26. data/lib/buildr/packaging/archive.rb +4 -3
  27. data/lib/buildr/packaging/package.rb +0 -2
  28. data/lib/buildr/packaging/ziptask.rb +1 -1
  29. data/lib/buildr/version.rb +2 -2
  30. data/rakelib/rspec.rake +5 -49
  31. data/rakelib/stage.rake +7 -5
  32. data/spec/addon/jaxb_xjc_spec.rb +2 -2
  33. data/spec/core/application_spec.rb +8 -8
  34. data/spec/core/build_spec.rb +41 -41
  35. data/spec/core/common_spec.rb +3 -2
  36. data/spec/core/test_spec.rb +34 -34
  37. data/spec/core/transport_spec.rb +21 -17
  38. data/spec/ide/idea_spec.rb +707 -4
  39. data/spec/java/packaging_spec.rb +20 -0
  40. data/spec/java/tests_spec.rb +2 -2
  41. data/spec/packaging/packaging_spec.rb +0 -22
  42. metadata +54 -116
@@ -331,10 +331,11 @@ module Buildr #:nodoc:
331
331
  @this_version = extract_version
332
332
  check
333
333
  with_release_candidate_version do |release_candidate_buildfile|
334
- args = '-S', 'buildr', "_#{Buildr::VERSION}_", '--buildfile', release_candidate_buildfile
334
+ args = []
335
+ args << 'buildr' << '--buildfile' << release_candidate_buildfile
335
336
  args << '--environment' << Buildr.environment unless Buildr.environment.to_s.empty?
336
337
  args << 'clean' << 'upload' << 'DEBUG=no'
337
- ruby *args
338
+ sh *args
338
339
  end
339
340
  tag_release resolve_tag
340
341
  update_version_to_next if this_version != resolve_next_version(this_version)
@@ -46,9 +46,10 @@ module Buildr #:nodoc:
46
46
  # For example:
47
47
  # write('README') { read('README').sub("${build}", Time.now) }
48
48
  def write(name, content = nil)
49
- mkpath File.dirname(name)
49
+ filename = name.to_s
50
+ mkpath File.dirname(filename)
50
51
  content = yield if block_given?
51
- File.open(name.to_s, 'wb') { |file| file.write content.to_s }
52
+ File.open(filename, 'wb') { |file| file.write content.to_s }
52
53
  content.to_s
53
54
  end
54
55
 
@@ -86,7 +86,6 @@ module Buildr #:nodoc:
86
86
  def applies_to?(project, task)
87
87
  paths = task.sources + [sources].flatten.map { |src| Array(project.path_to(:source, task.usage, src.to_sym)) }
88
88
  paths.flatten!
89
- ext_glob = Array(source_ext).join(',')
90
89
 
91
90
  paths.each { |path|
92
91
  Find.find(path) {|found|
@@ -58,7 +58,7 @@ module Buildr #:nodoc:
58
58
  end
59
59
 
60
60
  def has_eclipse_project?
61
- candidates = Dir.glob("**/.project")
61
+ candidates = Dir.glob("**/.project", File::FNM_DOTMATCH)
62
62
  return false if candidates.size == 0
63
63
  candidates.find { |x| get_project_natures(x) }
64
64
  return candidates.size > 0
@@ -134,7 +134,7 @@ EOF
134
134
  script << " # dependencies << 'junit should be commented out and replace by correct ARTIFACT definition. Eg"
135
135
  script << " # dependencies << 'junit:junit:jar:3.8.2'"
136
136
  script << setLayout('src', 'bin') # default values for eclipse
137
- dot_projects = Dir.glob('**/.project').find_all { |dot_project| get_project_natures(dot_project) }
137
+ dot_projects = Dir.glob('**/.project', File::FNM_DOTMATCH).find_all { |dot_project| get_project_natures(dot_project) }
138
138
  dot_projects.sort.each { |dot_project| from_eclipse(File.dirname(dot_project), false) } if dot_projects
139
139
  else
140
140
  # Skip fragments. Buildr cannot handle it without the help of buildr4osgi
@@ -251,7 +251,7 @@ module Buildr #:nodoc:
251
251
  end
252
252
  project ||= @projects[name] # Not found in scope.
253
253
  raise "No such project #{name}" unless project
254
- project.invoke
254
+ project.invoke unless Buildr.application.current_scope.join(":").to_s == project.name.to_s
255
255
  project
256
256
  end
257
257
 
@@ -66,7 +66,7 @@ module Buildr #:nodoc:
66
66
  props.merge! jrebel_props(project)
67
67
  props.merge! task.properties
68
68
 
69
- if not Util.win_os?
69
+ unless Util.win_os?
70
70
  uname = `uname -m`
71
71
  cpu = if uname =~ /i[34567]86/
72
72
  'i386'
@@ -271,7 +271,10 @@ module URI
271
271
  options ||= {}
272
272
  connect do |http|
273
273
  trace "Requesting #{self}"
274
- headers = { 'If-Modified-Since' => CGI.rfc1123_date(options[:modified].utc) } if options[:modified]
274
+ headers = {}
275
+ headers['If-Modified-Since'] = CGI.rfc1123_date(options[:modified].utc) if options[:modified]
276
+ headers['Cache-Control'] = 'no-cache'
277
+ headers['User-Agent'] = "Buildr-#{Buildr::VERSION}"
275
278
  request = Net::HTTP::Get.new(request_uri.empty? ? '/' : request_uri, headers)
276
279
  request.basic_auth self.user, self.password if self.user
277
280
  http.request request do |response|
@@ -76,6 +76,14 @@ module Buildr #:nodoc:
76
76
  end
77
77
  end
78
78
 
79
+ def uuid
80
+ return SecureRandom.uuid if SecureRandom.respond_to?(:uuid)
81
+ ary = SecureRandom.random_bytes(16).unpack("NnnnnN")
82
+ ary[2] = (ary[2] & 0x0fff) | 0x4000
83
+ ary[3] = (ary[3] & 0x3fff) | 0x8000
84
+ "%08x-%04x-%04x-%04x-%04x%08x" % ary
85
+ end
86
+
79
87
  # Return the path to the first argument, starting from the path provided by the
80
88
  # second argument.
81
89
  #
@@ -100,9 +100,9 @@ module Buildr #:nodoc:
100
100
  @components ||= []
101
101
  end
102
102
 
103
- def create_composite_component(name, components)
103
+ def create_composite_component(name, attrs, components)
104
104
  return nil if components.empty?
105
- component = self.create_component(name)
105
+ component = self.create_component(name, attrs)
106
106
  components.each do |element|
107
107
  element = element.call if element.is_a?(Proc)
108
108
  component.add_element element
@@ -298,60 +298,102 @@ module Buildr #:nodoc:
298
298
 
299
299
  def add_web_facet(options = {})
300
300
  name = options[:name] || "Web"
301
- url_base = options[:url_base] || "/"
302
- default_webroots = [buildr_project._(:source, :main, :webapp)]
301
+ default_webroots = {}
302
+ buildr_project.assets.paths.each {|p| default_webroots[p] = "/" }
303
303
  webroots = options[:webroots] || default_webroots
304
- default_web_xml = "#{buildr_project._(:source, :main, :webapp)}/WEB-INF/web.xml"
305
- web_xml = options[:web_xml] || default_web_xml
306
- version = options[:version] || "3.0"
304
+ default_deployment_descriptors = []
305
+ ['web.xml', 'sun-web.xml', 'glassfish-web.xml', 'jetty-web.xml', 'geronimo-web.xml',
306
+ 'context.xml', 'weblogic.xml',
307
+ 'jboss-deployment-structure.xml', 'jboss-web.xml',
308
+ 'ibm-web-bnd.xml', 'ibm-web-ext.xml', 'ibm-web-ext-pme.xml'].
309
+ each do |descriptor|
310
+ webroots.each_pair do |path, relative_url|
311
+ next unless relative_url == "/"
312
+ d = "#{path}/WEB-INF/#{descriptor}"
313
+ default_deployment_descriptors << d if File.exist?(d)
314
+ end
315
+ end
316
+ deployment_descriptors = options[:deployment_descriptors] || default_deployment_descriptors
307
317
 
308
318
  add_facet(name, "web") do |f|
309
319
  f.configuration do |c|
310
320
  c.descriptors do |d|
311
- if File.exist?(web_xml) || default_web_xml != web_xml
312
- d.deploymentDescriptor :name => 'web.xml', :url => file_path(web_xml), :optional => "true", :version => version
321
+ deployment_descriptors.each do |deployment_descriptor|
322
+ d.deploymentDescriptor :name => File.basename(deployment_descriptor), :url => file_path(deployment_descriptor)
313
323
  end
314
324
  end
315
325
  c.webroots do |w|
316
- webroots.each do |webroot|
317
- w.root :url => file_path(webroot), :relative => url_base
326
+ webroots.each_pair do |webroot, relative_url|
327
+ w.root :url => file_path(webroot), :relative => relative_url
318
328
  end
319
329
  end
320
330
  end
331
+ default_enable_jsf = webroots.select{|webroot| File.exist?("#{webroot}/WEB-INF/faces-config.xml")}
332
+ enable_jsf = options[:enable_jsf].nil? ? default_enable_jsf : options[:enable_jsf]
333
+ enable_jsf = false if root_project.ipr? && root_project.ipr.version >= '13'
334
+ f.facet(:type => 'jsf', :name => 'JSF') do |jsf|
335
+ jsf.configuration
336
+ end if enable_jsf
321
337
  end
322
338
  end
323
339
 
324
340
  def add_jruby_facet(options = {})
325
341
  name = options[:name] || "JRuby"
326
- jruby_version = options[:jruby_version] || "jruby-1.5.2-p249"
342
+
343
+ ruby_version_file = buildr_project._('.ruby-version')
344
+ default_jruby_version = File.exist?(ruby_version_file) ? "rbenv: #{IO.read(ruby_version_file).strip}" : 'jruby-1.6.7.2'
345
+ jruby_version = options[:jruby_version] || default_jruby_version
327
346
  add_facet(name, "JRUBY") do |f|
328
- f.configuration(:number => 0) do |c|
347
+ f.configuration do |c|
329
348
  c.JRUBY_FACET_CONFIG_ID :NAME => "JRUBY_SDK_NAME", :VALUE => jruby_version
349
+ c.LOAD_PATH :number => "0"
350
+ c.I18N_FOLDERS :number => "0"
330
351
  end
331
352
  end
332
353
  end
333
354
 
334
355
  def add_jpa_facet(options = {})
335
356
  name = options[:name] || "JPA"
357
+
358
+ source_roots = [buildr_project.iml.main_source_directories, buildr_project.compile.sources, buildr_project.resources.sources].flatten.compact
359
+ default_deployment_descriptors = []
360
+ ['orm.xml', 'persistence.xml'].
361
+ each do |descriptor|
362
+ source_roots.each do |path|
363
+ d = "#{path}/META-INF/#{descriptor}"
364
+ default_deployment_descriptors << d if File.exist?(d)
365
+ end
366
+ end
367
+ deployment_descriptors = options[:deployment_descriptors] || default_deployment_descriptors
368
+
336
369
  factory_entry = options[:factory_entry] || buildr_project.name.to_s
337
370
  validation_enabled = options[:validation_enabled].nil? ? true : options[:validation_enabled]
338
- provider_enabled = options[:provider_enabled] || 'Hibernate'
339
- default_persistence_xml = buildr_project._(:source, :main, :resources, "META-INF/persistence.xml")
340
- persistence_xml = options[:persistence_xml] || default_persistence_xml
341
- default_orm_xml = buildr_project._(:source, :main, :resources, "META-INF/orm.xml")
342
- orm_xml = options[:orm_xml] || default_orm_xml
371
+ if options[:provider_enabled]
372
+ provider = options[:provider_enabled]
373
+ else
374
+ provider = nil
375
+ {'org.hibernate.ejb.HibernatePersistence' => 'Hibernate',
376
+ 'org.eclipse.persistence.jpa.PersistenceProvider' => 'EclipseLink'}.
377
+ each_pair do |match, candidate_provider|
378
+ deployment_descriptors.each do |descriptor|
379
+ if File.exist?(descriptor) && /#{Regexp.escape(match)}/ =~ IO.read(descriptor)
380
+ provider = candidate_provider
381
+ end
382
+ end
383
+ end
384
+ end
385
+
343
386
  add_facet(name, "jpa") do |f|
344
387
  f.configuration do |c|
345
- c.setting :name => "validation-enabled", :value => validation_enabled
346
- c.setting :name => "provider-name", :value => provider_enabled
388
+ if provider
389
+ c.setting :name => "validation-enabled", :value => validation_enabled
390
+ c.setting :name => "provider-name", :value => provider
391
+ end
347
392
  c.tag!('datasource-mapping') do |ds|
348
393
  ds.tag!('factory-entry', :name => factory_entry)
349
394
  end
350
- if File.exist?(persistence_xml) || default_persistence_xml != persistence_xml
351
- c.deploymentDescriptor :name => 'persistence.xml', :url => file_path(persistence_xml)
352
- end
353
- if File.exist?(orm_xml) || default_orm_xml != orm_xml
354
- c.deploymentDescriptor :name => 'orm.xml', :url => file_path(orm_xml)
395
+ deployment_descriptors.each do |descriptor|
396
+ c.deploymentDescriptor :name => File.basename(descriptor), :url => file_path(descriptor)
355
397
  end
356
398
  end
357
399
  end
@@ -359,15 +401,27 @@ module Buildr #:nodoc:
359
401
 
360
402
  def add_ejb_facet(options = {})
361
403
  name = options[:name] || "EJB"
362
- default_ejb_xml = buildr_project._(:source, :main, :resources, "WEB-INF/ejb-jar.xml")
363
- ejb_xml = options[:ejb_xml] || default_ejb_xml
364
- ejb_roots = options[:ejb_roots] || [buildr_project.compile.sources, buildr_project.resources.sources].flatten
404
+
405
+ default_ejb_roots = [buildr_project.iml.main_source_directories, buildr_project.compile.sources, buildr_project.resources.sources].flatten.compact
406
+ ejb_roots = options[:ejb_roots] || default_ejb_roots
407
+
408
+ default_deployment_descriptors = []
409
+ ['ejb-jar.xml', 'glassfish-ejb-jar.xml', 'ibm-ejb-jar-bnd.xml', 'ibm-ejb-jar-ext-pme.xml', 'ibm-ejb-jar-ext.xml',
410
+ 'jboss.xml', 'jbosscmp-jdbc.xml', 'openejb-jar.xml', 'sun-cmp-mapping.xml', 'sun-ejb-jar.xml',
411
+ 'weblogic-cmp-rdbms-jar.xml', 'weblogic-ejb-jar.xml'].
412
+ each do |descriptor|
413
+ ejb_roots.each do |path|
414
+ d = "#{path}/WEB-INF/#{descriptor}"
415
+ default_deployment_descriptors << d if File.exist?(d)
416
+ end
417
+ end
418
+ deployment_descriptors = options[:deployment_descriptors] || default_deployment_descriptors
365
419
 
366
420
  add_facet(name, "ejb") do |facet|
367
421
  facet.configuration do |c|
368
422
  c.descriptors do |d|
369
- if File.exist?(ejb_xml) || default_ejb_xml != ejb_xml
370
- d.deploymentDescriptor :name => 'ejb-jar.xml', :url => file_path(ejb_xml)
423
+ deployment_descriptors.each do |deployment_descriptor|
424
+ d.deploymentDescriptor :name => File.basename(deployment_descriptor), :url => file_path(deployment_descriptor)
371
425
  end
372
426
  end
373
427
  c.ejbRoots do |e|
@@ -381,6 +435,14 @@ module Buildr #:nodoc:
381
435
 
382
436
  protected
383
437
 
438
+ def root_project
439
+ p = buildr_project
440
+ while p.parent
441
+ p = p.parent
442
+ end
443
+ p
444
+ end
445
+
384
446
  def test_dependency_details
385
447
  main_dependencies_paths = main_dependencies.map(&:to_s)
386
448
  target_dir = buildr_project.compile.target.to_s
@@ -415,7 +477,7 @@ module Buildr #:nodoc:
415
477
  end
416
478
 
417
479
  def facet_component
418
- create_composite_component("FacetManager", self.facets)
480
+ create_composite_component("FacetManager", {}, self.facets)
419
481
  end
420
482
 
421
483
  def module_root_component
@@ -553,17 +615,24 @@ module Buildr #:nodoc:
553
615
  class IdeaProject < IdeaFile
554
616
  attr_accessor :extra_modules
555
617
  attr_accessor :artifacts
618
+ attr_accessor :data_sources
556
619
  attr_accessor :configurations
557
620
  attr_writer :jdk_version
621
+ attr_writer :version
558
622
 
559
623
  def initialize(buildr_project)
560
624
  super()
561
625
  @buildr_project = buildr_project
562
626
  @extra_modules = []
563
627
  @artifacts = []
628
+ @data_sources = []
564
629
  @configurations = []
565
630
  end
566
631
 
632
+ def version
633
+ @version || "12"
634
+ end
635
+
567
636
  def jdk_version
568
637
  @jdk_version ||= buildr_project.compile.options.source || "1.6"
569
638
  end
@@ -584,47 +653,86 @@ module Buildr #:nodoc:
584
653
  end
585
654
  end
586
655
 
656
+ def add_postgres_data_source(name, options = {})
657
+ if options[:url].nil? && options[:database]
658
+ default_url = "jdbc:postgresql://#{(options[:host] || "127.0.0.1")}:#{(options[:port] || "5432")}/#{options[:database]}"
659
+ end
660
+
661
+ params = {
662
+ :driver => 'org.postgresql.Driver',
663
+ :url => default_url,
664
+ :username => ENV["USER"],
665
+ :dialect => 'PostgreSQL',
666
+ :classpath => ["org.postgresql:postgresql:jar:9.2-1003-jdbc4"]
667
+ }.merge(options)
668
+ add_data_source(name, params)
669
+ end
670
+
671
+ def add_sql_server_data_source(name, options = {})
672
+ if options[:url].nil? && options[:database]
673
+ default_url = "jdbc:jtds:sqlserver://#{(options[:host] || "127.0.0.1")}:#{(options[:port] || "1433")}/#{options[:database]}"
674
+ end
675
+
676
+ params = {
677
+ :driver => 'net.sourceforge.jtds.jdbc.Driver',
678
+ :url => default_url,
679
+ :username => ENV["USER"],
680
+ :dialect => 'TSQL',
681
+ :classpath => ['net.sourceforge.jtds:jtds:jar:1.2.7']
682
+ }.merge(options)
683
+ add_data_source(name, params)
684
+ end
685
+
686
+ def add_data_source(name, options = {})
687
+ add_to_composite_component(self.data_sources) do |xml|
688
+ data_source_options = {
689
+ :source => "LOCAL",
690
+ :name => name,
691
+ :uuid => Buildr::Util.uuid
692
+ }
693
+ classpath = options[:classpath] || []
694
+ xml.tag!("data-source", data_source_options) do |xml|
695
+ xml.tag!("synchronize", (options[:synchronize]||"true"))
696
+ xml.tag!("jdbc-driver", options[:driver]) if options[:driver]
697
+ xml.tag!("jdbc-url", options[:url]) if options[:url]
698
+ xml.tag!("user-name", options[:username]) if options[:username]
699
+ xml.tag!("user-password", encrypt(options[:password])) if options[:password]
700
+ xml.tag!("default-dialect", options[:dialect]) if options[:dialect]
701
+
702
+ xml.libraries do |xml|
703
+ classpath.each do |classpath_element|
704
+ a = Buildr.artifact(classpath_element)
705
+ a.invoke
706
+ xml.library do |xml|
707
+ xml.tag!("url", resolve_path(a.to_s))
708
+ end
709
+ end
710
+ end if classpath.size > 0
711
+ end
712
+ end
713
+ end
714
+
587
715
  def add_exploded_war_artifact(project, options = {})
588
- artifact_name = options[:name] || project.iml.id
589
- build_on_make = options[:build_on_make].nil? ? false : options[:build_on_make]
716
+ artifact_name = to_artifact_name(project, options)
717
+ artifacts = options[:artifacts] || []
590
718
 
591
- add_artifact(artifact_name, "exploded-war", build_on_make) do |xml|
719
+ add_artifact(artifact_name, "exploded-war", build_on_make(options)) do |xml|
592
720
  dependencies = (options[:dependencies] || ([project] + project.compile.dependencies)).flatten
593
721
  libraries, projects = partition_dependencies(dependencies)
594
722
 
595
- ## The content here can not be indented
596
- output_dir = options[:output_dir] || project._(:artifacts, artifact_name)
597
- xml.tag!('output-path', output_dir)
598
-
723
+ emit_output_path(xml, artifact_name, options)
599
724
  xml.root :id => "root" do
600
725
  xml.element :id => "directory", :name => "WEB-INF" do
601
726
  xml.element :id => "directory", :name => "classes" do
602
- projects.each do |p|
603
- xml.element :id => "module-output", :name => p.iml.id
604
- end
605
- if options[:enable_jpa]
606
- module_names = options[:jpa_module_names] || [project.iml.id]
607
- module_names.each do |module_name|
608
- facet_name = options[:jpa_facet_name] || "JPA"
609
- xml.element :id => "jpa-descriptors", :facet => "#{module_name}/jpa/#{facet_name}"
610
- end
611
- end
612
- if options[:enable_ejb]
613
- module_names = options[:ejb_module_names] || [project.iml.id]
614
- module_names.each do |module_name|
615
- facet_name = options[:ejb_facet_name] || "EJB"
616
- xml.element :id => "javaee-facet-resources", :facet => "#{module_name}/ejb/#{facet_name}"
617
- end
618
- end
727
+ artifact_content(xml, project, projects, options)
619
728
  end
620
729
  xml.element :id => "directory", :name => "lib" do
621
- libraries.each(&:invoke).map(&:to_s).each do |dependency_path|
622
- xml.element :id => "file-copy", :path => resolve_path(dependency_path)
623
- end
730
+ emit_libraries(xml, libraries)
731
+ emit_jar_artifacts(xml, artifacts)
624
732
  end
625
733
  end
626
734
 
627
- if options[:enable_war].nil? || options[:enable_war]
735
+ if options[:enable_war].nil? || options[:enable_war] || (options[:war_module_names] && options[:war_module_names].size > 0)
628
736
  module_names = options[:war_module_names] || [project.iml.id]
629
737
  module_names.each do |module_name|
630
738
  facet_name = options[:war_facet_name] || "Web"
@@ -632,7 +740,7 @@ module Buildr #:nodoc:
632
740
  end
633
741
  end
634
742
 
635
- if options[:enable_gwt]
743
+ if options[:enable_gwt] || (options[:gwt_module_names] && options[:gwt_module_names].size > 0)
636
744
  module_names = options[:gwt_module_names] || [project.iml.id]
637
745
  module_names.each do |module_name|
638
746
  facet_name = options[:gwt_facet_name] || "GWT"
@@ -644,76 +752,53 @@ module Buildr #:nodoc:
644
752
  end
645
753
 
646
754
  def add_exploded_ear_artifact(project, options ={})
755
+ artifact_name = to_artifact_name(project, options)
647
756
 
648
- artifact_name = options[:name] || project.iml.id
649
- build_on_make = options[:build_on_make].nil? ? true : options[:build_on_make]
650
-
651
- add_artifact(artifact_name, "exploded-ear", build_on_make) do |xml|
757
+ add_artifact(artifact_name, "exploded-ear", build_on_make(options)) do |xml|
652
758
  dependencies = (options[:dependencies] || ([project] + project.compile.dependencies)).flatten
653
759
  libraries, projects = partition_dependencies(dependencies)
654
760
 
655
- ## The content here can not be indented
656
- output_dir = options[:output_dir] || project._(:artifacts, artifact_name)
657
- xml.tag!('output-path', output_dir)
658
-
761
+ emit_output_path(xml, artifact_name, options)
659
762
  xml.root :id => "root" do
660
-
661
- xml.element :id => "module-output", :name => project.iml.id
662
-
663
- projects.each do |p|
664
- xml.element :id => "directory", :name => p.iml.id do
665
- xml.element :id => "module-output", :name => p.iml.id
666
- end
667
- end
668
-
763
+ emit_module_output(xml, projects)
669
764
  xml.element :id => "directory", :name => "lib" do
670
- libraries.each(&:invoke).map(&:to_s).each do |dependency_path|
671
- xml.element :id => "file-copy", :path => resolve_path(dependency_path)
672
- end
765
+ emit_libraries(xml, libraries)
673
766
  end
767
+ end
768
+ end
769
+ end
674
770
 
771
+ def add_jar_artifact(project, options = {})
772
+ artifact_name = to_artifact_name(project, options)
773
+
774
+ dependencies = (options[:dependencies] || [project]).flatten
775
+ libraries, projects = partition_dependencies(dependencies)
776
+ raise "Unable to add non-project dependencies (#{libraries.inspect}) to jar artifact" if libraries.size > 0
777
+
778
+ jar_name = "#{artifact_name}.jar"
779
+ add_artifact(jar_name, "jar", build_on_make(options)) do |xml|
780
+ emit_output_path(xml, artifact_name, options)
781
+ xml.root(:id => "archive", :name => jar_name) do
782
+ artifact_content(xml, project, projects, options)
675
783
  end
676
784
  end
677
785
  end
678
786
 
679
787
  def add_exploded_ejb_artifact(project, options = {})
788
+ artifact_name = to_artifact_name(project, options)
680
789
 
681
- artifact_name = options[:name] || project.iml.id
682
- build_on_make = options[:build_on_make].nil? ? true : options[:build_on_make]
683
-
684
- add_artifact(artifact_name, "exploded-ejb", build_on_make) do |xml|
685
- dependencies = (options[:dependencies] || ([project] + project.compile.dependencies)).flatten
790
+ add_artifact(artifact_name, "exploded-ejb", build_on_make(options)) do |xml|
791
+ dependencies = (options[:dependencies] || [project]).flatten
686
792
  libraries, projects = partition_dependencies(dependencies)
793
+ raise "Unable to add non-project dependencies (#{libraries.inspect}) to ejb artifact" if libraries.size > 0
687
794
 
688
- ## The content here can not be indented
689
- output_dir = options[:output_dir] || project._(:artifacts, artifact_name)
690
- xml.tag!('output-path', output_dir)
691
-
795
+ emit_output_path(xml, artifact_name, options)
692
796
  xml.root :id => "root" do
693
-
694
- xml.element :id => "module-output", :name => project.iml.id
695
-
696
- if options[:enable_jpa]
697
- module_names = options[:jpa_module_names] || [project.iml.id]
698
- module_names.each do |module_name|
699
- facet_name = options[:jpa_facet_name] || "JPA"
700
- xml.element :id => "jpa-descriptors", :facet => "#{module_name}/jpa/#{facet_name}"
701
- end
702
- end
703
-
704
- if options[:enable_ejb].nil? || options[:enable_ejb]
705
- module_names = options[:ejb_module_names] || [project.iml.id]
706
- module_names.each do |module_name|
707
- facet_name = options[:ejb_facet_name] || "EJB"
708
- xml.element :id => "javaee-facet-resources", :facet => "#{module_name}/ejb/#{facet_name}"
709
- end
710
- end
711
-
797
+ artifact_content(xml, project, projects, options)
712
798
  end
713
799
  end
714
800
  end
715
801
 
716
-
717
802
  def add_gwt_configuration(launch_page, project, options = {})
718
803
  name = options[:name] || "Run #{launch_page}"
719
804
  shell_parameters = options[:shell_parameters] || ""
@@ -733,6 +818,12 @@ module Buildr #:nodoc:
733
818
 
734
819
  protected
735
820
 
821
+ def artifact_content(xml, project, projects, options)
822
+ emit_module_output(xml, projects)
823
+ emit_jpa_descriptors(xml, project, options)
824
+ emit_ejb_descriptors(xml, project, options)
825
+ end
826
+
736
827
  def extension
737
828
  "ipr"
738
829
  end
@@ -748,6 +839,7 @@ module Buildr #:nodoc:
748
839
  lambda { modules_component },
749
840
  vcs_component,
750
841
  artifacts_component,
842
+ lambda { data_sources_component },
751
843
  configurations_component,
752
844
  lambda { framework_detection_exclusion_component }
753
845
  ]
@@ -771,11 +863,11 @@ module Buildr #:nodoc:
771
863
  attribs["version"] = "2"
772
864
  attribs["languageLevel"] = "JDK_#{self.jdk_version.gsub('.', '_')}"
773
865
  attribs["assert-keyword"] = "true"
774
- attribs["jdk-15"] = "true"
866
+ attribs["jdk-15"] = (jdk_version >= "1.5").to_s
775
867
  attribs["project-jdk-name"] = self.jdk_version
776
868
  attribs["project-jdk-type"] = "JavaSDK"
777
869
  create_component("ProjectRootManager", attribs) do |xml|
778
- xml.output("url" => "file://$PROJECT_DIR$/out")
870
+ xml.output("url" => file_path(buildr_project._(:target, :idea, :project_out)))
779
871
  end
780
872
  end
781
873
 
@@ -840,12 +932,16 @@ module Buildr #:nodoc:
840
932
  end
841
933
  end
842
934
 
935
+ def data_sources_component
936
+ create_composite_component("DataSourceManagerImpl", {:format => "xml", :hash => "3208837817"}, self.data_sources)
937
+ end
938
+
843
939
  def artifacts_component
844
- create_composite_component("ArtifactManager", self.artifacts)
940
+ create_composite_component("ArtifactManager", {}, self.artifacts)
845
941
  end
846
942
 
847
943
  def configurations_component
848
- create_composite_component("ProjectRunConfigurationManager", self.configurations)
944
+ create_composite_component("ProjectRunConfigurationManager", {}, self.configurations)
849
945
  end
850
946
 
851
947
  def resolve_path(path)
@@ -854,6 +950,62 @@ module Buildr #:nodoc:
854
950
 
855
951
  private
856
952
 
953
+ def to_artifact_name(project, options)
954
+ options[:name] || project.iml.id
955
+ end
956
+
957
+ def build_on_make(options)
958
+ options[:build_on_make].nil? ? false : options[:build_on_make]
959
+ end
960
+
961
+ def emit_jar_artifacts(xml, artifacts)
962
+ artifacts.each do |p|
963
+ xml.element :id => "artifact", 'artifact-name' => "#{p}.jar"
964
+ end
965
+ end
966
+
967
+ def emit_libraries(xml, libraries)
968
+ libraries.each(&:invoke).map(&:to_s).each do |dependency_path|
969
+ xml.element :id => "file-copy", :path => resolve_path(dependency_path)
970
+ end
971
+ end
972
+
973
+ def emit_module_output(xml, projects)
974
+ projects.each do |p|
975
+ xml.element :id => "module-output", :name => p.iml.id
976
+ end
977
+ end
978
+
979
+ def emit_output_path(xml, artifact_name, options)
980
+ ## The content here can not be indented
981
+ output_dir = options[:output_dir] || buildr_project._(:artifacts, artifact_name)
982
+ xml.tag!('output-path', resolve_path(output_dir))
983
+ end
984
+
985
+ def emit_ejb_descriptors(xml, project, options)
986
+ if options[:enable_ejb] || (options[:ejb_module_names] && options[:ejb_module_names].size > 0)
987
+ module_names = options[:ejb_module_names] || [project.iml.id]
988
+ module_names.each do |module_name|
989
+ facet_name = options[:ejb_facet_name] || "EJB"
990
+ xml.element :id => "javaee-facet-resources", :facet => "#{module_name}/ejb/#{facet_name}"
991
+ end
992
+ end
993
+ end
994
+
995
+ def emit_jpa_descriptors(xml, project, options)
996
+ if options[:enable_jpa] || (options[:jpa_module_names] && options[:jpa_module_names].size > 0)
997
+ module_names = options[:jpa_module_names] || [project.iml.id]
998
+ module_names.each do |module_name|
999
+ facet_name = options[:jpa_facet_name] || "JPA"
1000
+ xml.element :id => "jpa-descriptors", :facet => "#{module_name}/jpa/#{facet_name}"
1001
+ end
1002
+ end
1003
+ end
1004
+
1005
+ def encrypt(password)
1006
+ password.bytes.inject("") { |x, y| x + (y ^ 0xdfaa).to_s(16) }
1007
+ end
1008
+
857
1009
  def partition_dependencies(dependencies)
858
1010
  libraries = []
859
1011
  projects = []
@@ -861,7 +1013,8 @@ module Buildr #:nodoc:
861
1013
  dependencies.each do |dependency|
862
1014
  artifacts = Buildr.artifacts(dependency)
863
1015
  artifacts_as_strings = artifacts.map(&:to_s)
864
- project = Buildr.projects.detect do |project|
1016
+ all_projects = Buildr::Project.instance_variable_get("@projects").keys - [buildr_project.name]
1017
+ project = Buildr.projects(all_projects).detect do |project|
865
1018
  [project.packages, project.compile.target, project.resources.target, project.test.compile.target, project.test.resources.target].flatten.
866
1019
  detect { |component| artifacts_as_strings.include?(component.to_s) }
867
1020
  end