buildr 1.3.3-java → 1.3.4-java

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 (144) hide show
  1. data/CHANGELOG +76 -0
  2. data/NOTICE +1 -1
  3. data/README.rdoc +9 -21
  4. data/Rakefile +17 -34
  5. data/_buildr +3 -12
  6. data/{doc/print.toc.yaml → _jbuildr} +14 -14
  7. data/addon/buildr/cobertura.rb +5 -219
  8. data/addon/buildr/drb.rb +281 -0
  9. data/addon/buildr/emma.rb +5 -221
  10. data/addon/buildr/nailgun.rb +93 -689
  11. data/bin/buildr +0 -9
  12. data/buildr.buildfile +4 -4
  13. data/buildr.gemspec +27 -21
  14. data/doc/_layouts/default.html +82 -0
  15. data/doc/_layouts/preface.html +22 -0
  16. data/doc/{pages/artifacts.textile → artifacts.textile} +82 -42
  17. data/doc/{pages/building.textile → building.textile} +89 -47
  18. data/doc/{pages/contributing.textile → contributing.textile} +53 -45
  19. data/doc/css/default.css +6 -5
  20. data/doc/css/print.css +17 -24
  21. data/doc/css/syntax.css +7 -36
  22. data/doc/download.textile +68 -0
  23. data/doc/{pages/extending.textile → extending.textile} +45 -24
  24. data/doc/{pages/getting_started.textile → getting_started.textile} +158 -88
  25. data/doc/images/asf-logo.gif +0 -0
  26. data/doc/images/note.png +0 -0
  27. data/doc/index.textile +47 -0
  28. data/doc/{pages/languages.textile → languages.textile} +108 -54
  29. data/doc/mailing_lists.textile +25 -0
  30. data/doc/{pages/more_stuff.textile → more_stuff.textile} +152 -73
  31. data/doc/{pages/packaging.textile → packaging.textile} +181 -96
  32. data/doc/preface.textile +28 -0
  33. data/doc/{pages/projects.textile → projects.textile} +55 -40
  34. data/doc/scripts/buildr-git.rb +364 -264
  35. data/doc/scripts/gitflow.rb +296 -0
  36. data/doc/scripts/install-jruby.sh +2 -2
  37. data/doc/scripts/install-linux.sh +6 -6
  38. data/doc/scripts/install-osx.sh +2 -2
  39. data/doc/{pages/settings_profiles.textile → settings_profiles.textile} +83 -45
  40. data/doc/{pages/testing.textile → testing.textile} +77 -41
  41. data/lib/buildr.rb +5 -5
  42. data/lib/buildr/core.rb +2 -0
  43. data/lib/buildr/core/application.rb +321 -151
  44. data/lib/buildr/core/build.rb +298 -167
  45. data/lib/buildr/core/checks.rb +4 -132
  46. data/lib/buildr/core/common.rb +1 -5
  47. data/lib/buildr/core/compile.rb +3 -9
  48. data/lib/buildr/core/environment.rb +12 -3
  49. data/lib/buildr/core/filter.rb +20 -18
  50. data/lib/buildr/core/generate.rb +36 -36
  51. data/lib/buildr/core/help.rb +2 -1
  52. data/lib/buildr/core/osx.rb +46 -0
  53. data/lib/buildr/core/progressbar.rb +1 -1
  54. data/lib/buildr/core/project.rb +7 -34
  55. data/lib/buildr/core/test.rb +12 -6
  56. data/lib/buildr/core/transports.rb +13 -11
  57. data/lib/buildr/core/util.rb +14 -23
  58. data/lib/buildr/groovy/bdd.rb +3 -2
  59. data/lib/buildr/groovy/compiler.rb +1 -1
  60. data/lib/buildr/ide/eclipse.rb +31 -21
  61. data/lib/buildr/ide/idea.rb +3 -2
  62. data/lib/buildr/ide/idea7x.rb +6 -4
  63. data/lib/buildr/java/ant.rb +3 -1
  64. data/lib/buildr/java/bdd.rb +9 -7
  65. data/lib/buildr/java/cobertura.rb +243 -0
  66. data/lib/buildr/java/compiler.rb +5 -4
  67. data/lib/buildr/java/emma.rb +244 -0
  68. data/lib/buildr/java/packaging.rb +11 -8
  69. data/lib/buildr/java/pom.rb +0 -4
  70. data/lib/buildr/java/rjb.rb +1 -1
  71. data/lib/buildr/java/test_result.rb +5 -7
  72. data/lib/buildr/java/tests.rb +17 -11
  73. data/lib/buildr/packaging.rb +5 -2
  74. data/lib/buildr/packaging/archive.rb +488 -0
  75. data/lib/buildr/packaging/artifact.rb +48 -29
  76. data/lib/buildr/packaging/artifact_namespace.rb +6 -6
  77. data/lib/buildr/packaging/gems.rb +4 -4
  78. data/lib/buildr/packaging/package.rb +3 -2
  79. data/lib/buildr/packaging/tar.rb +85 -3
  80. data/lib/buildr/packaging/version_requirement.rb +172 -0
  81. data/lib/buildr/packaging/zip.rb +24 -682
  82. data/lib/buildr/packaging/ziptask.rb +313 -0
  83. data/lib/buildr/scala.rb +5 -0
  84. data/lib/buildr/scala/bdd.rb +100 -0
  85. data/lib/buildr/scala/compiler.rb +45 -4
  86. data/lib/buildr/scala/tests.rb +12 -59
  87. data/rakelib/checks.rake +57 -0
  88. data/rakelib/doc.rake +58 -68
  89. data/rakelib/jekylltask.rb +110 -0
  90. data/rakelib/package.rake +35 -37
  91. data/rakelib/release.rake +119 -35
  92. data/rakelib/rspec.rake +29 -39
  93. data/rakelib/setup.rake +21 -59
  94. data/rakelib/stage.rake +184 -26
  95. data/spec/addon/drb_spec.rb +328 -0
  96. data/spec/core/application_spec.rb +32 -25
  97. data/spec/core/build_spec.rb +336 -126
  98. data/spec/core/checks_spec.rb +292 -310
  99. data/spec/core/common_spec.rb +8 -2
  100. data/spec/core/compile_spec.rb +17 -1
  101. data/spec/core/generate_spec.rb +3 -3
  102. data/spec/core/project_spec.rb +18 -10
  103. data/spec/core/test_spec.rb +8 -1
  104. data/spec/core/transport_spec.rb +40 -3
  105. data/spec/core/util_spec.rb +67 -0
  106. data/spec/ide/eclipse_spec.rb +96 -28
  107. data/spec/ide/idea7x_spec.rb +84 -0
  108. data/spec/java/ant.rb +5 -0
  109. data/spec/java/bdd_spec.rb +12 -3
  110. data/spec/{addon → java}/cobertura_spec.rb +6 -6
  111. data/spec/{addon → java}/emma_spec.rb +5 -6
  112. data/spec/java/java_spec.rb +12 -2
  113. data/spec/java/packaging_spec.rb +31 -2
  114. data/spec/{addon → java}/test_coverage_spec.rb +3 -3
  115. data/spec/java/tests_spec.rb +5 -0
  116. data/spec/packaging/archive_spec.rb +11 -1
  117. data/spec/{core → packaging}/artifact_namespace_spec.rb +10 -2
  118. data/spec/packaging/artifact_spec.rb +44 -3
  119. data/spec/packaging/packaging_spec.rb +1 -1
  120. data/spec/sandbox.rb +17 -14
  121. data/spec/scala/bdd_spec.rb +150 -0
  122. data/spec/scala/compiler_spec.rb +27 -0
  123. data/spec/scala/scala.rb +38 -0
  124. data/spec/scala/tests_spec.rb +78 -33
  125. data/spec/spec_helpers.rb +29 -5
  126. data/spec/version_requirement_spec.rb +6 -0
  127. metadata +176 -172
  128. data/DISCLAIMER +0 -7
  129. data/doc/images/apache-incubator-logo.png +0 -0
  130. data/doc/pages/download.textile +0 -51
  131. data/doc/pages/index.textile +0 -42
  132. data/doc/pages/mailing_lists.textile +0 -17
  133. data/doc/pages/recipes.textile +0 -103
  134. data/doc/pages/troubleshooting.textile +0 -103
  135. data/doc/pages/whats_new.textile +0 -323
  136. data/doc/print.haml +0 -51
  137. data/doc/site.haml +0 -56
  138. data/doc/site.toc.yaml +0 -47
  139. data/etc/git-svn-authors +0 -16
  140. data/lib/buildr/core/application_cli.rb +0 -139
  141. data/rakelib/apache.rake +0 -191
  142. data/rakelib/changelog.rake +0 -57
  143. data/rakelib/rubyforge.rake +0 -53
  144. data/rakelib/scm.rake +0 -49
@@ -153,4 +153,4 @@ protected
153
153
  @total == 0 ? ['%s %8s %s', :title, :count, :elapsed] : ['%s: %s |--| %8s/%s %s', :title, :percentage, :count, :total, :time]
154
154
  end
155
155
 
156
- end
156
+ end
@@ -240,18 +240,19 @@ module Buildr
240
240
  rake_check_options options, :scope if options
241
241
  raise ArgumentError, 'Only one project name at a time' unless args.size == 1
242
242
  @projects ||= {}
243
- name = args.first
243
+ name = args.first.to_s
244
+ # Make sure parent project is evaluated (e.g. if looking for foo:bar, find foo first)
245
+ unless @projects[name]
246
+ parts = name.split(':')
247
+ project(parts.first, options || {}) if parts.size > 1
248
+ end
244
249
  if options && options[:scope]
245
250
  # We assume parent project is evaluated.
246
251
  project = options[:scope].split(':').inject([[]]) { |scopes, scope| scopes << (scopes.last + [scope]) }.
247
252
  map { |scope| @projects[(scope + [name]).join(':')] }.
248
253
  select { |project| project }.last
249
254
  end
250
- unless project
251
- # Parent project not evaluated.
252
- name.split(':').tap { |parts| @projects[parts.first].invoke if parts.size > 1 }
253
- project = @projects[name]
254
- end
255
+ project ||= @projects[name] # Not found in scope.
255
256
  raise "No such project #{name}" unless project
256
257
  project.invoke
257
258
  project
@@ -861,32 +862,4 @@ module Buildr
861
862
  Project.projects *args
862
863
  end
863
864
 
864
- # Forces all the projects to be evaluated before executing any other task.
865
- # If we don't do that, we don't get to have tasks available when running Rake.
866
- namespace 'buildr' do
867
- task 'initialize' do
868
- projects
869
- end
870
-
871
- desc "Freeze the Buildfile so it always uses Buildr version #{Buildr::VERSION}"
872
- task 'freeze' do
873
- puts "Freezing the Buildfile so it always uses Buildr version #{Buildr::VERSION}"
874
- original = File.read(Buildr.application.buildfile)
875
- if original =~ /gem\s*(["'])buildr\1/
876
- modified = original.sub(/gem\s*(["'])buildr\1\s*,\s*(["']).*\2/, %{gem "buildr", "#{Buildr::VERSION}"})
877
- else
878
- modified = %{gem "buildr", "#{Buildr::VERSION}"\n} + original
879
- end
880
- File.open(Buildr.application.buildfile, "w") { |file| file.write modified }
881
- end
882
-
883
- desc 'Unfreeze the Buildfile to use the latest version of Buildr'
884
- task 'unfreeze' do
885
- puts 'Unfreezing the Buildfile to use the latest version of Buildr from your Gems repository.'
886
- modified = File.read(Buildr.application.buildfile).sub(/^\s*gem\s*(["'])buildr\1.*\n/, "")
887
- File.open(Buildr.application.buildfile, "w") { |file| file.write modified }
888
- end
889
- end
890
-
891
-
892
865
  end
@@ -442,7 +442,13 @@ module Buildr
442
442
  @passed_tests, @failed_tests = [], []
443
443
  else
444
444
  info "Running tests in #{@project.name}"
445
- @passed_tests = @framework.run(@tests, dependencies)
445
+ begin
446
+ @passed_tests = @framework.run(@tests, dependencies)
447
+ rescue Exception=>ex
448
+ error "Test framework error: #{ex.message}"
449
+ error ex.backtrace.join("\n") if Buildr.application.options.trace
450
+ @passed_tests = []
451
+ end
446
452
  @failed_tests = @tests - @passed_tests
447
453
  unless @failed_tests.empty?
448
454
  error "The following tests failed:\n#{@failed_tests.join("\n")}"
@@ -592,8 +598,8 @@ module Buildr
592
598
  project.build test unless test.options[:integration]
593
599
 
594
600
  project.clean do
595
- rm_rf test.compile.target.to_s, :verbose=>false if test.compile.target
596
- rm_rf test.report_to.to_s, :verbose=>false
601
+ rm_rf test.compile.target.to_s if test.compile.target
602
+ rm_rf test.report_to.to_s
597
603
  end
598
604
  end
599
605
 
@@ -629,9 +635,9 @@ module Buildr
629
635
  # Use this method to return the integration tests task, or enhance it with a block to execute.
630
636
  #
631
637
  # There is one integration tests task you can execute directly, or as a result of running the package
632
- # task (or tasks that depend on it, like install and deploy). It contains all the tests marked with
638
+ # task (or tasks that depend on it, like install and upload). It contains all the tests marked with
633
639
  # :integration=>true, all other tests are considered unit tests and run by the test task before packaging.
634
- # So essentially: build=>test=>packaging=>integration=>install/deploy.
640
+ # So essentially: build=>test=>packaging=>integration=>install/upload.
635
641
  #
636
642
  # You add new tests from projects that define integration tests using the regular test task,
637
643
  # but with the following addition:
@@ -658,7 +664,7 @@ module Buildr
658
664
  class Options
659
665
 
660
666
  # Runs tests after the build when true (default). This forces tests to execute
661
- # after the build, including when running build related tasks like install, deploy and release.
667
+ # after the build, including when running build related tasks like install, upload and release.
662
668
  #
663
669
  # Set to false to not run any tests. Set to :all to run all tests, ignoring failures.
664
670
  #
@@ -14,18 +14,18 @@
14
14
  # the License.
15
15
 
16
16
 
17
- require 'cgi'
17
+ require 'uri'
18
18
  require 'net/http'
19
- require 'net/https'
19
+ Net.autoload :HTTPS, 'net/https'
20
20
  # PATCH: On Windows, Net::SSH 2.0.2 attempts to load the Pageant DLLs which break on JRuby.
21
21
  $LOADED_FEATURES << 'net/ssh/authentication/pageant.rb' if RUBY_PLATFORM =~ /java/
22
- require 'net/sftp'
23
- require 'uri'
22
+ gem 'net-ssh' ; Net.autoload :SSH, 'net/ssh'
23
+ gem 'net-sftp' ; Net.autoload :SFTP, 'net/sftp'
24
+ autoload :CGI, 'cgi'
24
25
  require 'digest/md5'
25
26
  require 'digest/sha1'
26
27
  require 'stringio'
27
- require 'tempfile'
28
- require 'buildr/core/progressbar'
28
+ autoload :ProgressBar, 'buildr/core/progressbar'
29
29
 
30
30
 
31
31
  # Not quite open-uri, but similar. Provides read and write methods for the resource represented by the URI.
@@ -37,8 +37,8 @@ module URI
37
37
  class NotFoundError < RuntimeError
38
38
  end
39
39
 
40
- # How many bytes to read/write at once.
41
- RW_CHUNK_SIZE = 2 ** 20 #:nodoc:
40
+ # How many bytes to read/write at once. Do not change without checking BUILDR-214 first.
41
+ RW_CHUNK_SIZE = 128 * 1024 #:nodoc:
42
42
 
43
43
  class << self
44
44
 
@@ -154,7 +154,7 @@ module URI
154
154
  read({:progress=>verbose}.merge(options || {}).merge(:modified=>modified)) { |chunk| temp.write chunk }
155
155
  end
156
156
  mkpath File.dirname(target)
157
- File.move temp.path, target
157
+ mv temp.path, target
158
158
  when File
159
159
  read({:progress=>verbose}.merge(options || {}).merge(:modified=>target.mtime)) { |chunk| target.write chunk }
160
160
  target.flush
@@ -289,7 +289,9 @@ module URI
289
289
  when Net::HTTPRedirection
290
290
  # Try to download from the new URI, handle relative redirects.
291
291
  trace "Redirected to #{response['Location']}"
292
- return (self + URI.parse(response['location'])).read(options, &block)
292
+ rself = self + URI.parse(response['Location'])
293
+ rself.user, rself.password = self.user, self.password
294
+ return rself.read(options, &block)
293
295
  when Net::HTTPOK
294
296
  info "Downloading #{self}"
295
297
  result = nil
@@ -547,7 +549,7 @@ module URI
547
549
  end
548
550
  real_path.tap do |path|
549
551
  mkpath File.dirname(path)
550
- File.move temp.path, path
552
+ mv temp.path, path
551
553
  end
552
554
  end
553
555
 
@@ -16,7 +16,12 @@
16
16
 
17
17
  require 'rbconfig'
18
18
  require 'pathname'
19
- require 'builder' # A different kind of buildr, one we use to create XML.
19
+ autoload :Tempfile, 'tempfile'
20
+ autoload :YAML, 'yaml'
21
+ autoload :REXML, 'rexml/document'
22
+ gem 'xml-simple' ; autoload :XmlSimple, 'xmlsimple'
23
+ gem 'builder' ; autoload :Builder, 'builder' # A different kind of buildr, one we use to create XML.
24
+ require 'highline/import'
20
25
 
21
26
 
22
27
  module Buildr
@@ -31,7 +36,7 @@ module Buildr
31
36
  # In order to determine if we are running on a windows OS,
32
37
  # prefer this function instead of using Gem.win_platform?.
33
38
  #
34
- # Gem.win_platform? only checks the RUBY_PLATFORM global,
39
+ # Gem.win_platform? only checks these RUBY_PLATFORM global,
35
40
  # that in some cases like when running on JRuby is not
36
41
  # succifient for our purpose:
37
42
  #
@@ -55,8 +60,10 @@ module Buildr
55
60
  end
56
61
  cmd << ruby_bin
57
62
  cmd << '-S' << options.delete(:command) if options[:command]
58
- sh *cmd.push(*args.flatten).push(options) do |ok, status|
59
- ok or fail "Command failed with status (#{status ? status.exitstatus : 'unknown'}): [#{cmd.join(" ")}]"
63
+ cmd.concat args.flatten
64
+ cmd.push options
65
+ sh *cmd do |ok, status|
66
+ ok or fail "Command ruby failed with status (#{status ? status.exitstatus : 'unknown'}): [#{cmd.join(" ")}]"
60
67
  end
61
68
  end
62
69
 
@@ -109,7 +116,7 @@ module Buildr
109
116
  end
110
117
 
111
118
  # Utility methods for running gem commands
112
- module Gems
119
+ module Gems #:nodoc:
113
120
  extend self
114
121
 
115
122
  # Install gems specified by each Gem::Dependency if they are missing. This method prompts the user
@@ -186,24 +193,8 @@ end
186
193
  class OpenObject < Hash
187
194
 
188
195
  def initialize(source=nil, &block)
189
- @hash = Hash.new(&block)
190
- @hash.update(source) if source
191
- end
192
-
193
- def [](key)
194
- @hash[key]
195
- end
196
-
197
- def []=(key, value)
198
- @hash[key] = value
199
- end
200
-
201
- def delete(key)
202
- @hash.delete(key)
203
- end
204
-
205
- def to_hash
206
- @hash.clone
196
+ super &block
197
+ update source if source
207
198
  end
208
199
 
209
200
  def method_missing(symbol, *args)
@@ -13,6 +13,7 @@
13
13
  # License for the specific language governing permissions and limitations under
14
14
  # the License.
15
15
 
16
+
16
17
  module Buildr::Groovy
17
18
 
18
19
  # EasyB is a Groovy based BDD framework.
@@ -85,7 +86,7 @@ module Buildr::Groovy
85
86
  tests.inject([]) do |passed, test|
86
87
  name = test.sub(/.*?groovy[\/\\]/, '').pathmap('%X')
87
88
  report = File.join(task.report_to.to_s, name + ext)
88
- mkpath report.pathmap('%d'), :verbose => false
89
+ mkpath report.pathmap('%d')
89
90
  begin
90
91
  Java::Commands.java cmd_args,
91
92
  "-#{easyb_format}", report,
@@ -102,4 +103,4 @@ module Buildr::Groovy
102
103
 
103
104
  end
104
105
 
105
- Buildr::TestFramework << Buildr::Groovy::EasyB
106
+ Buildr::TestFramework << Buildr::Groovy::EasyB
@@ -19,7 +19,7 @@ module Buildr::Groovy
19
19
  # Groovyc compiler:
20
20
  # compile.using(:groovyc)
21
21
  #
22
- # You need to require 'buildr/java/groovyc' if you need to use this compiler.
22
+ # You need to require 'buildr/groovy/compiler' if you need to use this compiler.
23
23
  #
24
24
  # Used by default if .groovy files are found in the src/main/groovy directory (or src/test/groovy)
25
25
  # and sets the target directory to target/classes (or target/test/classes).
@@ -25,16 +25,16 @@ module Buildr
25
25
 
26
26
  first_time do
27
27
  # Global task "eclipse" generates artifacts for all projects.
28
- desc "Generate Eclipse artifacts for all projects"
29
- Project.local_task "eclipse"=>"artifacts"
28
+ desc 'Generate Eclipse artifacts for all projects'
29
+ Project.local_task 'eclipse'=>'artifacts'
30
30
  end
31
31
 
32
32
  before_define do |project|
33
- project.recursive_task("eclipse")
33
+ project.recursive_task('eclipse')
34
34
  end
35
35
 
36
36
  after_define do |project|
37
- eclipse = project.task("eclipse")
37
+ eclipse = project.task('eclipse')
38
38
 
39
39
  # Check if project has scala facet
40
40
  scala = project.compile.language == :scala
@@ -42,17 +42,18 @@ module Buildr
42
42
  # Only for projects that we support
43
43
  supported_languages = [:java, :scala]
44
44
  supported_packaging = %w(jar war rar mar aar)
45
- if (supported_languages.include? project.compile.language ||
45
+ if (supported_languages.include?(project.compile.language) ||
46
+ supported_languages.include?(project.test.compile.language) ||
46
47
  project.packages.detect { |pkg| supported_packaging.include?(pkg.type.to_s) })
47
- eclipse.enhance [ file(project.path_to(".classpath")), file(project.path_to(".project")) ]
48
+ eclipse.enhance [ file(project.path_to('.classpath')), file(project.path_to('.project')) ]
48
49
 
49
50
  # The only thing we need to look for is a change in the Buildfile.
50
- file(project.path_to(".classpath")=>Buildr.application.buildfile) do |task|
51
+ file(project.path_to('.classpath')=>Buildr.application.buildfile) do |task|
51
52
  info "Writing #{task.name}"
52
53
 
53
54
  m2repo = Buildr::Repositories.instance.local
54
55
 
55
- File.open(task.name, "w") do |file|
56
+ File.open(task.name, 'w') do |file|
56
57
  classpathentry = ClasspathEntryWriter.new project, file
57
58
  classpathentry.write do
58
59
  # Note: Use the test classpath since Eclipse compiles both "main" and "test" classes using the same classpath
@@ -82,7 +83,7 @@ module Buildr
82
83
  # Classpath elements from other projects
83
84
  classpathentry.src_projects project_libs
84
85
 
85
- classpathentry.output project.compile.target
86
+ classpathentry.output project.compile.target if project.compile.target
86
87
  classpathentry.lib libs
87
88
  classpathentry.var m2_libs, 'M2_REPO', m2repo
88
89
 
@@ -93,9 +94,9 @@ module Buildr
93
94
  end
94
95
 
95
96
  # The only thing we need to look for is a change in the Buildfile.
96
- file(project.path_to(".project")=>Buildr.application.buildfile) do |task|
97
+ file(project.path_to('.project')=>Buildr.application.buildfile) do |task|
97
98
  info "Writing #{task.name}"
98
- File.open(task.name, "w") do |file|
99
+ File.open(task.name, 'w') do |file|
99
100
  xml = Builder::XmlMarkup.new(:target=>file, :indent=>2)
100
101
  xml.projectDescription do
101
102
  xml.name project.id
@@ -103,17 +104,17 @@ module Buildr
103
104
  xml.buildSpec do
104
105
  if scala
105
106
  xml.buildCommand do
106
- xml.name "ch.epfl.lamp.sdt.core.scalabuilder"
107
+ xml.name 'ch.epfl.lamp.sdt.core.scalabuilder'
107
108
  end
108
109
  else
109
110
  xml.buildCommand do
110
- xml.name "org.eclipse.jdt.core.javabuilder"
111
+ xml.name 'org.eclipse.jdt.core.javabuilder'
111
112
  end
112
113
  end
113
114
  end
114
115
  xml.natures do
115
- xml.nature "ch.epfl.lamp.sdt.core.scalanature" if scala
116
- xml.nature "org.eclipse.jdt.core.javanature"
116
+ xml.nature 'ch.epfl.lamp.sdt.core.scalanature' if scala
117
+ xml.nature 'org.eclipse.jdt.core.javanature'
117
118
  end
118
119
  end
119
120
  end
@@ -126,7 +127,7 @@ module Buildr
126
127
  # It converts tasks to paths.
127
128
  # It converts absolute paths to relative paths.
128
129
  # It ignores duplicate directories.
129
- class ClasspathEntryWriter
130
+ class ClasspathEntryWriter #:nodoc:
130
131
  def initialize project, target
131
132
  @project = project
132
133
  @xml = Builder::XmlMarkup.new(:target=>target, :indent=>2)
@@ -149,7 +150,7 @@ module Buildr
149
150
  end
150
151
 
151
152
  # Write a classpathentry of kind 'src'.
152
- # Accepts an array of absolute paths or a task.
153
+ # Accept an array of absolute paths or a task.
153
154
  def src arg
154
155
  if [:sources, :target].all? { |message| arg.respond_to?(message) }
155
156
  src_from_task arg
@@ -159,10 +160,10 @@ module Buildr
159
160
  end
160
161
 
161
162
  # Write a classpathentry of kind 'src' for dependent projects.
162
- # Accepts an array of projects.
163
+ # Accept an array of projects.
163
164
  def src_projects project_libs
164
165
  project_libs.map(&:id).sort.uniq.each do |project_id|
165
- @xml.classpathentry :kind=>'src', :combineaccessrules=>"false", :path=>"/#{project_id}"
166
+ @xml.classpathentry :kind=>'src', :combineaccessrules=>'false', :path=>"/#{project_id}"
166
167
  end
167
168
  end
168
169
 
@@ -170,9 +171,18 @@ module Buildr
170
171
  @xml.classpathentry :kind=>'output', :path=>relative(target)
171
172
  end
172
173
 
174
+ # Write a classpathentry of kind 'var' (variable) for a library in a local repo.
175
+ # * +libs+ is an array of library paths.
176
+ # * +var_name+ is a variable name as defined in Eclipse (e.g., 'M2_REPO').
177
+ # * +var_value+ is the value of this variable (e.g., '/home/me/.m2').
178
+ # E.g., <tt>var([lib1, lib2], 'M2_REPO', '/home/me/.m2/repo')</tt>
173
179
  def var libs, var_name, var_value
174
- libs.map { |lib| lib.to_s.sub(var_value, var_name) }.sort.uniq.each do |path|
175
- @xml.classpathentry :kind=>'var', :path=>path
180
+ libs.each do |lib_path|
181
+ lib_artifact = file(lib_path)
182
+ source_path = lib_artifact.sources_artifact.to_s
183
+ relative_lib_path = lib_path.sub(var_value, var_name)
184
+ relative_source_path = source_path.sub(var_value, var_name)
185
+ @xml.classpathentry :kind=>'var', :path=>relative_lib_path, :sourcepath=>relative_source_path
176
186
  end
177
187
  end
178
188
 
@@ -17,7 +17,6 @@
17
17
  require 'buildr/core/project'
18
18
  require 'buildr/packaging'
19
19
  require 'stringio'
20
- require 'rexml/document'
21
20
 
22
21
 
23
22
  module Buildr
@@ -130,7 +129,9 @@ module Buildr
130
129
  xml.root :url=>"jar://#{path}!/"
131
130
  end
132
131
  xml.JAVADOC
133
- xml.SOURCES
132
+ xml.SOURCES do
133
+ xml.root :url=>"jar://#{path.sub(/\.jar$/, "-sources.jar")}!/"
134
+ end
134
135
  end
135
136
  end
136
137
  end
@@ -17,7 +17,7 @@
17
17
  require 'buildr/core/project'
18
18
  require 'buildr/packaging'
19
19
  require 'stringio'
20
- require 'rexml/document'
20
+
21
21
 
22
22
  module Buildr
23
23
  module Idea7x #:nodoc:
@@ -160,7 +160,9 @@ module Buildr
160
160
  xml.root :url=> path
161
161
  end
162
162
  xml.JAVADOC
163
- xml.SOURCES
163
+ xml.SOURCES do
164
+ xml.root :url=>"jar://#{path.sub(/\.jar$/, "-sources.jar")}!/"
165
+ end
164
166
  end
165
167
  end
166
168
  end
@@ -179,8 +181,8 @@ module Buildr
179
181
  xml.modules do
180
182
  project.projects.each do |subp|
181
183
  module_name = subp.name.gsub(":", "-")
182
- module_path = subp.name.split(":"); module_path.shift
183
- module_path = module_path.join(File::SEPARATOR)
184
+ module_path = subp.base_dir ? subp.base_dir.gsub(/^#{project.base_dir}\//, '') :
185
+ subp.name.split(":")[1 .. -1].join(FILE::SEPARATOR)
184
186
  path = "#{module_path}/#{module_name}#{IML_SUFFIX}"
185
187
  xml.module :fileurl=>"#{PROJECT_DIR_URL}/#{path}", :filepath=>"#{PROJECT_DIR}/#{path}"
186
188
  end