在Ant build.xml中使用Compass编译SASS



有人知道如何使用JRuby和Compass模块在build.xml中编译SASS(*.scss)文件吗?

我可以使用Sass独立安装中的Sass::Exec模块以以下方式从*.scss编译到*.css:

<!-- Compile SCSS files copied to target folder  -->
<property name="stylesheetFolder" location="myproject/stylesheet"/>
<property name="inputFiles" value="${stylesheetFolder}/[^_]*.scss" />
<echo message="Compiling SCSS files from ${stylesheetFolder}..." />
<script language="ruby" classpath="${env.EP_LIB}/jruby/complete/${jruby-complete.build.jar}">
<![CDATA[
require $project.getProperty('env.EP_LIB') + '/sass/sass-3.2.9/lib/sass'
require 'sass/exec'
files = Dir.glob($project.getProperty('inputFiles'))
files.each do |file|
opts = Sass::Exec::Sass.new(["--style", "compressed", "--load-path", File.dirname(file), file, File.join(File.dirname(file), File.basename(file, ".*") + ".css")])
opts.parse
end
]]>
</script>
<echo message="Done compiling SCSS source files." />

然而,这并没有给我Compass框架的力量。我下载了compass gem作为一个独立的,我想使用compass Ruby模块中的一个来用以下内容替换Ant build.xml中的上述代码:

<script language="ruby" classpath="${env.EP_LIB}/jruby/complete/${jruby-complete.build.jar}">
<![CDATA[
require $project.getProperty('env.EP_LIB') + '/compass/compass-0.12.2/lib/compass' 
require 'compass/exec'
files = Dir.glob($project.getProperty('inputFiles'))
files.each do |file| 
opts = Compass::Exec::Compass.new(["--style", "compressed", "--load-path", File.dirname(file), file, File.join(File.dirname(file), File.basename(file, ".*") + ".css")])
opts.parse
end
]]>
</script>

有人成功地做到了吗?

好吧,我终于花了很多功夫,用过时的文档完成了它。以下是对我们有效的方法:

将gem绑定到可执行jar中

  1. 下载jruby-complete-1.7.4.jar(适用于我的工作版本)(来自http://jruby.org/files/downloads/1.7.4/)
  2. C:jrubycomplete>java -jar jruby-complete-1.7.4.jar -S gem install -i ./compass compass
  3. C:jrubycomplete>jar uf jruby-complete-1.7.4.jar -C compass .
  4. C:jrubycomplete>java -jar jruby-complete-1.7.4.jar -S gem list
  5. 成功运行上述cmd后,您的jruby-complete-1.7.4.jar将被修改。现在它应该包含捆绑的宝石(包括指南针)。这也适用于您想要捆绑并在Compass项目中使用的其他宝石

compile.rb

Dir.entries(ARGV[0]).each do |lib|     
$LOAD_PATH.unshift "#{ARGV[0]}/#{lib}/lib" 
end 
require 'rubygems' 
require 'compass' 
require 'compass/exec' 
command_line_class = Compass::Exec::SubCommandUI.new([ARGV[1], ARGV[2], "-q"]).run!

配置.rb

http_path = "/"
css_dir = "."
sass_dir = "."
images_dir = "../images"
javascripts_dir = "../js"
output_style = :compressed
line_comments = false

build.xml

<path id="jruby.classpath">
<fileset dir="${env.LIB}/jruby/complete">
<include name="${jruby-complete.build.jar}"></include>  
</fileset>
</path>
<java fork="true" failonerror="true" classpathref="jruby.classpath" classname="org.jruby.Main">
<arg line="${stylesheetFolder}/compass/compile.rb ${rubyCompleteFolder}/compass/gems compile ${stylesheetFolder}"></arg>
</java>  

以下是帮助我进行Compass和Ant集成的支持文档:

  • http://www.verious.com/tutorial/tutorial-using-compass-and-sass-in-a-java-project/
  • http://blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar/

我希望这能帮你节省很多时间:)

这是我的解决方案,它支持在一个java fork中批量编译多个不同的SASS项目,方法是在您的java项目中搜索多个config.rb文件(基于此答案:https://stackoverflow.com/a/21051968/6440953):

对于表示不同sass项目路径(包含config.rb文件)的每个参数,运行compile命令:

compile.rb

require 'rubygems'
require 'compass'
require 'compass/exec'
ARGV.each do |arg|
Compass::Exec::SubCommandUI.new(["compile", arg, "--force"]).run!
end

在所有SASS项目路径中创建类似的config.rb文件:

配置.rb

http_path = "/"
css_dir = "."
sass_dir = "."
images_dir = "../images"
javascripts_dir = "../js"
output_style = :compressed
line_comments = false

设置你的红宝石完整罐子的路径,里面绑着指南针宝石(请参阅https://stackoverflow.com/a/21051968/6440953)。

在Java项目中搜索所有config.rb文件,并将它们的路径连接到一个属性。将此属性作为参数行发送到执行SASS编译的java fork。

build.xml

<path id="jruby.classpath">
<fileset dir="${ext.path}/lib/jruby/complete">
<include name="jruby-complete*.jar"></include>
</fileset>
</path>
<macrodef name="sassToCss">
<sequential>
<dirset id="configRubyDirSet" dir="${ext.path}webwebroot_ui">
<present targetdir="${ext.path}webwebroot_ui">
<mapper type="glob" from="*" to="*/config.rb" />
</present>
</dirset>
<pathconvert property="config.rb.dirs.str" pathsep=" " refid="configRubyDirSet"/>
<java fork="true" failonerror="true" classpathref="jruby.classpath" classname="org.jruby.Main">
<arg path="${ext.path}compile.rb"></arg>
<arg line="${config.rb.dirs.str}"></arg>
</java>
</sequential>
</macrodef>

相关内容

  • 没有找到相关文章

最新更新