naether 0.2.5 → 0.2.6

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.5
1
+ 0.2.6
data/lib/naether.rb ADDED
@@ -0,0 +1,94 @@
1
+ require "#{File.dirname(__FILE__)}/naether/bootstrap"
2
+ require "#{File.dirname(__FILE__)}/naether/java"
3
+
4
+ # :title:Naether
5
+ #
6
+ # Java dependency resolver using Maven's Aether.
7
+ #
8
+ # = Authors
9
+ # Michael Guymon
10
+ #
11
+ class Naether
12
+
13
+ # Naether jar path will default to packaged in the gem
14
+ JAR_LIB = "#{File.dirname(__FILE__)}/.."
15
+
16
+ class << self
17
+ # Helper to determine the platform
18
+ def platform
19
+ $platform || RUBY_PLATFORM[/java/] || 'ruby'
20
+ end
21
+
22
+ # Java dependencies needed to bootstrap Naether
23
+ def bootstrap_dependencies( dep_file=nil )
24
+ Naether::Bootstrap.dependencies( dep_file )
25
+ end
26
+
27
+ def create_from_paths( deps_jar_dir, naether_jar_dir = nil )
28
+ naether_jar_dir = naether_jar_dir || JAR_LIB
29
+ Naether::Java.load_jars_dir( [deps_jar_dir, naether_jar_dir] )
30
+
31
+ Naether.new
32
+ end
33
+
34
+ def create_from_jars( jars )
35
+ Naether::Java.load_jars( jars )
36
+
37
+ Naether.new
38
+ end
39
+ end
40
+
41
+ #
42
+ # Create new instance
43
+ #
44
+ def initialize()
45
+
46
+ if Naether.platform == 'java'
47
+ @resolver = com.slackworks.Naether.new
48
+ else
49
+ naetherClass = Rjb::import('com.slackworks.Naether')
50
+ @resolver = naetherClass.new
51
+ end
52
+ end
53
+
54
+ def clear_remote_repositories
55
+ @resolver.clearRemoteRepositories()
56
+ end
57
+
58
+ # Add remote repository
59
+ def add_remote_repository( url )
60
+ @resolver.addRemoteRepository( url )
61
+ end
62
+
63
+ def remote_repositories
64
+ @resolver.getRemoteRepositories()
65
+ end
66
+
67
+ # Add a dependency in the notation: groupId:artifactId:type:version
68
+ def add_dependency( notation )
69
+ @resolver.addDependency( notation )
70
+ end
71
+
72
+ # Set array of dependencies in the notation: groupId:artifactId:type:version
73
+ def dependencies=(dependencies)
74
+ dependencies.each do |dependent|
75
+ add_dependency( dependent )
76
+ end
77
+ end
78
+
79
+ # Get dependencies
80
+ def dependencies
81
+ if Naether.platform == 'java'
82
+ return @resolver.getDependenciesNotation().to_a
83
+ else
84
+ bootstrap = Rjb::import('com.slackworks.Bootstrap')
85
+ return @resolver.getDependenciesNotation().toArray().map{ |dep| dep.toString() }
86
+ end
87
+ end
88
+
89
+ # Resolve dependencies, finding related additional dependencies
90
+ def resolve_dependencies
91
+ @resolver.resolveDependencies();
92
+ dependencies
93
+ end
94
+ end
@@ -0,0 +1,55 @@
1
+ require "#{File.dirname(__FILE__)}/java"
2
+ require 'yaml'
3
+
4
+ class Naether
5
+ # :title:Naether::Bootstrap
6
+ #
7
+ # Helper for bootstrapping Naether
8
+ #
9
+ # = Authors
10
+ # Michael Guymon
11
+ #
12
+ class Bootstrap
13
+
14
+ @@dependencies = nil
15
+
16
+ class << self
17
+
18
+ # Find naether jar relative to the gem install
19
+ def naether_jar
20
+ Dir.glob(File.expand_path("#{File.dirname(__FILE__)}/../../naether*.jar")).first
21
+ end
22
+
23
+ # write bootstrap dependencies to yaml file
24
+ def write_dependencies( jar_path = nil, dest = 'jar_dependencies.yml' )
25
+ Naether::Java.load_jars_dir( jar_path || Naether::JAR_LIB )
26
+ deps = {};
27
+ if Naether.platform == 'java'
28
+ deps[:dependencies] = com.slackworks.Bootstrap.dependencies.to_a
29
+ else
30
+ bootstrap = Rjb::import('com.slackworks.Bootstrap')
31
+ deps[:dependencies] = bootstrap.dependencies.toArray().map{ |dep| dep.toString() }
32
+ end
33
+
34
+ File.open( dest, 'w' ) do |out|
35
+ YAML.dump( deps, out )
36
+ end
37
+ end
38
+
39
+ # List of Java dependencies for Naether
40
+ def dependencies( dep_file=nil )
41
+
42
+ if @@dependencies
43
+ return @@dependencies
44
+ end
45
+
46
+ if dep_file.nil?
47
+ dep_file = "#{File.dirname( __FILE__ )}/../../jar_dependencies.yml"
48
+ end
49
+
50
+ dep = YAML.load_file( dep_file )
51
+ @@dependencies = dep[:dependencies]
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,124 @@
1
+ require 'singleton'
2
+
3
+ # :title:Naether::Java
4
+ #
5
+ # Handles loading jars. Determines correct platform to use, Naether::Java::JRuby
6
+ # or Naether::Java::Ruby
7
+ #
8
+ # = Authors
9
+ # Michael Guymon
10
+ #
11
+ class Naether
12
+ class Java
13
+
14
+ # Jars loaded
15
+ def self.loaded_jars
16
+ if Naether.platform == 'java'
17
+ Naether::Java::JRuby.instance.loaded_jars
18
+ else
19
+ Naether::Java::Ruby.instance.loaded_jars
20
+ end
21
+ end
22
+
23
+ #
24
+ #
25
+ #
26
+ def self.load_jars_dir(paths)
27
+ unless paths.is_a? Array
28
+ paths = [paths]
29
+ end
30
+
31
+ jars = []
32
+ paths.each do |path|
33
+ jars = jars + Dir.glob( "#{File.expand_path(path)}/*.jar")
34
+ end
35
+
36
+ Naether::Java.load_jars(jars)
37
+
38
+ end
39
+
40
+ #
41
+ # Load jars
42
+ #
43
+ def self.load_jars(jars)
44
+ if Naether.platform == 'java'
45
+ Naether::Java::JRuby.instance.load_jars(jars)
46
+ else
47
+ Naether::Java::Ruby.instance.load_jars(jars)
48
+ end
49
+ end
50
+
51
+ #
52
+ # Handle loading for JRuby
53
+ #
54
+ class JRuby
55
+ include Singleton
56
+
57
+ attr_reader :loaded_jars
58
+
59
+ def initialize
60
+ require 'java'
61
+
62
+ @loaded_jars = []
63
+ end
64
+
65
+ def load_jars(jars)
66
+ loaded_jars = []
67
+ unless jars.is_a? Array
68
+ jars = [jars]
69
+ end
70
+
71
+ jars.each do |jar|
72
+ expanded_jar = File.expand_path(jar)
73
+ if !@loaded_jars.include? expanded_jar
74
+ require expanded_jar
75
+ loaded_jars << expanded_jar
76
+ @loaded_jars << expanded_jar
77
+ end
78
+ end
79
+
80
+ loaded_jars
81
+ end
82
+ end
83
+
84
+ #
85
+ # Handle loading jars for Ruby via Rjb
86
+ #
87
+ class Ruby
88
+ include Singleton
89
+
90
+ attr_reader :loaded_jars
91
+
92
+ def initialize()
93
+ require 'rjb'
94
+
95
+ # Call Rjb::load with an empty classpath, incase Rjb::load has already been called
96
+ java_opts = (ENV['JAVA_OPTS'] || ENV['JAVA_OPTIONS']).to_s.split
97
+ Rjb::load("", java_opts)
98
+
99
+ @loaded_jars = []
100
+ end
101
+
102
+ def load_jars(jars)
103
+ loaded_jars = []
104
+ unless jars.is_a?( Array )
105
+ jars = [jars]
106
+ end
107
+
108
+ jars.each do |jar|
109
+ expanded_jar = File.expand_path(jar)
110
+ if !@loaded_jars.include? expanded_jar
111
+ loaded_jars << expanded_jar
112
+ @loaded_jars << expanded_jar
113
+ end
114
+ end
115
+
116
+ unless loaded_jars.empty?
117
+ Rjb::add_jar( loaded_jars )
118
+ end
119
+
120
+ loaded_jars
121
+ end
122
+ end
123
+ end
124
+ end
data/naether-0.2.1.jar ADDED
Binary file
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: naether
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 5
10
- version: 0.2.5
9
+ - 6
10
+ version: 0.2.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Guymon
@@ -96,6 +96,10 @@ files:
96
96
  - README.rdoc
97
97
  - VERSION
98
98
  - jar_dependencies.yml
99
+ - lib/naether.rb
100
+ - lib/naether/bootstrap.rb
101
+ - lib/naether/java.rb
102
+ - naether-0.2.1.jar
99
103
  - pom.xml
100
104
  has_rdoc: true
101
105
  homepage: http://github.com/mguymon/naether