我必须在我的 java 软件中动态地“编译”罗盘文件。所以,按照stackoverflow上的解释,我已经完成了这些步骤:
- 获取 JRuby (1.7.3),配置 jruby.jar 和二进制文件 (gem, rake ...) 的 PATH 并学习从 Java 启动 ruby 脚本
使用以下命令行将指南针和依赖项 gem 放入本地目录
gem install -i ./compass compass
=> 所以我得到一个
./compass/
包含目录的bin, cache,doc, gems & specifications
目录。使用以下命令行将 gems 放入 jar 中(考虑使用与 gems 不同的 jar 名称,以避免 JRuby“需要”jar 而不是 gems)
jar cf compass-lib.jar -C compass .
在本地目录中编写一个测试脚本
test.rb
来测试我的 jar。它包含 :require 'compass' Compass.add_configuration( { :project_path => '.', :sass_path => 'styles/scss', :css_path => 'styles/css' }, 'custom' # A name for the configuration, can be anything you want ) Compass.compiler.compile('test.scss', 'test.css')
使用 JRuby 执行此脚本,使用以下命令行:
jruby -I . -rcompass-lib.jar test.rb
并得到这个错误......
Unable to load Sass. Please install it with one of the following commands: gem install sass --pre LoadError: no such file to load -- jar:file:C:/jruby-1.7.3/lib/jruby.jar!/gems/s ass-3.2.8/lib/sass/../sass require at org/jruby/RubyKernel.java:1027 require at c:/jruby-1.7.3/lib/ruby/shared/rubygems/custom_require.rb:36 (root) at jar:file:C:/jruby-1.7.3/lib/jruby.jar!/gems/sass-3.2.8/lib/sass/ver sion.rb:5 require at org/jruby/RubyKernel.java:1027 (root) at c:/jruby-1.7.3/lib/ruby/shared/rubygems/custom_require.rb:1 require at c:/jruby-1.7.3/lib/ruby/shared/rubygems/custom_require.rb:36 require at org/jruby/RubyKernel.java:1027 (root) at jar:file:C:/jruby-1.7.3/lib/jruby.jar!/gems/sass-3.2.8/lib/sass.rb: 9 (root) at c:/jruby-1.7.3/lib/ruby/shared/rubygems/custom_require.rb:1 require at org/jruby/RubyKernel.java:1027 require at c:/jruby-1.7.3/lib/ruby/shared/rubygems/custom_require.rb:60 (root) at jar:file:C:/jruby-1.7.3/lib/jruby.jar!/gems/compass-0.12.2/lib/comp ass/dependencies.rb:6 each at org/jruby/RubyArray.java:1613 (root) at c:/jruby-1.7.3/lib/ruby/shared/rubygems/custom_require.rb:1 require at org/jruby/RubyKernel.java:1027 require at c:/jruby-1.7.3/lib/ruby/shared/rubygems/custom_require.rb:36 (root) at test.rb:1
对问题的想法,也许还有解决方案?;) 提前感谢。
[更新#1]
在 Jörg W Mittag 明显的建议之后,错误消失了。谢谢 ;) 现在,它只是找不到 scss 文件,所以这是一个“正常问题” ;)
[更新#2]
在 IRB 中成功使用 compass 之后,是时候通过 Java 转置测试了。因此,我在 Java 中编写了一些行来执行我的 ruby 脚本,第一次只使用绝对路径来避免出现问题。
InputStream myFile = ISRessources.getFile("C:/Path/To/My/test.rb");
new ScriptingContainer().runScriptlet(myFile, "test.rb");
但是......如何“加载”我的compass-lib.jar
?-r
JRuby 中的等价物是什么?我尝试将 gem 包含到 jruby.jar 中,以在 java 构建路径的外部 jar 中添加 compass-lib.jar,但两者都不起作用,我仍然有:
LoadError: no such file to load -- compass
require at org/jruby/RubyKernel.java:1027
(root) at test.rb:1
任何想法 ?