優れたSassをビルドプロセスの一部として使用したいと考えています。私のビルドプロセスはGradleで管理されています。これは、Sassを実行するためのプラグインを作成することを意味します。 SassはRuby、GradleはGroovyですが、GroovyはJVM上で動作しているので、JRubyを使用してJava scripting APIを使用して実行できます。 Gradleスクリプトはjarファイルの形式で依存関係を取得します。私はMaven CentralからJRubyを得ることができますが、私は自分自身で瓶をパッケージ化する必要があります。埋め込みJRubyでgems-in-a-jarを使用するにはどうすればよいですか?
私はこのためにNick Sieger's gems-in-a-jar procedureに従ってみましたが、成功しませんでした。私が何をしてもJRubyにSassの宝石を手に入れることはできません。
問題を特定するために、私はJRubyの経由サスを使用しようとする最小限のJava(ないのGradle)プログラムを書かれている - 私は本発明によりJSassそれを呼び出す:
二つがあります。 3つの興味深いビット。
ScriptEngine rubyEngine = new ScriptEngineManager().getEngineByName("jruby");
ScriptContext context = rubyEngine.getContext();
context.setAttribute("inputFile", inputFile, ScriptContext.ENGINE_SCOPE);
String script = IOUtils.toString(JSass.class.getResourceAsStream("sassdriver.rb"));
rubyEngine.eval(script, context);
第三のメインクラスはしようとRubyスクリプトである:
gem install -i build/gems sass --no-rdoc --no-ri
jar cf lib/gemsass.jar -C build/gems .
秒のJRubyを実行so.demo.JSassクラスがある:第一には、宝石ジャーをビルドスクリプトgenerate-gem-jar.sh、あります言って、
require 'sass'
template = File.load(inputFile)
sass_engine = Sass::Engine.new(template)
output = sass_engine.render
puts output
プログラムはJRubyのエンジンをロードし、スクリプトを実行することができるが、それはrequire 'sass'
で失敗:サスを動作させるために使用します。
LoadError: no such file to load -- sass
require at org/jruby/RubyKernel.java:1033
(root) at <script>:1
org.jruby.embed.EvalFailedException: (LoadError) no such file to load -- sass
at org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:132)
at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:90)
at so.demo.JSass.main(JSass.java:24)
Caused by: org.jruby.exceptions.RaiseException: (LoadError) no such file to load -- sass
Exception in thread "main" javax.script.ScriptException: org.jruby.exceptions.RaiseException: (LoadError) no such file to load -- sass
at org.jruby.embed.jsr223.JRubyEngine.wrapException(JRubyEngine.java:115)
at org.jruby.embed.jsr223.JRubyEngine.eval(JRubyEngine.java:93)
at so.demo.JSass.main(JSass.java:24)
Caused by: org.jruby.exceptions.RaiseException: (LoadError) no such file to load -- sass
何が間違っていますか?
これはKaresの回答か別の解決策でこれまでに作業しましたか? – nopuck4you
@ nopuck4you:いいえKaresのアプローチでは、(a)私はできないrgems runnable jarを使ってプログラムを起動します。(b)gemはアンパックされたディレクトリです。私は悲しいことに、この質問を投稿して以来、本当に自分自身で問題を攻撃する時間がなかった。 –
私は同じようなアプローチを使用して私のコードでうまく動作しています。私は3日間私を困惑させたまったく同じエラーに遭遇した。それは私がサスランを再包装していたことが判明しました。JARへのgemはJARが無効になるようにgemファイルを削除していました。私はJARに宝石を再パッケージするための作業プロジェクトを持っています:https://github.com/dmitrye/sass-gems。ここに私がそれをどのように消費しているかの例があります:https://github.com/dmitrye/wro4j/blob/1.4.x/wro4j-extensions/src/main/java/ro/isdc/wro/extensions/processor /support/sass/RubySassEngine.java。これが役に立ったら教えてください。 – nopuck4you