I recently started playing with SASS [http://sass-lang.com/] in a Java-based project and wanted to create an Ant task that:
How do I go about doing this?
Once you start tinkering with Sass, it will take your preprocessed Sass file and save it as a normal CSS file that you can use in your website. The most direct way to make this happen is in your terminal. Once Sass is installed, you can compile your Sass to CSS using the sass command.
Speaking of saving time, Sass reduces the repetition of writing CSS code. This is thanks to its features like functions, variables, inheritance, and so on. Finally, Sass is compiled to CSS and adds all the necessary vendor prefixes so you don't have to worry about writing them manually.
Original answer by rewinder:
It ended up taking me some time to figure it out so I thought I'd post how I accomplished it. Here's my setup:
build.properties
css.dir=./template/ver1-0/css/v3
sass.dir=./template/ver1-0/css/v3/scss
scss directory structure:
/template/ver1-0/css/v3/scss
+ widgets
- widgettest.scss
- widgettest2.scss
+ global
- globaltest.scss
- globaltest2.css
- file1.scss
- file2.scss
- _partial1.scss
- _partial2.scss
Here's the Ant task:
<!-- scss to CSS -->
<!-- via: http://workingonthecoolstuff.blogspot.com/2011/02/using-sass-in-ant-build.html -->
<target name="sass-compile-to-css">
<echo message="Compiling scss files to css..." />
<!-- create the css destination dir if it doesn't already exist -->
<property name="css-dest" location="${css.dir}"/>
<echo message="Creating directory at ${css.dir} [if it doesn't yet exist]" />
<mkdir dir="${css-dest}" />
<!-- create subdirs if necessary
via: https://stackoverflow.com/questions/536511/how-to-create-directories-specified-by-a-mapper-in-ant -->
<echo message="Creating css directories (and temporary .css files) for .scss to be compiled..." />
<touch mkdirs="true">
<fileset dir="${sass.dir}" includes="**/*.scss" excludes="**/_*" />
<mapper type="glob" from="*.scss" to="${css.dir}/*.css"/>
</touch>
<echo message="Running sass executable against sass files and compiling to CSS directory [${css-dest}] " />
<!-- run sass executable -->
<apply executable="sass" dest="${css-dest}" verbose="true" force="true" failonerror="true">
<arg value="--unix-newlines" />
<srcfile />
<targetfile />
<fileset dir="${sass.dir}" includes="**/*.scss" excludes="**/_*" />
<mapper type="glob" from="*.scss" to="*.css"/>
</apply>
<echo message="Done compiling scss files!" />
</target>
After running the task the results are as hoped for: .scss files are compiled to the same path that they were created under. If the file parent directory did not yet exist under ${css.dir}
then it gets created accordingly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With