buildr 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -0
- data/lib/buildr.rb +1 -1
- data/lib/buildr/cobertura.rb +82 -0
- data/lib/buildr/hibernate.rb +123 -0
- data/lib/buildr/jdepend.rb +13 -0
- data/lib/core/transports.rb +21 -4
- data/lib/java/artifact.rb +2 -0
- data/lib/java/eclipse.rb +3 -3
- data/lib/java/java.rb +7 -7
- metadata +6 -3
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
1.1.2 (5/29/2007)
|
2
|
+
* Added: Allow passing :java_args option to the junit task
|
3
|
+
* Added: Hibernate XDoclet and SchemaExport tasks. (Requires buildr/hibernate)
|
4
|
+
* Added: JDepend UI for seeing depenencies across all projects. (Requires buildr/jdepend)
|
5
|
+
* Added: Cobertura test coverage tasks, reporting both html and xml. (Requires buildr/cobertura)
|
6
|
+
* Changed: tools_jar now returns empty array on OS/X, part of the ongoing Write Once/Test Everywere effort. (Credit Paul Brown)
|
7
|
+
* Fixed: Work around keep_alive bug in Net::HTTP. (http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/10818)
|
8
|
+
|
1
9
|
1.1.1 (5/16/2007)
|
2
10
|
* Changed: Test case class names must end with Test, TestCase, Suite or TestSuite.
|
3
11
|
* Changed: You can now run rake test:{foo,bar} to match against either foo or bar (requires \{..\} on UNIX).
|
data/lib/buildr.rb
CHANGED
@@ -0,0 +1,82 @@
|
|
1
|
+
module Buildr
|
2
|
+
module Cobertura
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
REQUIRES = ["cobertura:cobertura:jar:1.8", "log4j:log4j:jar:1.2.9", "asm:asm:jar:2.2.1", "oro:oro:jar:2.0.8"]
|
7
|
+
|
8
|
+
def requires()
|
9
|
+
@requires ||= Buildr.artifacts(REQUIRES).each(&:invoke).map(&:to_s)
|
10
|
+
end
|
11
|
+
|
12
|
+
def ant_project()
|
13
|
+
@ant_project ||= Buildr::Ant.executable("cobertura") { |ant|
|
14
|
+
ant.taskdef(:classpath=>requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties" ) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def report_to(file = nil)
|
18
|
+
File.expand_path(File.join(*["cobertura", file.to_s].compact))
|
19
|
+
end
|
20
|
+
|
21
|
+
def data_file()
|
22
|
+
File.expand_path("cobertura.ser")
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
namespace "cobertura" do
|
28
|
+
|
29
|
+
task "instrument" do
|
30
|
+
Buildr.projects.each do |project|
|
31
|
+
unless project.compile.sources.empty?
|
32
|
+
# Instrumented bytecode goes in a different directory. This task creates before running the test
|
33
|
+
# cases and monitors for changes in the generate bytecode.
|
34
|
+
instrumented = project.file(project.path_to(:target, "instrumented")=>project.compile.target) do |task|
|
35
|
+
ant_project.send "cobertura-instrument", :todir=>task.to_s, :datafile=>data_file do
|
36
|
+
fileset(:dir=>project.compile.target.to_s) { include :name=>"**/*.class" }
|
37
|
+
end
|
38
|
+
touch task.to_s, :verbose=>false
|
39
|
+
end
|
40
|
+
# We now have two target directories with bytecode. It would make sense to remove compile.target
|
41
|
+
# and add instrumented instead, but apparently Cobertura only creates some of the classes, so
|
42
|
+
# we need both directories and instrumented must come first.
|
43
|
+
project.test.junit.classpath.unshift file(instrumented)
|
44
|
+
project.test.junit.with requires
|
45
|
+
project.clean { rm_rf instrumented.to_s, :verbose=>false }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
desc "Run the test cases and produce code coverage reports in #{report_to(:html)}"
|
51
|
+
task "html"=>["instrument", "build"] do
|
52
|
+
puts "Creating test coverage reports in #{report_to(:html)}"
|
53
|
+
projects = Buildr.projects
|
54
|
+
ant_project.send "cobertura-report", :destdir=>report_to(:html), :format=>"html", :datafile=>data_file do
|
55
|
+
projects.map(&:compile).map(&:sources).flatten.each do |src|
|
56
|
+
fileset(:dir=>src.to_s) { include :name=>"**/*.java" } if File.exist?(src.to_s)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
desc "Run the test cases and produce code coverage reports in #{report_to(:xml)}"
|
62
|
+
task "xml"=>["instrument", "build"] do
|
63
|
+
puts "Creating test coverage reports in #{report_to(:xml)}"
|
64
|
+
projects = Buildr.projects
|
65
|
+
ant_project.send "cobertura-report", :destdir=>report_to(:xml), :format=>"xml", :datafile=>data_file do
|
66
|
+
projects.map(&:compile).map(&:sources).flatten.each do |src|
|
67
|
+
fileset :dir=>src.to_s if File.exist?(src.to_s)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
task "clean" do
|
73
|
+
rm_rf [report_to, data_file], :verbose=>false
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
task "clean" do
|
78
|
+
task("cobertura:clean").invoke if Dir.pwd == Rake.application.original_dir
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require "java/java"
|
2
|
+
require "java/ant"
|
3
|
+
|
4
|
+
module Buildr
|
5
|
+
module Hibernate
|
6
|
+
|
7
|
+
REQUIRES = Buildr.struct(
|
8
|
+
:collections => "commons-collections:commons-collections:jar:3.1",
|
9
|
+
:logging => "commons-logging:commons-logging:jar:1.0.3",
|
10
|
+
:dom4j => "dom4j:dom4j:jar:1.6.1",
|
11
|
+
:hibernate => "org.hibernate:hibernate:jar:3.1.2",
|
12
|
+
:xdoclet => Buildr.group("xdoclet", "xdoclet-xdoclet-module", "xdoclet-hibernate-module",
|
13
|
+
:under=>"xdoclet", :version=>"1.2.3") + ["xdoclet:xjavadoc:jar:1.1-j5"]
|
14
|
+
)
|
15
|
+
|
16
|
+
class << self
|
17
|
+
include Buildr::Ant
|
18
|
+
|
19
|
+
# :call-seq:
|
20
|
+
# doclet(options) => AntProject
|
21
|
+
#
|
22
|
+
# Uses XDoclet to generate HBM files form annotated source files.
|
23
|
+
# Options include:
|
24
|
+
# * :sources -- Directory (or directories) containing source files.
|
25
|
+
# * :target -- The target directory.
|
26
|
+
# * :excludetags -- Tags to exclude (see HibernateDocletTask)
|
27
|
+
#
|
28
|
+
# For example:
|
29
|
+
# doclet :sources=>compile.sources, :target=>compile.target, :excludedtags=>"@version,@author,@todo"
|
30
|
+
def doclet(options)
|
31
|
+
options[:sources].each { |src| file(src).invoke }
|
32
|
+
ant("hibernatedoclet") do |doclet|
|
33
|
+
doclet.taskdef :name=>"hibernatedoclet", :classname=>"xdoclet.modules.hibernate.HibernateDocletTask", :classpath=>requires
|
34
|
+
doclet.hibernatedoclet :destdir=>options[:target].to_s, :excludedtags=>options[:excludedtags], :force=>"true" do
|
35
|
+
hibernate :version=>"3.0"
|
36
|
+
options[:sources].map(&:to_s).each do |source|
|
37
|
+
fileset :dir=>source.to_s, :includes=>"**/*.java"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# :call-seq:
|
44
|
+
# schemaexport(properties) { ... } => AntProject
|
45
|
+
#
|
46
|
+
# Runs the Hibernate SchemaExportTask with the specified properties. For example:
|
47
|
+
# Buildr::Hibernate.schemaexport(:properties=>properties.to_s, :quiet=>"yes", :text=>"yes", :delimiter=>";",
|
48
|
+
# :drop=>"no", :create=>"yes", :output=>target) do
|
49
|
+
# fileset :dir=>source.to_s, :includes=>"**/*.hbm.xml"
|
50
|
+
# end
|
51
|
+
def schemaexport(options = nil, &block)
|
52
|
+
ant("schemaexport") do |ant|
|
53
|
+
ant.taskdef :name=>"schemaexport", :classname=>"org.hibernate.tool.hbm2ddl.SchemaExportTask", :classpath=>requires
|
54
|
+
ant.schemaexport options, &block if options
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
protected
|
59
|
+
|
60
|
+
# This will download all the required artifacts before returning a classpath, and we want to do this only once.
|
61
|
+
def requires()
|
62
|
+
@requires ||= Buildr.artifacts(REQUIRES.to_a).each(&:invoke).map(&:to_s).join(File::PATH_SEPARATOR)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
# :call-seq:
|
68
|
+
# hibernate_doclet(options?) => task
|
69
|
+
#
|
70
|
+
# Runs the hibernate doclet on the source files and creates HBM files in the target directory.
|
71
|
+
# By default runs on all source files, but you can limit it to a given package using the :package
|
72
|
+
# options. You can also pass other options to the doclet task.
|
73
|
+
#
|
74
|
+
# For example:
|
75
|
+
# resources hibernate_doclet(:package=>"org.apache.ode.store.hib", :excludedtags=>"@version,@author,@todo")
|
76
|
+
def hibernate_doclet(options = {})
|
77
|
+
if options[:package]
|
78
|
+
depends = compile.sources.map { |src| FileList[File.join(src.to_s, options[:package].gsub(".", "/"), "*.java")] }.flatten
|
79
|
+
else
|
80
|
+
depends = compile.sources.map { |src| FileList[File.join(src.to_s, "**/*.java")] }.flatten
|
81
|
+
end
|
82
|
+
file("target/hbm.timestamp"=>depends) do |task|
|
83
|
+
Hibernate.doclet({ :sources=>compile.sources, :target=>compile.target }.merge(options))
|
84
|
+
write task.name
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# :call-seq:
|
89
|
+
# hibernate_schemaexport(path) => task
|
90
|
+
# hibernate_schemaexport(path) { |task, ant| .. } => task
|
91
|
+
#
|
92
|
+
# Returns an new file task with an accessor (ant) to an AntProject that defines the schemaexport task.
|
93
|
+
# If called with a block, the task will yield to the block passing both itself and the Ant project.
|
94
|
+
#
|
95
|
+
# See #schemaexport.
|
96
|
+
#
|
97
|
+
# For example:
|
98
|
+
# hibernate_schemaexport "derby.sql" do |task, ant|
|
99
|
+
# ant.schemaexport :properties=>"derby.properties", :output=>task.name,
|
100
|
+
# :delimiter=>";", :drop=>"no", :create=>"yes" do
|
101
|
+
# fileset(:dir=>path_to(:java_src_dir)) { include :name=>"**/*.hbm.xml" } }
|
102
|
+
# end
|
103
|
+
# end
|
104
|
+
def hibernate_schemaexport(args, &block)
|
105
|
+
path, deps = Rake.application.resolve_args(args)
|
106
|
+
unless Rake::Task.task_defined?(path)
|
107
|
+
class << file(path) ; attr_accessor :ant ; end
|
108
|
+
file(path).enhance { |task| task.ant = Hibernate.schemaexport }
|
109
|
+
end
|
110
|
+
if block
|
111
|
+
file(path).enhance(deps) { |task| block.call task, task.ant }
|
112
|
+
else
|
113
|
+
file(path).enhance deps
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
class Project
|
120
|
+
include Hibernate
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Buildr
|
2
|
+
module Jdepend
|
3
|
+
|
4
|
+
REQUIRES = ["jdepend:jdepend:jar:2.9.1"]
|
5
|
+
|
6
|
+
desc "Runs JDepend on all your projects"
|
7
|
+
task "jdepend" do
|
8
|
+
paths = Project.projects.map(&:compile).each(&:invoke).map(&:target).map(&:to_s).select { |path| File.exist?(path) }
|
9
|
+
Buildr.java "jdepend.swingui.JDepend", paths, :classpath=>REQUIRES
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
data/lib/core/transports.rb
CHANGED
@@ -27,6 +27,21 @@ module Net #:nodoc:all
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
# Monkeypatching Net::HTTP to solve keep_alive bug, see http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/10818
|
31
|
+
module Net
|
32
|
+
class HTTP
|
33
|
+
def keep_alive?(req, res)
|
34
|
+
return false if /close/i =~ req['connection'].to_s
|
35
|
+
return false if @seems_1_0_server
|
36
|
+
return false if /close/i =~ res['connection'].to_s
|
37
|
+
return true if /keep-alive/i =~ res['connection'].to_s
|
38
|
+
return false if /close/i =~ res['proxy-connection'].to_s
|
39
|
+
return true if /keep-alive/i =~ res['proxy-connection'].to_s
|
40
|
+
(@curr_http_version == '1.1')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
30
45
|
|
31
46
|
module Buildr
|
32
47
|
|
@@ -74,11 +89,11 @@ module Buildr
|
|
74
89
|
#
|
75
90
|
# Convenience method for downloading a single file from the specified
|
76
91
|
# URL to the target file.
|
77
|
-
def download(url, target, options = nil)
|
92
|
+
def download(url, target, options = nil, &block)
|
78
93
|
uri = URI.parse(url.to_s)
|
79
94
|
path, uri.path = uri.path, ""
|
80
95
|
const_get(uri.scheme.upcase).perform(uri, options) do |transport|
|
81
|
-
transport.download(path, target)
|
96
|
+
transport.download(path, target, &block)
|
82
97
|
end
|
83
98
|
end
|
84
99
|
|
@@ -238,7 +253,9 @@ module Buildr
|
|
238
253
|
class Digester #:nodoc:
|
239
254
|
|
240
255
|
def initialize(types)
|
241
|
-
|
256
|
+
# Digests disabled for now, we have a keep-alive problem with Net::HTTP.
|
257
|
+
#types ||= [ "md5", "sha1" ]
|
258
|
+
types ||= []
|
242
259
|
@digests = types.inject({}) do |hash, type|
|
243
260
|
hash[type.to_s.downcase] = Digest.const_get(type.to_s.upcase).new
|
244
261
|
hash
|
@@ -304,7 +321,7 @@ module Buildr
|
|
304
321
|
when Net::HTTPRedirection
|
305
322
|
# Try to download from the new URI, handle relative redirects.
|
306
323
|
puts "Redirected to #{response['Location']}" if Rake.application.options.trace
|
307
|
-
last_modified = Transports.download(@uri + URI.parse(response["location"]), target, @options)
|
324
|
+
last_modified = Transports.download(@uri + URI.parse(response["location"]), target, @options, &block)
|
308
325
|
|
309
326
|
when Net::HTTPOK
|
310
327
|
puts "Downloading #{@uri}/#{path}" if verbose
|
data/lib/java/artifact.rb
CHANGED
@@ -381,6 +381,8 @@ module Buildr
|
|
381
381
|
Transports.perform URI.parse(repo_url.to_s), :proxy=>proxy do |http|
|
382
382
|
mkpath File.dirname(path), :verbose=>false
|
383
383
|
http.download(rel_path, path)
|
384
|
+
end
|
385
|
+
Transports.perform URI.parse(repo_url.to_s), :proxy=>proxy do |http|
|
384
386
|
begin
|
385
387
|
http.download(rel_path.ext("pom"), path.ext("pom"))
|
386
388
|
rescue Transports::NotFound
|
data/lib/java/eclipse.rb
CHANGED
@@ -76,8 +76,8 @@ module Buildr
|
|
76
76
|
end
|
77
77
|
|
78
78
|
# Classpath elements from other projects
|
79
|
-
project_libs.map(&:
|
80
|
-
xml.classpathentry :kind=>'src', :combineaccessrules=>"false", :path=>"/#{
|
79
|
+
project_libs.map(&:id).sort.uniq.each do |project_id|
|
80
|
+
xml.classpathentry :kind=>'src', :combineaccessrules=>"false", :path=>"/#{project_id}"
|
81
81
|
end
|
82
82
|
|
83
83
|
# Main resources implicitly copied into project.compile.target
|
@@ -113,7 +113,7 @@ module Buildr
|
|
113
113
|
File.open(task.name, "w") do |file|
|
114
114
|
xml = Builder::XmlMarkup.new(:target=>file, :indent=>2)
|
115
115
|
xml.projectDescription do
|
116
|
-
xml.name project.
|
116
|
+
xml.name project.id
|
117
117
|
xml.projects
|
118
118
|
xml.buildSpec do
|
119
119
|
xml.buildCommand do
|
data/lib/java/java.rb
CHANGED
@@ -2,7 +2,7 @@ require "rjb"
|
|
2
2
|
require "core/project"
|
3
3
|
|
4
4
|
module Buildr
|
5
|
-
|
5
|
+
|
6
6
|
# Base module for all things Java.
|
7
7
|
module Java
|
8
8
|
|
@@ -82,13 +82,13 @@ module Buildr
|
|
82
82
|
# :call-seq:
|
83
83
|
# tools_jar() => path
|
84
84
|
#
|
85
|
-
# Returns a path to tools.jar.
|
86
|
-
#
|
85
|
+
# Returns a path to tools.jar. On OS/X which has not tools.jar, returns an empty array,
|
86
|
+
# on all other platforms, fails if it doesn't find tools.jar.
|
87
87
|
def tools_jar()
|
88
|
-
return
|
89
|
-
@tools ||= File.join(home, "lib/tools.jar") or raise "I need tools.jar to compile, can't find it in #{home}/lib"
|
88
|
+
return [] if darwin?
|
89
|
+
@tools ||= [File.join(home, "lib/tools.jar")] or raise "I need tools.jar to compile, can't find it in #{home}/lib"
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
# :call-seq:
|
93
93
|
# home() => path
|
94
94
|
#
|
@@ -275,7 +275,7 @@ module Buildr
|
|
275
275
|
def junit(*args)
|
276
276
|
options = Hash === args.last ? args.pop : {}
|
277
277
|
options[:verbose] ||= Rake.application.options.trace || false
|
278
|
-
rake_check_options options, :verbose, :classpath, :properties
|
278
|
+
rake_check_options options, :verbose, :classpath, :properties, :java_args
|
279
279
|
|
280
280
|
classpath = classpath_from(options) + junit_artifacts
|
281
281
|
tests = args.flatten
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: buildr
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.1.
|
7
|
-
date: 2007-05-
|
6
|
+
version: 1.1.2
|
7
|
+
date: 2007-05-29 00:00:00 -07:00
|
8
8
|
summary: A build system that doesn't suck
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -42,8 +42,11 @@ files:
|
|
42
42
|
- lib/core/rake_ext.rb
|
43
43
|
- lib/core/common.rb
|
44
44
|
- lib/buildr/jetty.rb
|
45
|
+
- lib/buildr/hibernate.rb
|
45
46
|
- lib/buildr/xmlbeans.rb
|
46
47
|
- lib/buildr/javacc.rb
|
48
|
+
- lib/buildr/cobertura.rb
|
49
|
+
- lib/buildr/jdepend.rb
|
47
50
|
- lib/buildr/openjpa.rb
|
48
51
|
- lib/buildr/jetty
|
49
52
|
- lib/buildr/jetty/JettyWrapper.java
|