Java的SASS实现?[关闭]


76

我正在寻找Java中的SASS实现(可以与JSP / JSF一起使用)。对于Python,我已经找到了CleverCSS,但是Java没有。有人听说过这种生成CSS的工具吗?


3
SASS / SCSS是用Ruby开发的。为了获得最佳和最新功能,最好使用Ruby,然后再使用Java中的本机实现。本机实现也将落后于最新和最大。
Joep 2012年

5
@Joepie,对我来说,减少依赖比拥有最新版本更重要。目前,SASS / SCSS足以满足我的需求。我只想要一种轻巧的方式来使用它。
山姆·哈斯勒

2
同样,仅仅因为某事不是“本机”实现,也不自动意味着它会过时。可以使用机器翻译,或者一个热心的开发人员可以使机器保持最新。
山姆·哈斯勒

Answers:


48

使用ANT:

  1. 下载JRuby完整的jar文件(JRuby完整的jar下载页面
  2. 下载最新的HAML / SASS代码(HAML / SASS tarball)并解压缩。将其放在“ / libs / sass- [VERSION]”中
  3. 将以下内容添加到ant构建文件中。
  4. 将脚本中的[VERSION]替换为相应的JRuby和SASS版本
  5. 运行ant脚本,sass或scss文件将被编译!

<path id="JRuby">
    <fileset file="libs/jruby-complete-[VERSION].jar"/> <!-- Location of JRuby jar file -->
</path>  

<target name="compileSCSS">
    <echo message="Compiling scss files..." />
    <property name="filesIn" value="${dir.css}/scss/**/[^_]*.scss" />
    <property name="fileOutDir" value="/${dir.css}/${dir.css.build}" />
    <script language="ruby" classpathref="JRuby">
        <![CDATA[
            require 'libs/sass-[VERSION]/lib/sass'
            require 'sass/exec'

            files = Dir.glob($project.getProperty('filesIn'))
            Dir.mkdir($project.getProperty('fileOutDir')) unless File.exists?($project.getProperty('fileOutDir'))
            files.each do 
                | file |
                puts "     [sass compiler] " + file + " -> " + $project.getProperty('fileOutDir') + "/" + File.basename(file, ".*") + ".css"
                opts = Sass::Exec::Sass.new(["--load-path", File.dirname(file), file, File.join($project.getProperty('fileOutDir'), File.basename(file, ".*") + ".css")])
                opts.parse
            end
        ]]>
    </script>
    <echo message="Done compiling scss files!" />
</target>

使用MAVEN:

Maven也可以做到这一点:使用antrun插件:

<project>
<build>
<plugins>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>compileAndMinify</id>
            <phase>compile</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <mkdir dir="${project.build.directory}/compiled" />

                    <echo message="Compiling scss files..."/>
                    <path id="JRuby">
                        <fileset file="${basedir}/jars/jruby-complete-[VERSION].jar"/>
                    </path>
                    <property name="filesIn" value="${project.build.directory}/css/**/[^_]*.scss" />
                    <property name="fileOutDir" value="${project.build.directory}/compiled/css" />
                    <script language="ruby" classpathref="JRuby">
                        <![CDATA[
                            require 'libs/sass-[VERSION]/lib/sass'
                            require 'sass/exec'

                            files = Dir.glob($project.getProperty('filesIn'))
                            Dir.mkdir($project.getProperty('fileOutDir')) unless File.exists?($project.getProperty('fileOutDir'))
                            files.each do 
                                | file |
                                puts "     [sass compiler] " + file + " -> " + $project.getProperty('fileOutDir') + "/" + File.basename(file, ".*") + ".css"
                                opts = Sass::Exec::Sass.new(["--load-path", File.dirname(file), file, File.join($project.getProperty('fileOutDir'), File.basename(file, ".*") + ".css")])
                                opts.parse
                            end
                        ]]>
                    </script>
                </target>
            </configuration>
        </execution>
    </executions>
</plugin>
</plugins>
</build>
</project>  

也可以通过Maven吗?
Jeremy S.

您在哪里提取haml / sass存档?我需要将其放入JRuby的gemfile中还是可以以某种方式直接引用它们?也就是说,无需使用JRuby安装程序,只需使用jar。谢谢!
亚历克斯·西米宁

第一个要求“ require'libs / sass / lib / haml'”是相对于您的项目文件夹的路径。
乔普,2012年

1
出于某种原因require 'libs/sass-[VERSION]/lib/sass',我的亲戚并不如我所愿,我不得不从我拥有的财产中拿出绝对的财产。因此,它与require $project.getProperty('project.root') + '/sass/sass-3.2.9/lib/sass'
L. Holanda

1
嗨,乔皮(Joepie),指向HAML / SASS的链接似乎已消失,如果可以的话,您能否更新链接?
bummi

19

ZUSS是LESS和SASS的很好替代品。它类似于LESS。与LESS和SASS不同,ZUSS文件的处理不需要JavaScript解释器。

免责声明:我是ZUSS的开发人员。我之所以开发它,仅仅是因为找不到适合Java的灵巧解决方案。


IMO,Zuss最适合Java环境,例如Java方法调用,变量解析器和资源定位器。
Mo.

哇,不错的解决方案。我将在以后的Java项目中考虑这一点!非常好。使用Servlet时,您是否还有有关缓存的更多信息?文档尚不清楚...使用servlet时编译步骤有多快?
Joep

1
默认Servlet不提供任何缓存。如果您愿意,请扩展它。
叶烨



10

您还可以看看Web Resource Optimizer 4 J(WRO4J),它允许很多事情(最小化,资源合并)并支持Less CSS(据我所知在运行时)。

这意味着:您将wro4j过滤器添加到web.xml,并且当您请求CSS时,.scss(或.saas)文件将被编译为标准CSS。

我还没有使用过它,但是它似乎比这里列出的其他产品先进。


实际上,我在Less for Java网站(http://www.asual.com/lesscss/)上阅读评论,WRO4J使用此库来提供“即时运行的Less编译”。因此,我认为Less for Java是必经之路。



5

我个人深深地发现SASS语法,令人讨厌。对于Ruby / Python人群来说,它可能是第二自然。对我来说,作为Java家伙-没那么多。我强烈希望LESS建立在CSS语法的基础上,而不是提出一个新的语法。这具有一个很好的附加优势,即可以按原样使用现有CSS文件并根据需要合并LESS功能。

也就是说,据我所知,SASS和LESS都没有Java端口。两者都是基于ruby的,因此您可以将它们安装在JRuby下。这种方法的唯一问题是JRuby的启动速度很慢。不过,这并不是什么大问题,因为您可能会在开发中使用文件监视(并且一旦启动,它运行起来就非常流畅),并且您不会在意部署期间构建花费了几秒钟的时间。

还有一些基于PHP的实现,例如LessPhpxCSS等。不过,还没有亲自尝试过。


3
Sass语法已被简化:现在就像没有括号的CSS。即将发布的Sass版本将允许使用可选的括号。Sass的优势之一是编译器和工具比Less同类的工具成熟得多。IntelliJ 9支持Sass(安装Ruby插件即可获取)。我们从Less切换到Sass主要是为了获得编辑器支持。我现在比Less更喜欢它(父引用'&'是无价的)css2sass工具使转换css文件非常容易-它将在可能的情况下嵌套选择器。我们转换了一个大项目,没有任何问题。
jomohke

我也讨厌sass语法。据称它更容易查看,但括号使我更容易。
Juan Mendes 2010年

10
顺便说一句,现在有使用花括号的SCSS语法。
Debilski

4

似乎毕竟有一个(在提出这个问题后可能会发展一段时间)

https://github.com/Jasig/sass-maven-plugin


可惜它正在引入jRuby:<dependency><groupId>org.jruby</groupId><artifactId>jruby-complete</artifactId><version>1.6.7.1</version></dependency>我更喜欢没有任何依赖性的东西。
山姆·哈斯勒

1
@SamHasler明白了,为什么您不喜欢没有依赖关系?除了有可能改变许可/破坏/膨胀代码库的机会外,即使Maven本身也具有大量的依赖关系...那里的任何好东西实际上都具有许多依赖关系,这是开源的好处之一,不是吗?
伊兰·棉兰

如果我的一个依赖项中的某项中断,我希望能够自行解决它。我不了解红宝石,所以我更喜欢不以它为基础的产品。
山姆·哈斯勒

Ruby非常棒:)我是Java的人,学习Ruby是我最近做过的最有趣的事情之一
Eran Medan 2012年

1
sass-maven-plugin的作者在这里。除非有人用Java完全重写SASS,否则始终需要jRuby。这非常稳定,因为maven插件正在使用提供的工具中使用的相同SASS代码。
埃里克

3

鉴于必须将SASS转换为CSS才能使用,使用与Ruby SASS一起分发的sass2css有什么问题?





0

Sassc是C的命令行实现,应该很容易添加到构建过程中。基于作者,我会说它应该与sass保持同步:

Sass最初是由该图书馆的联合创建者Hampton Catlin(@hcatlin)创建的。语言的扩展和持续发展都是Nathan Weizenbaum(@ nex3)和Chris Eppstein(@chriseppstein)多年工作的结果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.