buildr 1.4.9-java → 1.4.10-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.
- data/CHANGELOG +46 -0
- data/addon/buildr/checkstyle.rb +2 -2
- data/addon/buildr/findbugs.rb +2 -2
- data/addon/buildr/gpg.rb +77 -0
- data/addon/buildr/package_as_nsis.rb +80 -0
- data/addon/buildr/single_intermediate_layout.rb +69 -0
- data/addon/buildr/top_level_generate_dir.rb +37 -0
- data/addon/buildr/wsgen.rb +160 -0
- data/bin/buildr +1 -0
- data/buildr.gemspec +3 -3
- data/doc/download.textile +18 -6
- data/doc/index.textile +8 -1
- data/etc/KEYS +87 -0
- data/lib/buildr/core/application.rb +3 -2
- data/lib/buildr/ide/idea.rb +33 -12
- data/lib/buildr/java/commands.rb +13 -1
- data/lib/buildr/java/pom.rb +3 -4
- data/lib/buildr/java/tests.rb +10 -3
- data/lib/buildr/packaging/artifact.rb +18 -11
- data/lib/buildr/scala/bdd.rb +1 -1
- data/lib/buildr/scala/compiler.rb +31 -29
- data/lib/buildr/scala/doc.rb +0 -1
- data/lib/buildr/version.rb +1 -1
- data/rakelib/all-in-one.rake +17 -31
- data/rakelib/release.rake +1 -1
- data/rakelib/stage.rake +9 -2
- data/spec/core/application_spec.rb +1 -1
- data/spec/core/cc_spec.rb +0 -2
- data/spec/core/test_spec.rb +8 -8
- data/spec/java/pom_spec.rb +2 -2
- data/spec/java/tests_spec.rb +21 -9
- data/spec/packaging/artifact_spec.rb +53 -53
- data/spec/packaging/packaging_spec.rb +4 -4
- metadata +28 -26
data/CHANGELOG
CHANGED
@@ -1,3 +1,49 @@
|
|
1
|
+
1.4.10 (2013-02-10)
|
2
|
+
* Added: Support a single intermediate directory for each project hierarchy
|
3
|
+
through an addon 'buildr/single_intermediate_layout'.
|
4
|
+
* Fixed: BUILDR-660 possible build issue when using build.yaml and tasks/*.rake
|
5
|
+
(Félix Enrique Llorente Pastora)
|
6
|
+
* Added: Support the :dir option in the Java::Commands.java method.
|
7
|
+
* Fixed: Scala 2.10 support - compiler now uses additional/separate jars
|
8
|
+
introduced in 2.10 such as scala-reflect.jar and scala-actor.jar
|
9
|
+
* Added: Add an addon for NSIS.
|
10
|
+
* Change: BUILDR-612 - Support the TestNG 6.x versions and default
|
11
|
+
to 6.8.
|
12
|
+
* Added: BUILDR-599 - Support the passing of arguments to testng
|
13
|
+
test runner.
|
14
|
+
* Fixed: Observer the per-project source version when generating
|
15
|
+
IDEA module files.
|
16
|
+
* Change: Sort the components in IDEA project files in the same
|
17
|
+
order the idea sorts them.
|
18
|
+
* Fixed: Findbugs addon correctly handles String dependencies
|
19
|
+
(vs task dependencies)
|
20
|
+
* Fixed: Checkstyle addon correctly handles String dependencies
|
21
|
+
(vs task dependencies)
|
22
|
+
* Added: Created an addon 'buildr/wsgen' for generating wsdls from java
|
23
|
+
and java from wsdls using the underlying wsgen tool.
|
24
|
+
* Change: Defer the expansion of generated poms by wrapping the generation
|
25
|
+
in a Proc.
|
26
|
+
* Change: Rework Artifact.content(value) method to accept a Proc that
|
27
|
+
will be called before the artifact is written rather than
|
28
|
+
requiring a string.
|
29
|
+
* Added: Create a 'buildr/gpg' addon that signs and uploads signatures
|
30
|
+
when uploading artifacts. Inspired by a similar extension in
|
31
|
+
the Apache ODE project by Tammo van Lessen.
|
32
|
+
* Change: Updated dependency versions;
|
33
|
+
- jruby-openssl (0.8.2)
|
34
|
+
- atoulme-Antwrap (0.7.4)
|
35
|
+
* Change: Require 'bundler/setup' as part of buildr startup to ensure that
|
36
|
+
buildr always runs with up to date dependencies if a Gemfile is
|
37
|
+
present.
|
38
|
+
* Added: Add FrameworkDetectionExcludesConfiguration facet to Idea project
|
39
|
+
file creation by default.
|
40
|
+
* Fixed: In the IntelliJ extension, defer the materialization of the
|
41
|
+
default_components until expansion time to avoid loss of sub-
|
42
|
+
components added after an add_component call.
|
43
|
+
* Fixed: BUILDR-633 - Remove hardcoded shebang lines in all-in-one release.
|
44
|
+
* Added: Create a simple extension that modifies the project layout to place
|
45
|
+
generated files at the top level.
|
46
|
+
|
1
47
|
1.4.9 (2012-11-08)
|
2
48
|
* Fixed: Fixed the interaction with the FileUtils classes. The last release
|
3
49
|
introduced a non-deterministic bug that sometimes caused logging
|
data/addon/buildr/checkstyle.rb
CHANGED
@@ -34,7 +34,7 @@ module Buildr
|
|
34
34
|
|
35
35
|
def checkstyle(configuration_file, format, output_file, source_paths, options = {})
|
36
36
|
dependencies = (options[:dependencies] || []) + self.dependencies
|
37
|
-
cp = Buildr.artifacts(dependencies).each(
|
37
|
+
cp = Buildr.artifacts(dependencies).each { |a| a.invoke() if a.respond_to?(:invoke) }.map(&:to_s)
|
38
38
|
|
39
39
|
args = []
|
40
40
|
if options[:properties_file]
|
@@ -141,7 +141,7 @@ module Buildr
|
|
141
141
|
end
|
142
142
|
|
143
143
|
def extra_dependencies
|
144
|
-
@extra_dependencies ||= [self.project.compile.dependencies, self.project.test.compile.dependencies]
|
144
|
+
@extra_dependencies ||= [self.project.compile.dependencies, self.project.test.compile.dependencies].flatten
|
145
145
|
end
|
146
146
|
|
147
147
|
protected
|
data/addon/buildr/findbugs.rb
CHANGED
@@ -46,7 +46,7 @@ module Buildr
|
|
46
46
|
|
47
47
|
def findbugs(output_file, source_paths, analyze_paths, options = { })
|
48
48
|
dependencies = (options[:dependencies] || []) + self.dependencies
|
49
|
-
cp = Buildr.artifacts(dependencies).each(
|
49
|
+
cp = Buildr.artifacts(dependencies).each { |a| a.invoke() if a.respond_to?(:invoke) }.map(&:to_s).join(File::PATH_SEPARATOR)
|
50
50
|
|
51
51
|
args = {
|
52
52
|
:output => "xml:withMessages",
|
@@ -79,7 +79,7 @@ module Buildr
|
|
79
79
|
end
|
80
80
|
if options[:extra_dependencies]
|
81
81
|
ant.auxClasspath do |aux|
|
82
|
-
Buildr.artifacts(options[:extra_dependencies]).each(
|
82
|
+
Buildr.artifacts(options[:extra_dependencies]).each { |a| a.invoke() if a.respond_to?(:invoke) }.each do |dep|
|
83
83
|
aux.pathelement :location => dep.to_s
|
84
84
|
end
|
85
85
|
end
|
data/addon/buildr/gpg.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations under
|
14
|
+
# the License.
|
15
|
+
|
16
|
+
module Buildr
|
17
|
+
|
18
|
+
# Signs the packages using gpg and uploads signatures as part of the upload process.
|
19
|
+
#
|
20
|
+
# Require explicitly using <code>require "buildr/apg"</code>. This will result in all
|
21
|
+
# packages being signed. The user must specify the GPG_USER environment key to identify
|
22
|
+
# the key to use and may specify GPG_PASS if the key needs a password to access. e.g.
|
23
|
+
#
|
24
|
+
# $ GPG_USER=user@example.com GPG_PASSWD=secret buildr clean upload
|
25
|
+
#
|
26
|
+
module GPG
|
27
|
+
class << self
|
28
|
+
|
29
|
+
def sign_task(pkg)
|
30
|
+
raise "ENV['GPG_USER'] not specified" unless ENV['GPG_USER']
|
31
|
+
asc_filename = pkg.to_s + '.asc'
|
32
|
+
file(asc_filename => [pkg.to_s]) do
|
33
|
+
info "GPG signing #{pkg.to_spec}"
|
34
|
+
|
35
|
+
cmd = []
|
36
|
+
cmd << 'gpg'
|
37
|
+
cmd << '--local-user'
|
38
|
+
cmd << ENV['GPG_USER']
|
39
|
+
cmd << '--armor'
|
40
|
+
cmd << '--output'
|
41
|
+
cmd << pkg.to_s + '.asc'
|
42
|
+
if ENV['GPG_PASS']
|
43
|
+
cmd << '--passphrase'
|
44
|
+
cmd << ENV['GPG_PASS']
|
45
|
+
end
|
46
|
+
cmd << '--detach-sig'
|
47
|
+
cmd << pkg
|
48
|
+
trace(cmd.join(' '))
|
49
|
+
`#{cmd.join(' ')}`
|
50
|
+
raise "Unable to generate signature for #{pkg}" unless File.exist?(asc_filename)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def sign_and_upload(project, pkg)
|
55
|
+
project.task(:upload).enhance do
|
56
|
+
artifact = Buildr.artifact(pkg.to_spec_hash.merge(:type => "#{pkg.type}.asc"))
|
57
|
+
artifact.from(sign_task(pkg))
|
58
|
+
artifact.invoke
|
59
|
+
artifact.upload
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
module ProjectExtension
|
65
|
+
include Extension
|
66
|
+
|
67
|
+
after_define do |project|
|
68
|
+
project.packages.each { |pkg| Buildr::GPG.sign_and_upload(project, pkg) }
|
69
|
+
project.packages.map { |pkg| pkg.pom }.uniq.each { |pom| Buildr::GPG.sign_and_upload(project, pom) }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class Buildr::Project
|
76
|
+
include Buildr::GPG::ProjectExtension
|
77
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations under
|
14
|
+
# the License.
|
15
|
+
|
16
|
+
module Buildr
|
17
|
+
module PackageAsNsis
|
18
|
+
include Extension
|
19
|
+
|
20
|
+
class NSISTask < Rake::FileTask
|
21
|
+
attr_accessor :nsi
|
22
|
+
attr_accessor :values
|
23
|
+
attr_accessor :nsis_executable
|
24
|
+
attr_accessor :nsis_major_version
|
25
|
+
|
26
|
+
def initialize(*args) #:nodoc:
|
27
|
+
self.nsis_executable = "makensis"
|
28
|
+
self.nsis_major_version = 3
|
29
|
+
self.values = {}
|
30
|
+
|
31
|
+
super(*args)
|
32
|
+
|
33
|
+
enhance do
|
34
|
+
info "Calling makensis"
|
35
|
+
# We make available one variable to the nsi script:
|
36
|
+
# Use it like this: OutFile "${OUTPUT}"
|
37
|
+
values = self.values.merge("OUTPUT" => to_s)
|
38
|
+
|
39
|
+
log_level_param = (self.nsis_major_version == 2 ? "/" : "-") + (verbose ? "V2" : "V0")
|
40
|
+
define_prefix = (self.nsis_major_version == 2) ? "/D" : "-D"
|
41
|
+
|
42
|
+
command = "#{self.nsis_executable} #{log_level_param} #{values.inject([]) { |array, (key, value)| array << "#{define_prefix}#{key}=#{value}"; array }.join(" ")} #{self.nsi}"
|
43
|
+
trace command
|
44
|
+
system(command) or fail "Error while executing makeNSIS"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# :call-seq:
|
49
|
+
# with(options) => self
|
50
|
+
#
|
51
|
+
# Passes options to the task and returns self. Some tasks support additional options, for example,
|
52
|
+
# the WarTask supports options like :manifest, :libs and :classes.
|
53
|
+
#
|
54
|
+
# For example:
|
55
|
+
# package(:jar).with(:manifest=>'MANIFEST_MF')
|
56
|
+
def with(options)
|
57
|
+
options.each do |key, value|
|
58
|
+
begin
|
59
|
+
send "#{key}=", value
|
60
|
+
rescue NoMethodError
|
61
|
+
raise ArgumentError, "#{self.class.name} does not support the option #{key}"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
self
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def package_as_nsis(file_name)
|
69
|
+
NSISTask.define_task(file_name)
|
70
|
+
end
|
71
|
+
|
72
|
+
def package_as_nsis_spec(spec)
|
73
|
+
spec.merge(:type=>:exe)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class Buildr::Project
|
79
|
+
include Buildr::PackageAsNsis
|
80
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations under
|
14
|
+
# the License.
|
15
|
+
|
16
|
+
module Buildr #nodoc
|
17
|
+
class Project #nodoc
|
18
|
+
class << self
|
19
|
+
|
20
|
+
alias :original_define :define
|
21
|
+
|
22
|
+
# Monkey patch the built-in define so that there is a single root directory for
|
23
|
+
# all of the generated artifacts within a project hierarchy.
|
24
|
+
#
|
25
|
+
def define(name, properties = nil, &block) #:yields:project
|
26
|
+
|
27
|
+
properties = properties.nil? ? {} : properties.dup
|
28
|
+
|
29
|
+
parent_name = name.split(':')[0...-1]
|
30
|
+
parent = parent_name.empty? ? nil : Buildr.application.lookup(parent_name.join(':'))
|
31
|
+
|
32
|
+
# Follow the same algorithm as in project code
|
33
|
+
if properties[:base_dir]
|
34
|
+
base_dir = properties[:base_dir]
|
35
|
+
elsif parent
|
36
|
+
base_dir = File.expand_path(name.split(':').last, parent.base_dir)
|
37
|
+
else
|
38
|
+
base_dir = Dir.pwd
|
39
|
+
end
|
40
|
+
|
41
|
+
# The top directory is the base directory of the root project
|
42
|
+
top_dir = base_dir
|
43
|
+
while parent
|
44
|
+
top_dir = parent.base_dir
|
45
|
+
parent = parent.parent
|
46
|
+
end
|
47
|
+
|
48
|
+
target_dir = "#{top_dir}/target/#{name.gsub(':', '_')}"
|
49
|
+
reports_dir = "#{top_dir}/reports/#{name.gsub(':', '_')}"
|
50
|
+
target_dir = ::Buildr::Util.relative_path(target_dir, File.expand_path(base_dir))
|
51
|
+
reports_dir = ::Buildr::Util.relative_path(reports_dir, File.expand_path(base_dir))
|
52
|
+
|
53
|
+
properties[:layout] = Buildr::Layout::Default.new unless properties[:layout]
|
54
|
+
properties[:layout][:target] = target_dir
|
55
|
+
properties[:layout][:reports] = reports_dir
|
56
|
+
properties[:layout][:target, :main] = target_dir
|
57
|
+
|
58
|
+
Project.original_define(name, properties) do
|
59
|
+
project.instance_eval &block
|
60
|
+
if top_dir == base_dir && project.iml?
|
61
|
+
project.iml.excluded_directories << "#{base_dir}/target"
|
62
|
+
project.iml.excluded_directories << "#{base_dir}/reports"
|
63
|
+
end
|
64
|
+
project
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations under
|
14
|
+
# the License.
|
15
|
+
|
16
|
+
module Buildr
|
17
|
+
|
18
|
+
# A simple extension that modifies the project layout to place generated files at the top level.
|
19
|
+
# Generated files are typically created below layout[:target, :generated], placing them at the top
|
20
|
+
# level makes it easy for IDEs to inspect source in the generated directory while ignoring the dir
|
21
|
+
# containing the intermediate artifacts.
|
22
|
+
#
|
23
|
+
module TopLevelGenerateDir
|
24
|
+
module ProjectExtension
|
25
|
+
include Extension
|
26
|
+
|
27
|
+
before_define do |project|
|
28
|
+
project.layout[:target, :generated] = "generated"
|
29
|
+
project.clean { rm_rf project._(:target, :generated) }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class Buildr::Project
|
36
|
+
include Buildr::TopLevelGenerateDir::ProjectExtension
|
37
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations under
|
14
|
+
# the License.
|
15
|
+
|
16
|
+
module Buildr
|
17
|
+
module Wsgen
|
18
|
+
class << self
|
19
|
+
|
20
|
+
# :call-seq:
|
21
|
+
# java2wsdl(project, classnames, options) => String
|
22
|
+
#
|
23
|
+
# Uses wsgen to generate wsdl files form annotated, compiled classes. The parameters are
|
24
|
+
# * :project -- The project in which the classes are compiled.
|
25
|
+
# * :classnames -- Either an array of classnames to convert to wsdl or a map keyed on classnames and service
|
26
|
+
# specific customizations provided.
|
27
|
+
#
|
28
|
+
# Service options include:
|
29
|
+
# * :service_name -- The name of the service.
|
30
|
+
# * :namespace_url -- The namespace of the service.
|
31
|
+
#
|
32
|
+
# Method options include:
|
33
|
+
# * :output_dir -- The target directory.
|
34
|
+
# * :namespace_url -- The default namespace for the services.
|
35
|
+
#
|
36
|
+
# For example:
|
37
|
+
# Buildr::Wsgen.java2wsdl(project, %w(com.example.MyService))
|
38
|
+
# Buildr::Wsgen.java2wsdl(project, %w(com.example.MyService com.example.MyOtherService))
|
39
|
+
# Buildr::Wsgen.java2wsdl(project, %w(com.example.MyService com.example.MyOtherService), :namespace_url => "http://example.com/services")
|
40
|
+
# Buildr::Wsgen.java2wsdl(project, {"com.example.MyService" => {:service_name => 'MiaService', :namespace_url => "http://example.com/it/services"}))
|
41
|
+
def java2wsdl(project, classnames, options = {})
|
42
|
+
desc "Generate wsdl from java"
|
43
|
+
project.task("java2wsdl").enhance([project.compile.target])
|
44
|
+
|
45
|
+
base_wsdl_dir = File.expand_path(options[:output_dir] || project._(:target, :generated, :wsgen, :main, :wsdl))
|
46
|
+
project.iml.main_source_directories << base_wsdl_dir if project.iml?
|
47
|
+
project.file(base_wsdl_dir)
|
48
|
+
project.task("java2wsdl").enhance([base_wsdl_dir])
|
49
|
+
|
50
|
+
services = classnames.is_a?(Array) ? classnames.inject({}) {|result, element| result[element] = {}; result} : classnames
|
51
|
+
|
52
|
+
services.each_pair do |classname, config|
|
53
|
+
|
54
|
+
name_parts = classname.split('.')
|
55
|
+
service_name = config[:service_name] || name_parts.last
|
56
|
+
namespace_url = config[:namespace_url] || options[:namespace_url] || "http://#{name_parts[0...-1].reverse.join('.')}"
|
57
|
+
wsdl_file = File.expand_path("#{base_wsdl_dir}/META-INF/wsdl/#{service_name}.wsdl")
|
58
|
+
|
59
|
+
project.file(wsdl_file) do
|
60
|
+
mkdir_p File.dirname(wsdl_file)
|
61
|
+
cp = Buildr.artifacts(project.compile.dependencies + [project.compile.target]).map(&:to_s).join(File::PATH_SEPARATOR)
|
62
|
+
|
63
|
+
java_dir = project._(:target, :ignored, :wsgen, :main, :java)
|
64
|
+
intermediate_dir = project._(:target, :ignored, :wsgen, :main, :java)
|
65
|
+
|
66
|
+
rm_rf java_dir
|
67
|
+
rm_rf intermediate_dir
|
68
|
+
mkdir_p java_dir
|
69
|
+
mkdir_p intermediate_dir
|
70
|
+
|
71
|
+
args = []
|
72
|
+
args << "-keep"
|
73
|
+
args << "-inlineSchemas" if (options[:inlineSchemas] && ENV_JAVA['java.version'] >= '1.7')
|
74
|
+
args << "-wsdl"
|
75
|
+
args << "-servicename"
|
76
|
+
args << "{#{namespace_url}}#{service_name}"
|
77
|
+
args << "-portname"
|
78
|
+
args << "{#{namespace_url}}#{service_name}Port"
|
79
|
+
args << "-d "
|
80
|
+
args << intermediate_dir
|
81
|
+
args << "-r"
|
82
|
+
args << "#{base_wsdl_dir}/META-INF/wsdl"
|
83
|
+
args << "-keep"
|
84
|
+
args << "-s"
|
85
|
+
args << java_dir
|
86
|
+
args << "-cp"
|
87
|
+
args << cp
|
88
|
+
args << classname
|
89
|
+
|
90
|
+
command = "wsgen #{args.join(' ')}"
|
91
|
+
trace command
|
92
|
+
sh command
|
93
|
+
if $? != 0
|
94
|
+
raise "Problem building wsdl"
|
95
|
+
end
|
96
|
+
|
97
|
+
content = IO.read(wsdl_file).gsub('REPLACE_WITH_ACTUAL_URL', "http://example.com/#{service_name}")
|
98
|
+
File.open(wsdl_file, 'wb') { |f| f.write content }
|
99
|
+
end
|
100
|
+
|
101
|
+
project.file(base_wsdl_dir).enhance([wsdl_file])
|
102
|
+
project.task("java2wsdl").enhance([wsdl_file])
|
103
|
+
end
|
104
|
+
|
105
|
+
base_wsdl_dir
|
106
|
+
end
|
107
|
+
|
108
|
+
# :call-seq:
|
109
|
+
# wsdl2java(project, wsdls, options) => String
|
110
|
+
#
|
111
|
+
# Uses wsgen to generate java files form wsdls. The parameters are
|
112
|
+
# * :project -- The project in which the classes are compiled.
|
113
|
+
# * :wsdls -- A hash of wsdl filenames to service configuration.
|
114
|
+
#
|
115
|
+
# Service options include:
|
116
|
+
# * :service_name -- The name of the service.
|
117
|
+
# * :package -- The package in which to generate the code.
|
118
|
+
#
|
119
|
+
# Method options include:
|
120
|
+
# * :output_dir -- The target directory.
|
121
|
+
# * :target -- The target version for generated source..
|
122
|
+
# * :package -- The default package in which to generate the code.
|
123
|
+
#
|
124
|
+
# For example:
|
125
|
+
# Buildr::Wsgen.wsdl2java(project, {_('src/main/wsdl/MyService.wsdl') => {}})
|
126
|
+
# Buildr::Wsgen.wsdl2java(project, {_('src/main/wsdl/MyService.wsdl') => {:package => 'com.example'}})
|
127
|
+
# Buildr::Wsgen.wsdl2java(project, {_('src/main/wsdl/MyService.wsdl') => {:output_dir => _(:target, :wsdl, :java)}})
|
128
|
+
# Buildr::Wsgen.wsdl2java(project, {_('src/main/wsdl/MyService.wsdl') => {}}, :package => 'com.example' )
|
129
|
+
def wsdl2java(project, wsdls, options = {})
|
130
|
+
desc "Generate java from wsdl"
|
131
|
+
project.task("wsdl2java")
|
132
|
+
|
133
|
+
ws_dir = File.expand_path(options[:output_dir] || project._(:target, :generated, "main/ws"))
|
134
|
+
project.file(ws_dir)
|
135
|
+
project.task('wsdl2java').enhance([ws_dir])
|
136
|
+
|
137
|
+
target = options[:target] || '2.1'
|
138
|
+
|
139
|
+
wsdls.each_pair do |wsdl_file, config|
|
140
|
+
pkg = config[:package] || options[:package]
|
141
|
+
service = config[:service] || File.basename(wsdl_file, '.wsdl')
|
142
|
+
java_file = "#{ws_dir}/#{pkg.gsub('.', '/')}/#{service}.java"
|
143
|
+
project.file(java_file) do
|
144
|
+
mkdir_p ws_dir
|
145
|
+
`wsimport -keep -Xnocompile -target #{target} -s #{ws_dir} -p #{pkg} -wsdllocation META-INF/wsdl/#{service}.wsdl #{wsdl_file}`
|
146
|
+
if $? != 0 || !File.exist?(java_file)
|
147
|
+
rm_rf java_file
|
148
|
+
raise "Problem building webservices"
|
149
|
+
end
|
150
|
+
end
|
151
|
+
project.file(ws_dir).enhance([java_file])
|
152
|
+
end
|
153
|
+
|
154
|
+
project.compile.from ws_dir
|
155
|
+
project.iml.main_source_directories << ws_dir if project.iml?
|
156
|
+
project.compile.enhance(['wsdl2java'])
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|