jarbler 0.1.3 → 0.1.5
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 +4 -4
- data/CHANGELOG.md +18 -6
- data/Gemfile +4 -3
- data/README.md +18 -7
- data/jarbler.gemspec +1 -1
- data/lib/jarbler/JarMain.java +21 -2
- data/lib/jarbler/builder.rb +58 -31
- data/lib/jarbler/config.rb +16 -7
- data/lib/jarbler/version.rb +2 -2
- metadata +5 -5
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d5166483687f2467695c869afc03f491134d1bd74004d97ba706b1296f6836d1
         | 
| 4 | 
            +
              data.tar.gz: 59d98964583486160c572d7c2ee8326f6f005a3cab558bd95b9114c5954a83eb
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5230dc737fd40641ee5fc2babaf5a982c5768f0d3281ad5fa384c3c9cc1814c575b33e906d69607a401475a1f46932be507dbed2b12fd28ba0c244bd84b10564
         | 
| 7 | 
            +
              data.tar.gz: d6226dd8aa0c658eacc18caa868c0084232267f04c99f968d01ea88e0f929fa5c9cd94fab39b7f76cca3a934f46e5797e86afbd165fbba6c1e9f8b2fb381e83b
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,17 +1,29 @@ | |
| 1 1 | 
             
            ## [Unreleased]
         | 
| 2 2 |  | 
| 3 | 
            -
            ## [0.1. | 
| 3 | 
            +
            ## [0.1.5] - 2023-06-15
         | 
| 4 4 |  | 
| 5 | 
            -
            -  | 
| 5 | 
            +
            - Bugfix: use minor ruby version without patch level for Gem files location
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            ## [0.1.4] - 2023-04-28
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            - Jarbler also supports Gemfile references to Gems with git dependencies now
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            ## [0.1.3] - 2023-04-25
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            - Removed .jruby-version so that the jruby version is not fixed anymore
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            ## [0.1.2] - 2023-04-24
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            - extract valid Gem paths from Bundler instead of using the environment variable GEM_PATH
         | 
| 6 18 |  | 
| 7 19 | 
             
            ## [0.1.1] - 2023-04-24
         | 
| 8 20 |  | 
| 9 21 | 
             
            - Fixed the bug 'java.lang.ClassNotFoundException: org.jruby.Main' with Windows
         | 
| 10 22 |  | 
| 11 | 
            -
            ## [0.1. | 
| 23 | 
            +
            ## [0.1.0] - 2023-04-12
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            - Initial release
         | 
| 26 | 
            +
             | 
| 12 27 |  | 
| 13 | 
            -
            - extract valid Gem paths from Bundler instead of using the environment variable GEM_PATH 
         | 
| 14 28 |  | 
| 15 | 
            -
            ## [0.1.3] - 2023-04-25
         | 
| 16 29 |  | 
| 17 | 
            -
            - Removed .jruby-version so that the jruby version is not fixed anymore
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -8,10 +8,11 @@ gemspec | |
| 8 8 | 
             
            # gem "rake", "~> 13.0"
         | 
| 9 9 | 
             
            gem "rake"
         | 
| 10 10 |  | 
| 11 | 
            +
            group(:development) do
         | 
| 12 | 
            +
              gem 'rdoc'
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 11 15 | 
             
            group(:test)  do
         | 
| 12 16 | 
             
              gem 'minitest'
         | 
| 13 17 | 
             
              gem 'minitest-reporters'
         | 
| 14 | 
            -
              # needed for minitests
         | 
| 15 | 
            -
              # test should install the jruby-jars in right version itself
         | 
| 16 | 
            -
              # gem 'jruby-jars'
         | 
| 17 18 | 
             
            end
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,11 +1,10 @@ | |
| 1 1 | 
             
            # Jarbler
         | 
| 2 2 | 
             
            Pack a Ruby application into an executable jar file.
         | 
| 3 3 |  | 
| 4 | 
            -
            Jarbler  | 
| 4 | 
            +
            Jarbler creates a self executing Java jar file containing a Ruby application and all its Gem dependencies.
         | 
| 5 5 |  | 
| 6 6 | 
             
            This tool is inspired by the widely used jRuby runner Warbler. 
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            Instead the configured executable is executed using the jRuby runtime jars.
         | 
| 7 | 
            +
            The configured Ruby program is directly executed inside the JVM using the jRuby runtime jars.
         | 
| 9 8 |  | 
| 10 9 | 
             
            ## Installation
         | 
| 11 10 |  | 
| @@ -16,6 +15,8 @@ Install the gem and add to the application's Gemfile by executing: | |
| 16 15 | 
             
            If bundler is not being used to manage dependencies, install the gem by executing:
         | 
| 17 16 |  | 
| 18 17 | 
             
                $ gem install jarbler
         | 
| 18 | 
            +
                
         | 
| 19 | 
            +
            [](https://badge.fury.io/rb/jarbler)
         | 
| 19 20 |  | 
| 20 21 | 
             
            ## Usage
         | 
| 21 22 |  | 
| @@ -28,6 +29,7 @@ To adjust Jarbler's configuration, modify the settings in config file ´config/j | |
| 28 29 | 
             
                $ jarble config
         | 
| 29 30 |  | 
| 30 31 | 
             
            ### Preconditions
         | 
| 32 | 
            +
            * Dependency handling should be based on Bundler (existence of Gemfile is required)
         | 
| 31 33 | 
             
            * The Ruby app should be capable of running with jRuby
         | 
| 32 34 | 
             
            * Gems with native extensions should not be used (e.g. sassc)
         | 
| 33 35 | 
             
              * if needed for development or test such Gems with native extensions should be moved to the development and test group in the Gemfile.
         | 
| @@ -43,13 +45,22 @@ Additional command line parameters are passed through to the executed Ruby app ( | |
| 43 45 | 
             
            ## Configuration
         | 
| 44 46 |  | 
| 45 47 | 
             
            The file config/jarble.rb contains the configuration for Jarbler. 
         | 
| 46 | 
            -
            To create a template config file with information about the supported configuration options, execute:
         | 
| 48 | 
            +
            To create a template config file with information about all the supported configuration options, execute:
         | 
| 47 49 |  | 
| 48 50 | 
             
                $ jarble config
         | 
| 49 51 |  | 
| 50 | 
            -
            The default configuration  | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 52 | 
            +
            The default configuration if focused on Ruby on Rails applications.<br>
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            ### Configuration options
         | 
| 55 | 
            +
            | Option            | Default value                                                                  | Description                                                         |
         | 
| 56 | 
            +
            |-------------------|--------------------------------------------------------------------------------|---------------------------------------------------------------------|
         | 
| 57 | 
            +
            | executable        | "bin/rails"                                                                    | The ruby file to run at execution of jar file                       |
         | 
| 58 | 
            +
            | executable_params | ["server", "-e", "production", "-p", "8080"]                                   | Command line parameters to be used for the ruby executable          |
         | 
| 59 | 
            +
            | excludes          | ["tmp/cache", "tmp/pids", ...] (see generated template file for whole content) | The files and dirs of the project to exlude from the include option |
         | 
| 60 | 
            +
            | includes          | ["app", "bin", "config", ...] (see generated template file for whole content)  | The files and dirs of the project to include in the jar file        |
         | 
| 61 | 
            +
            | jar_name          | < Name of project dir >.jar                                              | The name of the generated jar file                                  |
         | 
| 62 | 
            +
            | jruby_version     | The current most recent jRuby version                                          | The version of the jRuby runtime to use                             |
         | 
| 63 | 
            +
             | 
| 53 64 |  | 
| 54 65 | 
             
            ## Troubleshooting
         | 
| 55 66 | 
             
            * Set DEBUG=true in environment to get additional runtime information
         | 
    
        data/jarbler.gemspec
    CHANGED
    
    | @@ -9,7 +9,7 @@ Gem::Specification.new do |spec| | |
| 9 9 | 
             
              spec.email = ["Peter@ramm-oberhermsdorf.de"]
         | 
| 10 10 |  | 
| 11 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'"
         | 
| 12 | 
            +
              spec.description = "Pack a Ruby app combined with jRuby runtime and all its Gem dependencies 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"
         | 
    
        data/lib/jarbler/JarMain.java
    CHANGED
    
    | @@ -27,13 +27,16 @@ import java.util.Map; | |
| 27 27 | 
             
            import java.util.HashMap;
         | 
| 28 28 | 
             
            import java.lang.reflect.Field;
         | 
| 29 29 | 
             
            import java.io.FileWriter;
         | 
| 30 | 
            +
            import java.security.CodeSource;
         | 
| 31 | 
            +
            import java.security.ProtectionDomain;
         | 
| 30 32 |  | 
| 31 33 | 
             
            class JarMain {
         | 
| 32 34 |  | 
| 33 35 | 
             
                // executed by java -jar <jar file name>
         | 
| 34 36 | 
             
                // No arguments are passed
         | 
| 35 37 | 
             
                public static void main(String[] args) {
         | 
| 36 | 
            -
                    debug("Start java process in jar file");
         | 
| 38 | 
            +
                    debug("Start java process in jar file "+jar_file_name());
         | 
| 39 | 
            +
                    debug("JVM: "+System.getProperty("java.vm.vendor")+" "+System.getProperty("java.vm.name")+" "+System.getProperty("java.vm.version")+" "+System.getProperty("java.home"));
         | 
| 37 40 | 
             
                    if (args.length > 0) {
         | 
| 38 41 | 
             
                        debug("Java command line arguments are: ");
         | 
| 39 42 | 
             
                        for (String arg : args) {
         | 
| @@ -54,7 +57,7 @@ class JarMain { | |
| 54 57 | 
             
                            jarPath = jarPath.substring(1); // remove the leading slash
         | 
| 55 58 | 
             
                        }
         | 
| 56 59 |  | 
| 57 | 
            -
                        // extract the jarFile by  | 
| 60 | 
            +
                        // extract the jarFile by unzipping it (not using the jar utility which may not be available)
         | 
| 58 61 | 
             
                        System.out.println("Extracting files from "+jarPath+" to "+ newFolder.getAbsolutePath());
         | 
| 59 62 | 
             
                        unzip(jarPath, newFolder.getAbsolutePath());
         | 
| 60 63 |  | 
| @@ -132,8 +135,10 @@ class JarMain { | |
| 132 135 | 
             
                            debug(" - " + arg);
         | 
| 133 136 | 
             
                        }
         | 
| 134 137 |  | 
| 138 | 
            +
                        debug("jRuby set property 'user.dir' to '" + app_root + "'");
         | 
| 135 139 | 
             
                        System.setProperty("user.dir", app_root);
         | 
| 136 140 | 
             
                        // call the method org.jruby.Main.main
         | 
| 141 | 
            +
                        debug("Calling org.jruby.Main.main with: "+ mainArgs);
         | 
| 137 142 | 
             
                        mainMethod.invoke(null, (Object)mainArgs.toArray(new String[mainArgs.size()]));
         | 
| 138 143 | 
             
                    } catch (Exception e) {
         | 
| 139 144 | 
             
                        e.printStackTrace();
         | 
| @@ -225,4 +230,18 @@ class JarMain { | |
| 225 230 | 
             
                    fw.write("BUNDLE_WITHOUT: test:development\n");
         | 
| 226 231 | 
             
                    fw.close();
         | 
| 227 232 | 
             
                }
         | 
| 233 | 
            +
             | 
| 234 | 
            +
                private static String jar_file_name() {
         | 
| 235 | 
            +
                    String jarFileName = "";
         | 
| 236 | 
            +
             | 
| 237 | 
            +
                    try {
         | 
| 238 | 
            +
                        ProtectionDomain protectionDomain = JarMain.class.getProtectionDomain();
         | 
| 239 | 
            +
                        CodeSource codeSource = protectionDomain.getCodeSource();
         | 
| 240 | 
            +
                        URL location = codeSource.getLocation();
         | 
| 241 | 
            +
                        jarFileName = new File(location.toURI()).getName();
         | 
| 242 | 
            +
                    } catch (Exception e) {
         | 
| 243 | 
            +
                        e.printStackTrace();
         | 
| 244 | 
            +
                    }
         | 
| 245 | 
            +
                    return jarFileName;
         | 
| 246 | 
            +
                }
         | 
| 228 247 | 
             
            }
         | 
    
        data/lib/jarbler/builder.rb
    CHANGED
    
    | @@ -13,13 +13,12 @@ module Jarbler | |
| 13 13 | 
             
                def build_jar
         | 
| 14 14 | 
             
                  debug "Running with Ruby version '#{RUBY_VERSION}' on platform '#{RUBY_PLATFORM}'. Engine '#{RUBY_ENGINE}' version '#{RUBY_ENGINE_VERSION}'"
         | 
| 15 15 |  | 
| 16 | 
            -
                  #  | 
| 17 | 
            -
                  staging_dir = Dir.mktmpdir
         | 
| 18 | 
            -
             | 
| 16 | 
            +
                  @config = nil # Ensure config is read from file or default. Necessary for testing only because of caching
         | 
| 17 | 
            +
                  staging_dir = Dir.mktmpdir # create a temporary directory for staging
         | 
| 19 18 | 
             
                  app_root = Dir.pwd
         | 
| 20 19 | 
             
                  debug "Project dir: #{app_root}"
         | 
| 21 20 |  | 
| 22 | 
            -
                   | 
| 21 | 
            +
                  ruby_minor_version = copy_jruby_jars_to_staging(staging_dir) # Copy the jruby jars to the staging directory
         | 
| 23 22 | 
             
                  exec_command "javac -nowarn -Xlint:deprecation -source 8 -target 8 -d #{staging_dir} #{__dir__}/JarMain.java" # Compile the Java files
         | 
| 24 23 |  | 
| 25 24 | 
             
                  # Copy the application project to the staging directory
         | 
| @@ -31,12 +30,8 @@ module Jarbler | |
| 31 30 | 
             
                  # Get the needed Gems
         | 
| 32 31 | 
             
                  raise "Gemfile.lock not found in #{app_root}" unless File.exist?("#{app_root}/Gemfile.lock")
         | 
| 33 32 |  | 
| 34 | 
            -
                  gem_target_location = "#{staging_dir}/gems/jruby/#{ruby_version}"
         | 
| 35 | 
            -
                  FileUtils.mkdir_p("#{gem_target_location}/gems")
         | 
| 36 | 
            -
                  FileUtils.mkdir_p("#{gem_target_location}/specifications")
         | 
| 37 | 
            -
             | 
| 38 33 | 
             
                  # Copy the needed Gems to the staging directory
         | 
| 39 | 
            -
                  copy_needed_gems_to_staging( | 
| 34 | 
            +
                  copy_needed_gems_to_staging(staging_dir, ruby_minor_version)
         | 
| 40 35 |  | 
| 41 36 | 
             
                  Dir.chdir(staging_dir) do
         | 
| 42 37 | 
             
                    # create the manifest file
         | 
| @@ -73,16 +68,25 @@ module Jarbler | |
| 73 68 | 
             
                    file_utils_copy(config.jar_name, app_root)
         | 
| 74 69 | 
             
                    puts "Created jar file #{app_root}/#{config.jar_name}"
         | 
| 75 70 | 
             
                  end
         | 
| 76 | 
            -
             | 
| 71 | 
            +
                rescue Exception => e
         | 
| 72 | 
            +
                  puts "Error: #{e.message}"
         | 
| 73 | 
            +
                  puts e.backtrace.join("\n")
         | 
| 74 | 
            +
                  raise
         | 
| 75 | 
            +
                ensure
         | 
| 77 76 | 
             
                  # remove temporary directory staging_dir
         | 
| 78 | 
            -
                   | 
| 79 | 
            -
             | 
| 77 | 
            +
                  if ENV['DEBUG']
         | 
| 78 | 
            +
                    puts "Temporary directory #{staging_dir} not removed because of debug mode"
         | 
| 79 | 
            +
                  else
         | 
| 80 | 
            +
                    FileUtils.remove_entry staging_dir if staging_dir
         | 
| 81 | 
            +
                  end
         | 
| 80 82 | 
             
                end
         | 
| 81 83 |  | 
| 82 84 | 
             
                private
         | 
| 83 85 |  | 
| 84 86 |  | 
| 85 87 | 
             
                # Check if there is an additional local bundle path in .bundle/config
         | 
| 88 | 
            +
                # @param rails_root [String] the rails root directory
         | 
| 89 | 
            +
                # @return [String] the local bundle path or nil if not configured
         | 
| 86 90 | 
             
                def bundle_config_bundle_path(rails_root)
         | 
| 87 91 | 
             
                  bundle_path = nil # default
         | 
| 88 92 | 
             
                  if File.exist?("#{rails_root}/.bundle/config")
         | 
| @@ -96,30 +100,41 @@ module Jarbler | |
| 96 100 | 
             
                end
         | 
| 97 101 |  | 
| 98 102 | 
             
                # Copy the needed Gems to the staging directory
         | 
| 99 | 
            -
                # @param [String]  | 
| 103 | 
            +
                # @param staging_dir [String] the staging directory
         | 
| 104 | 
            +
                # @param ruby_minor_version [String] the corresponding ruby minor version of the jruby jars version
         | 
| 100 105 | 
             
                # @return [void]
         | 
| 101 | 
            -
                def copy_needed_gems_to_staging( | 
| 102 | 
            -
                   | 
| 103 | 
            -
                   | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 106 | 
            +
                def copy_needed_gems_to_staging(staging_dir, ruby_minor_version)
         | 
| 107 | 
            +
                  gem_target_location = "#{staging_dir}/gems/jruby/#{ruby_minor_version}"
         | 
| 108 | 
            +
                  FileUtils.mkdir_p("#{gem_target_location}/gems")
         | 
| 109 | 
            +
                  FileUtils.mkdir_p("#{gem_target_location}/specifications")
         | 
| 110 | 
            +
                  FileUtils.mkdir_p("#{gem_target_location}/bundler/gems")
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  needed_gems = gem_dependencies  # get the full names of the dependencies
         | 
| 113 | 
            +
                  needed_gems.each do |needed_gem|
         | 
| 114 | 
            +
                    # Get the location of the needed gem
         | 
| 115 | 
            +
                    spec = Gem::Specification.find_by_name(needed_gem[:name], needed_gem[:version])
         | 
| 116 | 
            +
                    raise "Gem #{needed_gem[:full_name]} not found for copying" unless spec
         | 
| 117 | 
            +
                    debug "Found gem #{needed_gem[:full_name]} version #{needed_gem[:version]} in #{spec.gem_dir}"
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                    # differentiate between Gems from git/bundler and Gems from rubygems
         | 
| 120 | 
            +
                    if spec.source.is_a?(Bundler::Source::Git)
         | 
| 121 | 
            +
                      # Copy the Gem from bundler/gems including the gemspec
         | 
| 122 | 
            +
                      file_utils_copy(spec.gem_dir, "#{gem_target_location}/bundler/gems")
         | 
| 123 | 
            +
                    else  # Gem is from rubygems
         | 
| 124 | 
            +
                      # copy the Gem and gemspec separately
         | 
| 110 125 | 
             
                      file_utils_copy(spec.gem_dir, "#{gem_target_location}/gems")
         | 
| 111 126 | 
             
                      file_utils_copy("#{spec.gem_dir}/../../specifications/#{needed_gem[:full_name]}.gemspec", "#{gem_target_location}/specifications")
         | 
| 112 | 
            -
             | 
| 127 | 
            +
                    end
         | 
| 113 128 | 
             
                  end
         | 
| 114 129 | 
             
                end
         | 
| 115 130 |  | 
| 116 131 | 
             
                # Read the default/production dependencies from Gemfile.lock and Gemfile
         | 
| 117 | 
            -
                # @return [Array] Array with  | 
| 132 | 
            +
                # @return [Array] Array with Hashes containing: name, version, full_name
         | 
| 118 133 | 
             
                def gem_dependencies
         | 
| 119 134 | 
             
                  needed_gems = []
         | 
| 120 135 | 
             
                  lockfile_specs = Bundler::LockfileParser.new(Bundler.read_file(Bundler.default_lockfile)).specs
         | 
| 121 136 |  | 
| 122 | 
            -
                   | 
| 137 | 
            +
                  Bundler.setup # Load Gems specified in Gemfile, ensure that Gem path also includes the Gems loaded into bundler dir
         | 
| 123 138 | 
             
                  # filter Gems needed for production
         | 
| 124 139 | 
             
                  gemfile_specs = Bundler.definition.dependencies.select do |d|
         | 
| 125 140 | 
             
                    d.groups.include?(:default) || d.groups.include?(:production)
         | 
| @@ -145,7 +160,7 @@ module Jarbler | |
| 145 160 | 
             
                # recurively find all indirect dependencies
         | 
| 146 161 | 
             
                # @param [Array] lockfile_specs Array of Bundler::LockfileParser::Spec objects
         | 
| 147 162 | 
             
                # @param [Bundler::LockfileParser::Spec] lockfile_spec current lockfile spec to check for their dependencies
         | 
| 148 | 
            -
                # @param [Array] needed_gems Array with  | 
| 163 | 
            +
                # @param [Array] needed_gems Array with Hashes containing: name, version, full_name
         | 
| 149 164 | 
             
                # @return [void]
         | 
| 150 165 | 
             
                def add_indirect_dependencies(lockfile_specs, lockfile_spec, needed_gems)
         | 
| 151 166 | 
             
                  lockfile_spec.dependencies.each do |lockfile_spec_dep|
         | 
| @@ -161,12 +176,18 @@ module Jarbler | |
| 161 176 | 
             
                    end
         | 
| 162 177 | 
             
                  end
         | 
| 163 178 | 
             
                end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                # Output debug message if DEBUG environment variable is set
         | 
| 181 | 
            +
                # @param [String] msg Message to output
         | 
| 182 | 
            +
                # @return [void]
         | 
| 164 183 | 
             
                def debug(msg)
         | 
| 165 184 | 
             
                  puts msg if ENV['DEBUG']
         | 
| 166 185 | 
             
                end
         | 
| 167 186 |  | 
| 187 | 
            +
                # Get the config object
         | 
| 188 | 
            +
                # @return [Config] the config object
         | 
| 168 189 | 
             
                def config
         | 
| 169 | 
            -
                   | 
| 190 | 
            +
                  if !defined?(@config) || @config.nil?
         | 
| 170 191 | 
             
                   @config = Config.create
         | 
| 171 192 | 
             
                   debug("Config attributes:")
         | 
| 172 193 | 
             
                   @config.instance_variables.each do |var|
         | 
| @@ -179,8 +200,7 @@ module Jarbler | |
| 179 200 |  | 
| 180 201 | 
             
                # Copy the jruby-jars to the staging directory
         | 
| 181 202 | 
             
                # @param [String] staging_dir Path to the staging directory
         | 
| 182 | 
            -
                # @ | 
| 183 | 
            -
                # @return [String] the ruby version of the jRuby jars
         | 
| 203 | 
            +
                # @return [String] the minor ruby version of the jRuby jars with patch level set to 0
         | 
| 184 204 | 
             
                def copy_jruby_jars_to_staging(staging_dir)
         | 
| 185 205 |  | 
| 186 206 | 
             
                  # Ensure that jruby-jars gem is installed, otherwise install it. Accepts also bundler path in .bundle/config
         | 
| @@ -204,10 +224,14 @@ module Jarbler | |
| 204 224 | 
             
                  raise "Could not determine Ruby version for jRuby #{config.jruby_version} in following output:\n#{lines}" unless match_result
         | 
| 205 225 | 
             
                  ruby_version = match_result[0].tr('()', '')
         | 
| 206 226 | 
             
                  debug "Corresponding Ruby version for jRuby (#{config.jruby_version}): #{ruby_version}"
         | 
| 207 | 
            -
                  ruby_version
         | 
| 227 | 
            +
                  ruby_minor_version = ruby_version.split('.')[0..1].join('.') + '.0'
         | 
| 228 | 
            +
                  debug "Corresponding Ruby minor version for jRuby (#{config.jruby_version}): #{ruby_minor_version}"
         | 
| 229 | 
            +
                  ruby_minor_version
         | 
| 208 230 | 
             
                end
         | 
| 209 231 |  | 
| 210 | 
            -
                # Execute the command and return the output
         | 
| 232 | 
            +
                # Execute the command in OS and return the output
         | 
| 233 | 
            +
                # @param [String] command Command to execute
         | 
| 234 | 
            +
                # @return [String] the output of the command
         | 
| 211 235 | 
             
                def exec_command(command)
         | 
| 212 236 | 
             
                  lines = `#{command}`
         | 
| 213 237 | 
             
                  raise "Command \"#{command}\"failed with return code #{$?} and output:\n#{lines}" unless $?.success?
         | 
| @@ -216,6 +240,9 @@ module Jarbler | |
| 216 240 | 
             
                end
         | 
| 217 241 |  | 
| 218 242 | 
             
                # Copy file or directory with error handling
         | 
| 243 | 
            +
                # @param [String] source Path to the source file or directory
         | 
| 244 | 
            +
                # @param [String] destination Path to the destination file or directory
         | 
| 245 | 
            +
                # @return [void]
         | 
| 219 246 | 
             
                def file_utils_copy(source, destination)
         | 
| 220 247 | 
             
                  if File.exist?(source) && File.directory?(source)
         | 
| 221 248 | 
             
                    FileUtils.cp_r(source, destination)
         | 
    
        data/lib/jarbler/config.rb
    CHANGED
    
    | @@ -1,9 +1,12 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'json'
         | 
| 3 | 
            +
             | 
| 1 4 | 
             
            module Jarbler
         | 
| 2 5 | 
             
              class Config
         | 
| 3 6 | 
             
                attr_accessor :jar_name, :includes, :excludes, :jruby_version, :executable, :executable_params
         | 
| 4 7 |  | 
| 5 8 | 
             
                CONFIG_FILE = 'config/jarble.rb'
         | 
| 6 | 
            -
                # create  | 
| 9 | 
            +
                # create instance of Config class with defaults or from config file
         | 
| 7 10 | 
             
                # Should be called from rails/ruby root directory
         | 
| 8 11 | 
             
                def self.create
         | 
| 9 12 | 
             
                  if File.exist?(CONFIG_FILE)
         | 
| @@ -90,12 +93,18 @@ module Jarbler | |
| 90 93 | 
             
                    else
         | 
| 91 94 | 
             
                      # no .ruby-version file, use jRuby version of the latest Gem
         | 
| 92 95 | 
             
                      # Fetch the gem specification from Rubygems.org
         | 
| 93 | 
            -
                       | 
| 94 | 
            -
                       | 
| 95 | 
            -
                       | 
| 96 | 
            -
                       | 
| 97 | 
            -
                      raise " | 
| 98 | 
            -
             | 
| 96 | 
            +
                      # search for the gem and get the JSON response
         | 
| 97 | 
            +
                      response = Gem::SpecFetcher.fetcher.search_for_dependency(Gem::Dependency.new('jruby-jars'))
         | 
| 98 | 
            +
                      # extract the versions from the response
         | 
| 99 | 
            +
                      self.jruby_version = response&.first&.first&.first&.version&.to_s
         | 
| 100 | 
            +
                      raise "Unable to determine the latest available version of jruby-jars gem!\Rsponse = #{response.inspect}" unless self.jruby_version
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                      #command = "gem search --remote jruby-jars"
         | 
| 103 | 
            +
                      #lines = `#{command}`
         | 
| 104 | 
            +
                      #raise "Command \"#{command}\" failed with return code #{$?} and output:\n#{lines}" unless $?.success?
         | 
| 105 | 
            +
                      #jruby_jars_line = lines.match(/^jruby-jars \((.*)\)/)
         | 
| 106 | 
            +
                      #raise "No jruby-jars gem found in rubygems.org!" unless jruby_jars_line
         | 
| 107 | 
            +
                      #self.jruby_version = /\((.*?)\)/.match(jruby_jars_line.to_s)[1]
         | 
| 99 108 | 
             
                      debug "jRuby version from latest jruby-jars gem: #{jruby_version}"
         | 
| 100 109 | 
             
                    end
         | 
| 101 110 | 
             
                  end
         | 
    
        data/lib/jarbler/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,17 +1,17 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: jarbler
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.5
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Peter Ramm
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023- | 
| 11 | 
            +
            date: 2023-06-15 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 | 
            -
            description: Pack Ruby combined with jRuby runtime  | 
| 14 | 
            -
              app on any Java platform by '> java -jar file.jar'
         | 
| 13 | 
            +
            description: Pack a Ruby app combined with jRuby runtime and all its Gem dependencies
         | 
| 14 | 
            +
              into a jar file to simply run the app on any Java platform by '> java -jar file.jar'
         | 
| 15 15 | 
             
            email:
         | 
| 16 16 | 
             
            - Peter@ramm-oberhermsdorf.de
         | 
| 17 17 | 
             
            executables:
         | 
| @@ -55,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 55 55 | 
             
                - !ruby/object:Gem::Version
         | 
| 56 56 | 
             
                  version: '0'
         | 
| 57 57 | 
             
            requirements: []
         | 
| 58 | 
            -
            rubygems_version: 3.3. | 
| 58 | 
            +
            rubygems_version: 3.0.3.1
         | 
| 59 59 | 
             
            signing_key: 
         | 
| 60 60 | 
             
            specification_version: 4
         | 
| 61 61 | 
             
            summary: Pack a Ruby app into a Java jar file
         |