내 빌드 프로세스의 일부로 우수한 Sass을 사용하고 싶습니다. 빌드 프로세스는 Gradle에 의해 관리됩니다. 그것은 Sass를 실행하기위한 플러그인 작성을 의미합니다. Sass는 Ruby이고 Gradle은 Groovy에 있지만 Groovy가 JVM에서 실행되기 때문에 scripting API을 사용하여 실행하려면 JRuby을 사용할 수 있습니다. Gradle 스크립트는 jar 파일 형식으로 종속성을 갖습니다. 나는 JRuby를 Maven Central에서 얻을 수 있지만, 나는 Sass를 항아리로 포장해야 할 것이다.내장 된 JRuby에서 gems-in-a-jar를 사용하려면 어떻게해야합니까?
나는 이것을 수행하기 위해 Nick Sieger's gems-in-a-jar procedure을 따라하려고 시도했지만 성공하지 못했습니다. 내가 무엇을해도 JRuby가 Sass 보석을 집어들 수는 없습니다.
이 두 가지가 있습니다 : 내가 창의적 JSass 호출 -
문제를 분리하려면, 나는 JRuby를 통해 말대꾸를 사용하려고 최소한의 자바 (안 Gradle을) 프로그램을 작성했습니다 또는 세 가지 재미있는 비트.
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 .
두 번째는 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) 보석이 내가 원하지 않는 풀린 디렉토리라는 것을 요구합니다. 슬프게도이 질문을 게시 한 이후로 문제를 직접 공격 할 시간이 없었습니다. –
비슷한 접근법을 사용하여 코드에서 작동하는 소리가 들렸습니다. 나는 3 일 동안 나를 괴롭 혔던 똑같은 실수를 만났다. 내가 사스랑이를 다시 포장하는 방법이 밝혀졌습니다.gem을 JAR에 넣으면 gem 파일이 삭제되어 JAR이 유효하지 않게되었습니다. 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