मैं अपनी निर्माण प्रक्रिया के हिस्से के रूप में उत्कृष्ट Sass का उपयोग करना चाहता हूं। मेरी निर्माण प्रक्रिया Gradle द्वारा प्रबंधित की जाती है। इसका मतलब है सैस चलाने के लिए एक प्लगइन लिखना। सास रूबी है, और ग्रैडल ग्रोवी में है, लेकिन चूंकि ग्रोवी जेवीएम पर चलता है, इसलिए मैं जावा scripting API का उपयोग करके इसे चलाने के लिए JRuby का उपयोग कर सकता हूं। ग्रैड स्क्रिप्ट को जार फ़ाइलों के रूप में निर्भरता मिलती है; मैं Maven Central से जेआरबीई प्राप्त कर सकता हूं, लेकिन मुझे सास को एक जार के रूप में पैकेज करने की आवश्यकता होगी।मैं एम्बेडेड जेआरबी के साथ रत्न-इन-ए-जार का उपयोग कैसे कर सकता हूं?
मैंने ऐसा करने के लिए Nick Sieger's gems-in-a-jar procedure का पालन करने का प्रयास किया है, लेकिन इसमें कोई सफलता नहीं मिली है। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, मैं बस जेसबी को सास मणि लेने के लिए नहीं मिल सकता।
समस्या को अलग करने के लिए, मैं एक न्यूनतम जावा (नहीं Gradle) प्रोग्राम है जो JRuby के माध्यम से सास का उपयोग करने की कोशिश करता है लिखा है - मैं inventively यह JSass फोन:
वहाँ दो हैं या तीन दिलचस्प बिट्स।
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);
तीसरे रूबी स्क्रिप्ट जो मुख्य वर्ग की कोशिश करता है:
gem install -i build/gems sass --no-rdoc --no-ri
jar cf lib/gemsass.jar -C build/gems .
दूसरा so.demo.JSass वर्ग है, जो JRuby चलाता है: पहली स्क्रिप्ट 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
क्या मैं गलत कर रहा हूँ?
क्या आपने कभी इसे करेस या वैकल्पिक समाधान से उत्तर के साथ काम किया है? – nopuck4you
@ nopuck4you: नहीं। केर्स के दृष्टिकोण की आवश्यकता है कि (ए) मैं rgems रननेबल जार के माध्यम से प्रोग्राम लॉन्च करता हूं, जिसे मैं नहीं कर सकता, और (बी) कि मणि एक अनपॅक निर्देशिका है, जिसे मैं वास्तव में नहीं चाहता हूं। दुख की बात है कि इस प्रश्न को पोस्ट करने के बाद मेरे पास वास्तव में समस्या पर हमला करने का समय नहीं है। –
मुझे एक समान दृष्टिकोण का उपयोग करके मेरे कोड में काम कर रहा है। मैं उसी त्रुटि में भाग गया जो मुझे 3 दिनों तक फेंक दिया। यह पता चला कि जिस तरह से मैं सैस-लैंग repackaging था।एक जार में मणि मणि फाइलों को छोड़ रहा था ताकि जार अवैध था। मुझे यहां एक जार को मणि को दोबारा लगाने के लिए एक कामकाजी परियोजना है: 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