jarbler 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc9683c3fba322e4476646046c54b7c61ae7b6fa3d4c9865d1223fad0db590ee
4
- data.tar.gz: 5e64e298302111c5fbcc606c8aad86ba93b454daece192318c33b3eca6696ccb
3
+ metadata.gz: ff7c6489ae577a03079ca5976e6f8ea2c311593aa2754590b83e37a446f68bc9
4
+ data.tar.gz: 840b7720151675d538e08473857d7fae6a4342f478cf84473ffc231f2414fc46
5
5
  SHA512:
6
- metadata.gz: 0edc420a59cb4e48364c0155c0cee0f2449b32264de8f3967cf790b82df541a367d7206b4a5dbf0461561be9e88fee79d8ba7bdc737d6ca2eda951a97cc5e0d9
7
- data.tar.gz: 4e7d227903baacaaf8960f333c9f3beaee96dd5c399a45ab724620af04fbdfcbb5ed1ccce9a1955907d563ce2888b1d9a0b174dc2dadb85d557960e30ca7608c
6
+ metadata.gz: 444d52de14b8316967b5184c9e814e40d52bcb780d84ef74dc148befea457232182bf83b01ec8c64540959af7d2522d2e20417ed9589771e8cd63779ffd60266
7
+ data.tar.gz: 991f7a004c5383846504ff98c7b0c0cb508e50530d64887e4418dd7b9ec2e788764303fa7358eb43d8d66ec3143118da038ee8cf8b03e5743dbc7b83175ff87b
data/CHANGELOG.md CHANGED
@@ -3,3 +3,12 @@
3
3
  ## [0.1.0] - 2023-04-12
4
4
 
5
5
  - Initial release
6
+
7
+ ## [0.1.1] - 2023-04-24
8
+
9
+ - Fixed the bug 'java.lang.ClassNotFoundException: org.jruby.Main' with Windows
10
+
11
+ ## [0.1.2] - 2023-04-24
12
+
13
+ - extract valid Gem paths from Bundler instead of using the environment variable GEM_PATH
14
+
data/README.md CHANGED
@@ -53,6 +53,7 @@ The default executable parameters are "server -p 8080 -e production".
53
53
 
54
54
  ## Troubleshooting
55
55
  * Set DEBUG=true in environment to get additional runtime information
56
+ * The temporary folder with the extracted app and jRuby runtime files is not deleted after execution if DEBUG is set.
56
57
 
57
58
  ## Contributing
58
59
 
data/jarbler.gemspec CHANGED
@@ -8,12 +8,12 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["Peter Ramm"]
9
9
  spec.email = ["Peter@ramm-oberhermsdorf.de"]
10
10
 
11
- spec.summary = "Create jar file from Rails app"
12
- spec.description = "Pack a Rails application into an executable jar file"
11
+ spec.summary = "Pack a Ruby app into a Java jar file"
12
+ spec.description = "Pack Ruby combined with jRuby runtime into a jar file to simply run the app on any Java platform by '> java -jar file.jar'"
13
13
  spec.homepage = "https://github.com/rammpeter/jarbler"
14
14
  spec.license = "MIT"
15
15
  spec.required_ruby_version = ">= 2.6.0"
16
-
16
+
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = "https://github.com/rammpeter/jarbler"
19
19
  spec.metadata["changelog_uri"] = "https://github.com/rammpeter/jarbler/CHANGELOG.md"
@@ -23,7 +23,10 @@ import java.lang.ClassNotFoundException;
23
23
  import java.lang.NoSuchMethodException;
24
24
  import java.lang.IllegalAccessException;
25
25
  import java.lang.InstantiationException;
26
-
26
+ import java.util.Map;
27
+ import java.util.HashMap;
28
+ import java.lang.reflect.Field;
29
+ import java.io.FileWriter;
27
30
 
28
31
  class JarMain {
29
32
 
@@ -55,6 +58,7 @@ class JarMain {
55
58
  System.out.println("Extracting files from "+jarPath+" to "+ newFolder.getAbsolutePath());
56
59
  unzip(jarPath, newFolder.getAbsolutePath());
57
60
 
61
+ String app_root = newFolder.getAbsolutePath()+File.separator+"app_root";
58
62
 
59
63
  // get the file name of the jruby jar file in newFolder
60
64
  File[] files = newFolder.listFiles();
@@ -86,15 +90,15 @@ class JarMain {
86
90
  throw new RuntimeException("Property 'executable' definition missing in jarbler.properties");
87
91
  }
88
92
 
89
- System.setProperty("GEM_PATH", newFolder.getAbsolutePath()+File.separator+"gems"); // not really necessray for Rails
90
- System.setProperty("GEM_HOME", newFolder.getAbsolutePath()+File.separator+"gems"); // not really necessray for Rails
91
- System.setProperty("BUNDLE_PATH", newFolder.getAbsolutePath()+File.separator+"gems"); // this drives bundler for rails app
92
- System.setProperty("BUNDLE_WITHOUT", "test:development"); // exclude test and development dependencies from Gemfile check
93
+ // create the bundle config file with the path of the gems
94
+ create_bundle_config(app_root, newFolder.getAbsolutePath()+File.separator+"gems");
93
95
 
94
96
  // Load the Jar file
95
97
  URLClassLoader classLoader = new URLClassLoader(new URL[]{
96
- new URL("file://" + jrubyCoreFile.getAbsolutePath()),
97
- new URL("file://" + jrubyStdlibFile.getAbsolutePath())
98
+ jrubyCoreFile.toURI().toURL(),
99
+ jrubyStdlibFile.toURI().toURL()
100
+ //new URL("file:/" + jrubyCoreFile.getAbsolutePath()),
101
+ //new URL("file:/" + jrubyStdlibFile.getAbsolutePath())
98
102
  });
99
103
 
100
104
  // Load the class
@@ -128,15 +132,18 @@ class JarMain {
128
132
  debug(" - " + arg);
129
133
  }
130
134
 
131
- System.setProperty("user.dir", newFolder.getAbsolutePath()+File.separator+"app_root");
135
+ System.setProperty("user.dir", app_root);
132
136
  // call the method org.jruby.Main.main
133
137
  mainMethod.invoke(null, (Object)mainArgs.toArray(new String[mainArgs.size()]));
134
138
  } catch (Exception e) {
135
- e.getCause().printStackTrace();
139
+ e.printStackTrace();
136
140
  } finally {
137
- // remove the temp directory newFolder
138
- debug("jRuby program terminated, removing temporary folder "+ newFolder.getAbsolutePath());
139
- deleteFolder(newFolder);
141
+ // remove the temp directory newFolder if not DEBUG mode
142
+ if (System.getenv("DEBUG") != null) {
143
+ System.out.println("DEBUG mode is active, temporary folder is not removed at process termination: "+ newFolder.getAbsolutePath());
144
+ } else {
145
+ deleteFolder(newFolder);
146
+ }
140
147
  }
141
148
  }
142
149
 
@@ -206,4 +213,16 @@ class JarMain {
206
213
  file.delete();
207
214
  }
208
215
 
216
+
217
+ private static void create_bundle_config(String app_root, String gem_path) throws IOException {
218
+ File bundle_config = new File(app_root + File.separator + ".bundle");
219
+ bundle_config.mkdir();
220
+ File bundle_config_file = new File(bundle_config.getAbsolutePath() + File.separator + "config");
221
+ bundle_config_file.createNewFile();
222
+ FileWriter fw = new FileWriter(bundle_config_file);
223
+ fw.write("---\n");
224
+ fw.write("BUNDLE_PATH: " + gem_path + "\n");
225
+ fw.write("BUNDLE_WITHOUT: test:development\n");
226
+ fw.close();
227
+ }
209
228
  }
@@ -86,28 +86,28 @@ module Jarbler
86
86
  # @param [String] app_root Application root directory
87
87
  # @return [Array] Array of Gem locations
88
88
  def collect_gem_search_locations(app_root)
89
- # Search locations of gems in Gemfile.lock
90
- possible_gem_search_locations = []
91
- # Add possible local config first in search list
92
- possible_gem_search_locations << bundle_config_bundle_path(app_root) if bundle_config_bundle_path(app_root)
93
- ENV['GEM_PATH'].split(':').each do |gem_path|
94
- possible_gem_search_locations << gem_path
95
- end
89
+ # All active search locations for Gems
90
+ Bundler.setup
91
+ possible_gem_search_locations = Gem.paths.path
96
92
  debug "Possible Gem locations: #{possible_gem_search_locations}"
97
93
  gem_search_locations = []
98
94
  # Check where inside this location the gems may be installed
99
95
  possible_gem_search_locations.each do |gem_search_location|
100
- valid_gem_search_location = nil # No valid path found yet
101
- Find.find(gem_search_location) do |path|
102
- if File.directory?(path) && File.exist?("#{path}/specifications") && File.exist?("#{path}/gems")
103
- valid_gem_search_location = path # Found a valid path
104
- Find.prune # Do not search deeper
96
+ if File.exist?(gem_search_location) && File.directory?(gem_search_location)
97
+ valid_gem_search_location = nil # No valid path found yet
98
+ Find.find(gem_search_location) do |path|
99
+ if File.directory?(path) && File.exist?("#{path}/specifications") && File.exist?("#{path}/gems")
100
+ valid_gem_search_location = path # Found a valid path
101
+ Find.prune # Do not search deeper
102
+ end
103
+ end
104
+ if valid_gem_search_location
105
+ gem_search_locations << valid_gem_search_location
106
+ else
107
+ debug "No valid gem location found in #{gem_search_location}"
105
108
  end
106
- end
107
- if valid_gem_search_location
108
- gem_search_locations << valid_gem_search_location
109
109
  else
110
- debug "No valid gem location found in #{gem_search_location}"
110
+ debug("Gem location #{gem_search_location} does not exist or is not a directory")
111
111
  end
112
112
  end
113
113
  debug "Valid Gem locations: #{gem_search_locations}"
@@ -193,19 +193,6 @@ module Jarbler
193
193
  @config
194
194
  end
195
195
 
196
- # Check if there is an additional local bundle path in .bundle/config
197
- def bundle_config_bundle_path(rails_root)
198
- bundle_path = nil # default
199
- if File.exist?("#{rails_root}/.bundle/config")
200
- bundle_config = YAML.load_file("#{rails_root}/.bundle/config")
201
- if bundle_config && bundle_config['BUNDLE_PATH']
202
- bundle_path = "#{rails_root}/#{bundle_config['BUNDLE_PATH']}"
203
- debug "Local Gem path configured in #{rails_root}/.bundle/config: #{bundle_path}"
204
- end
205
- end
206
- bundle_path
207
- end
208
-
209
196
  # Copy the jruby-jars to the staging directory
210
197
  # @param [String] staging_dir Path to the staging directory
211
198
  # @param [Array] gem_search_locations Array of Gem locations to look for jRuby jars
@@ -219,7 +206,7 @@ module Jarbler
219
206
  break
220
207
  end
221
208
  end
222
- raise "Could not determine location of jRuby jars for release '#{config.jruby_version}' in the following output:\n#{lines}" unless jruby_jars_location
209
+ raise "Could not determine location of jRuby jars for release '#{config.jruby_version}' in the following locations:\n#{gem_search_locations}" unless jruby_jars_location
223
210
  file_utils_copy("#{jruby_jars_location}/lib/jruby-core-#{config.jruby_version}-complete.jar", staging_dir)
224
211
  file_utils_copy("#{jruby_jars_location}/lib/jruby-stdlib-#{config.jruby_version}.jar", staging_dir)
225
212
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jarbler
4
- VERSION = "0.1.0"
5
- VERSION_DATE = "2023-04-20"
4
+ VERSION = "0.1.2"
5
+ VERSION_DATE = "2023-04-24"
6
6
  end
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jarbler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ramm
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-23 00:00:00.000000000 Z
11
+ date: 2023-04-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Pack a Rails application into an executable jar file
13
+ description: Pack Ruby combined with jRuby runtime into a jar file to simply run the
14
+ app on any Java platform by '> java -jar file.jar'
14
15
  email:
15
16
  - Peter@ramm-oberhermsdorf.de
16
17
  executables:
@@ -40,7 +41,7 @@ metadata:
40
41
  homepage_uri: https://github.com/rammpeter/jarbler
41
42
  source_code_uri: https://github.com/rammpeter/jarbler
42
43
  changelog_uri: https://github.com/rammpeter/jarbler/CHANGELOG.md
43
- post_install_message:
44
+ post_install_message:
44
45
  rdoc_options: []
45
46
  require_paths:
46
47
  - lib
@@ -55,8 +56,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
56
  - !ruby/object:Gem::Version
56
57
  version: '0'
57
58
  requirements: []
58
- rubygems_version: 3.4.12
59
- signing_key:
59
+ rubygems_version: 3.3.26
60
+ signing_key:
60
61
  specification_version: 4
61
- summary: Create jar file from Rails app
62
+ summary: Pack a Ruby app into a Java jar file
62
63
  test_files: []