【问题标题】:Get JRuby jar path获取 JRuby jar 路径
【发布时间】:2012-03-16 01:32:13
【问题描述】:

类似于this问题,我想知道如何获取当前jar文件的路径。但与其他问题不同,我想知道 jar 的路径,而不是当前文件 inside jar 的路径。例如,假设我在“/Users/MyUser/Jars/foo.jar”中有一个 jruby jar,里面是一个在“foo.jar/java/style/class/path.class”中编译的 ruby​​ 文件。 class.path 怎么能得到路径“/Users/MyUser/Jars/foo.jar”?

我也看到a way to do it in Java,只是不知道怎么翻译...

【问题讨论】:

    标签: java jar jruby filepath


    【解决方案1】:

    我已经对此进行了一些试验,任何从 JRuby 调用代码的尝试都会返回 jruby jar 本身,这是有道理的,因为逻辑确实是从该 jar 评估/执行的。例如:

    require 'java'
    puts self.to_java.get_class().protection_domain().code_source().location().path()
    

    require 'java'
    
    class Path
      def get_jar_path
        self.to_java.get_class().protection_domain().code_source().location().path()
      end
    end
    
    puts Path.new.get_jar_path
    

    两者都返回到jruby-complete.jar 的路径,这在某种程度上可能有用,但显然不是您想要的。

    我可以让它工作的唯一方法(使用rawr,但是如果你使用warbler,这可以很容易地适应)是在src/java/org/rubyforge/rawr中创建一个Java类:

    package org.rubyforge.rawr;
    
    public class Path {
      public String getJarPath() {
        return getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
      }
    }
    

    然后从 JRuby 脚本中调用这个类:

    require 'java'
    java_import 'org.rubyforge.rawr.Path'
    
    puts Path.new.get_jar_path
    

    【讨论】:

    • 太棒了!没有 any java 代码有没有办法做到这一点?
    • 我添加了我的 JRuby 尝试,可能会派上用场,但无法让它们真正返回您所期望的。
    • 好吧,这就够了!此外,to_java 部分是我想要的;我找不到如何调用 Java 对象上定义的方法。谢谢!
    【解决方案2】:

    不用java就搞定了

    def get_jar_path
        scriptpath = __FILE__[/(.*)\/.+\.jar!/]
        $1[6..-1]
    end
    

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 2011-04-18
      • 2012-08-14
      • 2020-12-09
      • 2016-08-04
      • 2012-05-13
      • 2014-02-19
      • 2018-11-11
      • 1970-01-01
      相关资源
      最近更新 更多