jbundler 0.7.4 → 0.8.0.pre

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/lib/jbundler/lazy.rb DELETED
@@ -1,102 +0,0 @@
1
- #
2
- # Copyright (C) 2013 Christian Meier
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy of
5
- # this software and associated documentation files (the "Software"), to deal in
6
- # the Software without restriction, including without limitation the rights to
7
- # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
8
- # the Software, and to permit persons to whom the Software is furnished to do so,
9
- # subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in all
12
- # copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
16
- # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
17
- # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18
- # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19
- # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
- #
21
- require 'jbundler/aether'
22
- require 'maven/tools/coordinate'
23
- module JBundler
24
- module Lazy
25
-
26
- include Maven::Tools::Coordinate
27
-
28
- def self.included(clazz)
29
- begin
30
- require 'java'
31
- warn ''
32
- warn 'lazy jar loading does NOT garantee the consistency of the classloader.'
33
- warn 'duplicated jars with different version and other dependency conflicts can easily occur.'
34
- warn ''
35
- warn 'add new jars with:'
36
- warn ''
37
- warn "\tjar 'org.yaml:snakeyaml'"
38
- warn "\tjar 'org.slf4j:slf4j-simple', '>1.1'"
39
- warn ''
40
- warn 'show loaded jars with:'
41
- warn "\tjars"
42
- warn ''
43
- rescue LoadError
44
- warn 'no jar support possible without JRuby - just launching an IRB session'
45
- end
46
- end
47
-
48
- def jars
49
- if jb_classpath.empty?
50
- puts "\tno jars loaded via jbundler"
51
- else
52
- jb_classpath.each do |path|
53
- puts "\t#{path}"
54
- end
55
- end
56
- nil
57
- end
58
-
59
- def jar(name, *version)
60
- unless defined? JRUBY_VERSION
61
- warn 'no jar support possible without JRuby'
62
- return
63
- end
64
- aether.add_artifact("#{name}:#{to_version(*version)}")
65
- aether.resolve
66
- result = false
67
- aether.classpath_array.each do |path|
68
- if result ||= (require path)
69
- warn "added #{path} to classloader"
70
- jb_classpath << path
71
- else
72
- warn "already loaded: #{path}"
73
- end
74
- end
75
- result
76
- end
77
-
78
- private
79
-
80
- def jb_classpath
81
- @jb_cp ||= defined?(JBUNDLER_CLASSPATH) ? JBUNDLER_CLASSPATH.dup : []
82
- end
83
-
84
- def jb_config
85
- @_jb_c ||= JBundler::Config.new
86
- end
87
-
88
- def aether
89
- @_aether ||=
90
- begin
91
- aether = JBundler::AetherRuby.new(jb_config)
92
- jarfile = Maven::Tools::Jarfile.new(jb_config.jarfile)
93
- gemfile_lock = JBundler::GemfileLock.new(jarfile,
94
- jb_config.gemfile_lock)
95
- jarfile.populate_unlocked(aether)
96
- gemfile_lock.populate_dependencies(aether) if gemfile_lock.exists?
97
- jarfile.populate_locked(aether)
98
- aether
99
- end
100
- end
101
- end
102
- end
@@ -1,166 +0,0 @@
1
- require 'jbundler/configurator'
2
- require 'jbundler/classpath_file'
3
- require 'jbundler/vendor'
4
- require 'jbundler/gemfile_lock'
5
- require 'jbundler/show'
6
- require 'maven/tools/gemspec_dependencies'
7
- require 'maven/tools/jarfile'
8
- require 'maven/ruby/maven'
9
- require 'fileutils'
10
- require 'jar_installer'
11
-
12
- module JBundler
13
- class LockDown
14
-
15
- def initialize( config )
16
- @config = config
17
- @configurator = Configurator.new( config )
18
- end
19
-
20
- def vendor
21
- @vendor ||= JBundler::Vendor.new( @config.vendor_dir )
22
- end
23
-
24
- def update( debug = false, verbose = false )
25
- if vendor.vendored?
26
- raise 'can not update vendored jars'
27
- end
28
-
29
- FileUtils.rm_f( @config.jarfile_lock )
30
-
31
- lock_down( false, debug, verbose )
32
- end
33
-
34
- def lock_down( needs_vendor = false, debug = false, verbose = false )
35
- jarfile = Maven::Tools::Jarfile.new( @config.jarfile )
36
- classpath = JBundler::ClasspathFile.new( @config.classpath_file )
37
- if jarfile.exists_lock? && classpath.exists?
38
- needs_update = false
39
- else
40
- needs_update = needs_update?( jarfile, classpath )
41
- end
42
- if ( ! needs_update && ! needs_vendor ) || vendor.vendored?
43
-
44
- puts 'Jar dependencies are up to date !'
45
-
46
- if needs_update?( jarfile, classpath )
47
- f = classpath.file.sub(/#{Dir.pwd}#{File::SEPARATOR}/, '' )
48
- "the #{f} is stale, i.e. Gemfile or Jarfile is newer. `jbundle update` will update it"
49
- end
50
- else
51
-
52
- puts '...'
53
-
54
- deps = install_dependencies( debug, verbose, jarfile.exists_lock? )
55
-
56
- update_files( classpath, collect_jars( deps ) ) if needs_update
57
-
58
- vendor_it( vendor, deps ) if needs_vendor
59
-
60
- end
61
- end
62
-
63
- private
64
-
65
- def needs_update?( jarfile, classpath )
66
- gemfile_lock = JBundler::GemfileLock.new( jarfile,
67
- @config.gemfile_lock )
68
- classpath.needs_update?( jarfile, gemfile_lock )
69
- end
70
-
71
- def vendor_it( vendor, deps )
72
- puts "vendor directory: #{@config.vendor_dir}"
73
- vendor.vendor_dependencies( deps )
74
- puts
75
- end
76
-
77
- def collect_jars( deps )
78
- jars = {}
79
- deps.each do |d|
80
- case d.scope
81
- when :provided
82
- ( jars[ :jruby ] ||= [] ) << d
83
- when :test
84
- ( jars[ :test ] ||= [] ) << d
85
- else
86
- ( jars[ :runtime ] ||= [] ) << d
87
- end
88
- end
89
- jars
90
- end
91
-
92
- def update_files( classpath_file, jars )
93
- if jars.values.flatten.size == 0
94
- FileUtils.rm_f @config.jarfile_lock
95
- else
96
- lock = Maven::Tools::DSL::JarfileLock.new( @config.jarfile )
97
- lock.replace( jars )
98
- lock.dump
99
- end
100
- classpath_file.generate( (jars[ :runtime ] || []).collect { |j| j.file },
101
- (jars[ :test ] || []).collect { |j| j.file },
102
- (jars[ :jruby ] || []).collect { |j| j.file },
103
- @config.local_repository )
104
- end
105
-
106
- def install_dependencies( debug, verbose, exclude_transitive = false )
107
- deps_file = File.join( File.expand_path( @config.work_dir ),
108
- 'dependencies.txt' )
109
-
110
- exec_maven( debug, verbose, deps_file, exclude_transitive )
111
-
112
- result = []
113
- File.read( deps_file ).each_line do |line|
114
- dep = Jars::JarInstaller::Dependency.new( line )
115
- result << dep if dep
116
- end
117
- result
118
- ensure
119
- FileUtils.rm_f( deps_file ) if deps_file
120
- end
121
-
122
- def exec_maven( debug, verbose, output, exclude_transitive = false )
123
- m = Maven::Ruby::Maven.new
124
- m.options[ '-f' ] = File.join( File.dirname( __FILE__ ),
125
- 'dependency_pom.rb' )
126
- m.property( 'verbose', debug || verbose )
127
- m.options[ '-q' ] = nil if !debug and !verbose
128
- m.options[ '-e' ] = nil if !debug and verbose
129
- m.options[ '-X' ] = nil if debug
130
- m.options[ '-DexcludeTransitive' ] = exclude_transitive
131
- m.verbose = debug
132
- m.property( 'jbundler.outputFile', output )
133
-
134
- @configurator.configure( m )
135
-
136
- attach_jar_coordinates( m )
137
-
138
- m.exec( 'dependency:list' )
139
- end
140
-
141
- private
142
-
143
- def attach_jar_coordinates( maven )
144
- load_path = $LOAD_PATH.dup
145
- require 'bundler/setup'
146
- done = []
147
- index = 0
148
- Gem.loaded_specs.each do |name, spec|
149
- # TODO get rid of this somehow
150
- deps = Maven::Tools::GemspecDependencies.new( spec )
151
- deps.java_dependency_artifacts.each do |a|
152
- unless done.include? a.key
153
- maven.property( "jbundler.jars.#{index}", a.to_s )
154
- index += 1
155
- done << a.key
156
- end
157
- end
158
- end
159
- if index > 0
160
- maven.property( "jbundler.jars.size", index )
161
- end
162
- ensure
163
- $LOAD_PATH.replace( load_path )
164
- end
165
- end
166
- end
@@ -1,71 +0,0 @@
1
- require 'maven/ruby/maven'
2
- module JBundler
3
-
4
- class PomRunner
5
-
6
- def initialize( config )
7
- @config = config
8
- end
9
-
10
- def method_missing( m, *args )
11
- result = @config[ m ] || @config[ m.to_s ]
12
- result.nil? ? super : result
13
- end
14
-
15
- def maven_new
16
- m = Maven::Ruby::Maven.new
17
- m.property( 'base.dir', File.expand_path( basedir ) )
18
- m.property( 'work.dir', File.expand_path( workdir ) ) if workdir
19
- m.property( 'verbose', debug || verbose )
20
- if debug
21
- m.options[ '-X' ] = nil
22
- elsif verbose
23
- m.options[ '-e' ] = nil
24
- else
25
- m.options[ '-q' ] = nil
26
- end
27
- m.verbose = debug
28
- m
29
- end
30
- private :maven_new
31
-
32
- def maven
33
- @m ||= maven_new
34
- end
35
-
36
- def basedir
37
- File.expand_path( '.' )
38
- end
39
-
40
- def workdir
41
- @config[ 'workdir' ]
42
- end
43
-
44
- def work_dir
45
- # needs default here
46
- workdir || 'pkg'
47
- end
48
-
49
- def debug
50
- @config[ 'debug' ] || false
51
- end
52
-
53
- def verbose
54
- @config[ 'verbose' ] || false
55
- end
56
-
57
- def clean?
58
- @config[ 'clean' ] || false
59
- end
60
-
61
- def pom_file
62
- raise 'overwrite this method'
63
- end
64
-
65
- def exec( *args )
66
- maven.options[ '-f' ] ||= pom_file
67
- args.unshift :clean if clean?
68
- maven.exec( *args )
69
- end
70
- end
71
- end
data/lib/jbundler/show.rb DELETED
@@ -1,53 +0,0 @@
1
- require 'jbundler/configurator'
2
- require 'jbundler/classpath_file'
3
- require 'jbundler/vendor'
4
- require 'jbundler/gemfile_lock'
5
- require 'maven/tools/jarfile'
6
- require 'maven/ruby/maven'
7
- require 'fileutils'
8
- module JBundler
9
- class Show
10
-
11
- def initialize( config )
12
- @config = config
13
- @classpath_file = JBundler::ClasspathFile.new( @config.classpath_file )
14
- end
15
-
16
- def show_classpath
17
- return if ! @config.verbose
18
- vendor = JBundler::Vendor.new(@config.vendor_dir)
19
- if vendor.vendored?
20
- vendor.require_jars
21
- warn "complete classpath:"
22
- $CLASSPATH.each do |path|
23
- warn "\t#{path}"
24
- end
25
- else
26
- @classpath_file.load_classpath
27
- warn ''
28
- warn 'jbundler provided classpath:'
29
- warn '----------------'
30
- JBUNDLER_JRUBY_CLASSPATH.each do |path|
31
- warn "#{path}"
32
- end
33
- warn ''
34
- warn 'jbundler runtime classpath:'
35
- warn '---------------------------'
36
- JBUNDLER_CLASSPATH.each do |path|
37
- warn "#{path}"
38
- end
39
- warn ''
40
- warn 'jbundler test classpath:'
41
- warn '------------------------'
42
- if JBUNDLER_TEST_CLASSPATH.empty?
43
- warn "\t--- empty ---"
44
- else
45
- JBUNDLER_TEST_CLASSPATH.each do |path|
46
- warn "#{path}"
47
- end
48
- end
49
- warn ''
50
- end
51
- end
52
- end
53
- end
data/lib/jbundler/tree.rb DELETED
@@ -1,31 +0,0 @@
1
- require 'jbundler/configurator'
2
- require 'maven/ruby/maven'
3
- require 'fileutils'
4
- module JBundler
5
- class Tree
6
-
7
- def initialize( config )
8
- @config = Configurator.new( config )
9
- end
10
-
11
- def show_it( debug = false )
12
- m = Maven::Ruby::Maven.new
13
- m.options[ '-f' ] = File.join( File.dirname( __FILE__ ),
14
- 'dependency_pom.rb' )
15
- m.options[ '-q' ] = nil unless debug
16
- m.verbose = debug
17
-
18
- @config.configure( m )
19
-
20
- puts '...'
21
-
22
- tree = File.join( File.expand_path( @config.work_dir ),
23
- 'tree.txt' )
24
- m.property( 'jbundler.outputFile', tree )
25
-
26
- m.exec( 'dependency:tree' )
27
-
28
- puts File.read( tree )
29
- end
30
- end
31
- end
@@ -1,52 +0,0 @@
1
- require 'jar_installer'
2
- module JBundler
3
- class Vendor
4
-
5
- def initialize( dir )
6
- @dir = File.expand_path( dir )
7
- end
8
-
9
- def vendored?
10
- File.exists?( @dir ) && Dir[ File.join( @dir, '*' ) ].size > 0
11
- end
12
-
13
- def require_jars
14
- jars = File.join( @dir, 'jbundler.rb' )
15
- if File.exists?( jars )
16
- $LOAD_PATH << @dir unless $LOAD_PATH.include? @dir
17
- require jars
18
- else
19
- Dir[ File.join( @dir, '**', '*' ) ].each do |f|
20
- require f
21
- end
22
- Jars.freeze_loading
23
- true
24
- end
25
- end
26
-
27
- def clear
28
- FileUtils.mkdir_p( @dir )
29
- Dir[ File.join( @dir, '*' ) ].each do |f|
30
- FileUtils.rm_rf( f )
31
- end
32
- end
33
-
34
- def vendor_dependencies( deps )
35
- require_file = File.join( @dir, 'jbundler.rb' )
36
- Jars::JarInstaller.install_deps( deps, @dir, require_file, true ) do |f|
37
- f.puts
38
- f.puts 'Jars.freeze_loading'
39
- end
40
- end
41
-
42
- def setup( classpath_file )
43
- classpath_file.require_classpath
44
- FileUtils.mkdir_p( @dir )
45
- JBUNDLER_CLASSPATH.each do |f|
46
- FileUtils.cp( f, File.join( @dir,
47
- File.basename( f ) ) )
48
- end
49
- end
50
- end
51
- end
52
-
data/lib/jbundler.jar DELETED
Binary file
data/spec/aether_spec.rb DELETED
@@ -1,98 +0,0 @@
1
- load File.expand_path(File.join('spec', 'setup.rb'))
2
- require 'maven/tools/jarfile'
3
- require 'maven/tools/model'
4
- require 'jbundler/aether'
5
- require 'fileutils'
6
-
7
- describe JBundler::AetherRuby do
8
-
9
- let(:workdir) { 'pkg' }
10
- let(:jfile) { File.join(workdir, 'tmp-jarfile') }
11
- let(:jfile_lock) { jfile + ".lock"}
12
- let(:jarfile) { Maven::Tools::Jarfile.new(jfile) }
13
- subject { JBundler::AetherRuby.new }
14
-
15
- before do
16
- FileUtils.mkdir_p( workdir )
17
- Dir[File.join(workdir, "tmp*")].each { |f| FileUtils.rm_f f }
18
- end
19
-
20
- it 'repositories' do
21
- File.open(jfile, 'w') do |f|
22
- f.write <<-EOF
23
- repository :first, "http://example.com/repo"
24
- source 'second', "http://example.org/repo"
25
- EOF
26
- end
27
- jarfile.populate_unlocked subject
28
- subject.repositories.size.must_equal 3
29
- subject.artifacts.size.must_equal 0
30
- subject.repositories[0].id.must_equal "central"
31
- subject.repositories[1].id.must_equal "first"
32
- subject.repositories[2].id.must_equal "second"
33
- subject.repositories[0].get_policy( false ).is_enabled.must_equal true
34
- subject.repositories[0].get_policy( true ).is_enabled.must_equal true
35
- subject.repositories[1].get_policy( true ).is_enabled.must_equal false
36
- subject.repositories[2].get_policy( true ).is_enabled.must_equal false
37
- end
38
-
39
- it 'snapshot repositories' do
40
- File.open(jfile, 'w') do |f|
41
- f.write <<-EOF
42
- snapshot_repository :snap, "http://example.com/repo"
43
- EOF
44
- end
45
- jarfile.populate_unlocked subject
46
- subject.repositories.size.must_equal 2
47
- subject.artifacts.size.must_equal 0
48
- subject.repositories[0].id.must_equal "central"
49
- subject.repositories[1].id.must_equal "snap"
50
- subject.repositories[1].get_policy( true ).is_enabled.must_equal true
51
- end
52
-
53
- it 'artifacts without locked' do
54
- File.open(jfile, 'w') do |f|
55
- f.write <<-EOF
56
- jar 'a:b', '123'
57
- pom 'x:y', '987'
58
- EOF
59
- end
60
- jarfile.populate_unlocked subject
61
- subject.repositories.size.must_equal 1 # central
62
- subject.artifacts.size.must_equal 2
63
- subject.artifacts[0].to_s.must_equal "a:b:jar:123"
64
- subject.artifacts[1].to_s.must_equal "x:y:pom:987"
65
- end
66
-
67
- it 'artifacts with locked' do
68
- File.open(jfile, 'w') do |f|
69
- f.write <<-EOF
70
- jar 'a:b', '123'
71
- pom 'x:y', '987'
72
- EOF
73
- end
74
- File.open(jfile_lock, 'w') do |f|
75
- f.write <<-EOF
76
- a:b:jar:432
77
- EOF
78
- end
79
-
80
- jarfile.populate_unlocked subject
81
- subject.repositories.size.must_equal 1 # central
82
- subject.artifacts.size.must_equal 1
83
- subject.artifacts[0].to_s.must_equal "x:y:pom:987"
84
- end
85
-
86
- it 'locked artifacts' do
87
- File.open(jfile_lock, 'w') do |f|
88
- f.write <<-EOF
89
- a:b:jar:432
90
- EOF
91
- end
92
-
93
- jarfile.populate_locked subject
94
- subject.repositories.size.must_equal 1 # central
95
- subject.artifacts.size.must_equal 1
96
- subject.artifacts[0].to_s.must_equal "a:b:jar:432"
97
- end
98
- end