jarbler 0.1.0 → 0.1.2

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.
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: []