Class: Jars::Installer

Inherits:
Object
  • Object
show all
Defined in:
lib/jars/installer.rb

Defined Under Namespace

Classes: Dependency

Constant Summary collapse

COMMENT =
'# this is a generated file, to avoid over-writing it just delete this comment'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(spec = nil) ⇒ Installer

Returns a new instance of Installer.



143
144
145
# File 'lib/jars/installer.rb', line 143

def initialize(spec = nil)
  @mvn = MavenExec.new(spec)
end

Class Method Details

.install_jars(write_require_file: false) ⇒ Object



75
76
77
# File 'lib/jars/installer.rb', line 75

def self.install_jars(write_require_file: false)
  new.install_jars(write_require_file: write_require_file)
end

.load_from_maven(file) ⇒ Object



79
80
81
82
83
84
85
86
# File 'lib/jars/installer.rb', line 79

def self.load_from_maven(file)
  result = []
  File.read(file).each_line do |line|
    dep = Dependency.parse(line)
    result << dep if dep && dep.scope == :runtime
  end
  result
end


96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/jars/installer.rb', line 96

def self.print_require_jar(file, dep, fallback: false)
  return if dep.type != :jar || dep.scope != :runtime

  if dep.system?
    file&.puts("require '#{dep.file}'")
  elsif dep.scope == :runtime
    if fallback
      file&.puts("  require '#{dep.path}'")
    else
      file&.puts("  require_jar '#{dep.gav.gsub(':', "', '")}'")
    end
  end
end

.vendor_file(dir, dep) ⇒ Object



88
89
90
91
92
93
94
# File 'lib/jars/installer.rb', line 88

def self.vendor_file(dir, dep)
  return unless !dep.system? && dep.type == :jar && dep.scope == :runtime

  vendored = File.join(dir, dep.path)
  FileUtils.mkdir_p(File.dirname(vendored))
  FileUtils.cp(dep.file, vendored)
end

.vendor_jars(deps, dir) ⇒ Object



137
138
139
140
141
# File 'lib/jars/installer.rb', line 137

def self.vendor_jars(deps, dir)
  deps.each do |dep|
    vendor_file(dir, dep)
  end
end

.vendor_jars!(vendor_dir = nil) ⇒ Object



162
163
164
# File 'lib/jars/installer.rb', line 162

def self.vendor_jars!(vendor_dir = nil)
  new.vendor_jars!(vendor_dir)
end

.write_require_jars(deps, require_filename) ⇒ Object



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/jars/installer.rb', line 112

def self.write_require_jars(deps, require_filename)
  return if !require_filename || (
    File.exist?(require_filename) && !File.read(require_filename).index(COMMENT)
  )

  FileUtils.mkdir_p(File.dirname(require_filename))
  File.open(require_filename, 'w') do |f|
    f.puts COMMENT
    f.puts 'begin'
    f.puts "  require 'jar_dependencies'"
    f.puts 'rescue LoadError'
    deps.each do |dep|
      # do not use require_jar method
      print_require_jar(f, dep, fallback: true)
    end
    f.puts 'end'
    f.puts
    f.puts 'if defined? Jars'
    deps.each do |dep|
      print_require_jar(f, dep)
    end
    f.puts 'end'
  end
end

Instance Method Details

#install_jars(write_require_file: true) ⇒ Object



171
172
173
174
175
# File 'lib/jars/installer.rb', line 171

def install_jars(write_require_file: true)
  return unless jars?

  do_install(nil, write_require_file)
end

#jars?Boolean

Returns:

  • (Boolean)


181
182
183
184
185
186
187
188
189
190
191
# File 'lib/jars/installer.rb', line 181

def jars?
  spec = self.spec
  return if spec.nil? # rubocop:disable Style/ReturnNilInPredicateMethodDefinition
  return false unless spec.requirements&.any?
  return false unless spec.runtime_dependencies.find { |s| s.name == 'jar-dependencies' }

  return true if spec.platform.to_s == 'java'

  Jars.warn "jar-dependencies found on non-java platform gem; skipping jar installation"
  nil # rubocop:disable Style/ReturnNilInPredicateMethodDefinition
end

#ruby_maven_install_options=(options) ⇒ Object



177
178
179
# File 'lib/jars/installer.rb', line 177

def ruby_maven_install_options=(options)
  # no-op: kept for backward compatibility with post_install_hook
end

#specObject



147
148
149
# File 'lib/jars/installer.rb', line 147

def spec
  @mvn.spec
end

#vendor_jars(vendor_dir = nil, write_require_file: true) ⇒ Object



151
152
153
154
155
156
157
158
159
160
# File 'lib/jars/installer.rb', line 151

def vendor_jars(vendor_dir = nil, write_require_file: true)
  return unless jars?

  if Jars.to_prop(Jars::VENDOR) == 'false'
    vendor_dir = nil
  else
    vendor_dir ||= spec.require_path
  end
  do_install(vendor_dir, write_require_file)
end

#vendor_jars!(vendor_dir = nil, write_require_file: true) ⇒ Object



166
167
168
169
# File 'lib/jars/installer.rb', line 166

def vendor_jars!(vendor_dir = nil, write_require_file: true)
  vendor_dir ||= spec.require_path
  do_install(vendor_dir, write_require_file)
end