Java的SASS实现? [关闭]
Posted
技术标签:
【中文标题】Java的SASS实现? [关闭]【英文标题】:SASS implementation for Java? [closed] 【发布时间】:2010-12-17 14:42:31 【问题描述】:我正在寻找 Java 中的 SASS 实现(可以与 JSP/JSF 一起使用)。对于 Python,我找到了 CleverCSS,但对于 Java 则没有。有人听说过这种用于生成 CSS 的工具吗?
【问题讨论】:
SASS/SCSS 是用 Ruby 开发的。要获得最佳和最新的功能,最好使用 Ruby,然后使用 Java 中的本机实现。本地实现也将落后于最新和最好的。 @Joepie,对我来说,减少依赖比拥有最新版本更重要。目前的 SASS/SCSS 足以满足我的需求。我只是想要一种轻量级的方式来使用它。 另外,仅仅因为某些东西不是“本机”实现并不意味着它会自动过时。可以使用机器翻译,或者一位热心的开发人员可以使其保持最新状态。 【参考方案1】:使用 ANT:
-
下载JRuby完整jar文件(JRuby Complete jar download page)
下载最新的 HAML/SASS 代码 (HAML/SASS tarball),并解压。放入“/libs/sass-[VERSION]”
将以下内容添加到 ant 构建文件中。
将脚本中的[VERSION]替换为JRuby和SASS的对应版本
运行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 实现? 你在哪里提取 haml/sass 存档?我是否需要将它放在 JRuby 的 gemfiles 中,或者我可以以某种方式直接引用它们?也就是说,不使用 JRuby 安装程序,只使用 jar。谢谢! 第一个 require "require 'libs/sass/lib/haml'" 是相对于你的项目文件夹的路径。 由于某种原因,require 'libs/sass-[VERSION]/lib/sass'
对我来说不是相对的,我不得不从我手头的财产中取出绝对值。所以它与require $project.getProperty('project.root') + '/sass/sass-3.2.9/lib/sass'
一起工作
嗨 Joepie,指向 HAML/SASS 的链接似乎已失效,如果可能,您能否更新链接?【参考方案2】:
ZUSS 是 LESS 和 SASS 的一个很好的替代品。它类似于 LESS。与 LESS 和 SASS 不同,ZUSS 文件的处理不需要 javascript 解释器。
免责声明:我是 ZUSS 的开发者。我开发它只是因为我找不到适用于 Java 的简洁解决方案。
【讨论】:
IMO,Zuss最适合Java环境,比如Java方法调用、变量解析器和资源定位器。 哇,不错的解决方案。我会在未来的 Java 项目中考虑这个!非常好。在使用 servlet 时,您是否有更多关于缓存的信息?文档并不清楚...使用 servlet 时编译步骤有多快? 默认 servlet 不提供任何缓存。如果你喜欢,请延长它。 GitHub 位置:github.com/tomyeh/ZUSS; Maven 仓库:mvnrepository.com/artifact/com.github.tomyeh/zuss/…【参考方案3】:有一个项目:http://code.google.com/p/jsass/(但处于非常早期的阶段)。
如果你对 Less 感兴趣,这里有一个现成的 Java 版本:http://www.asual.com/lesscss/
【讨论】:
我只是为了了解更多信息才这么说,上面的项目使用 rhino 来运行一个 javascript 文件。 jsass 看起来像废弃软件。赞成 asual 的 lesscss-servlet【参考方案4】:您还可以查看Web Resource Optimizer 4 J (WRO4J),它允许做很多事情(缩小、资源合并)并支持 Less CSS(据我所知在运行时)。
这意味着:您将 wro4j 过滤器添加到您的 web.xml 中,当您请求 CSS 时,您的 .scss(或 .saas)文件将被编译为标准 CSS。
我还没有使用过,但它似乎比这里列出的其他产品更先进。
事实上,我在 Less for Java 网站 (http://www.asual.com/lesscss/) 上阅读 cmets,WRO4J 使用这个库来提供它的“动态 Less 编译”。所以我认为 Less for Java 是可行的方法。
【讨论】:
【参考方案5】:您知道 Vaadin Web 框架带有它自己的内置 Sass 编译器吗?见https://vaadin.com/blog/-/blogs/state-of-sass-support-in-vaadin-7-today ...
【讨论】:
【参考方案6】:我个人觉得 SASS 语法很深,非常烦人。对于 Ruby / Python 人群来说,它可能是第二天性;对我作为 Java 人来说 - 不是那么多。我强烈更喜欢LESS,它建立在 CSS 语法之上,而不是提出新的语法。这有一个很好的附加优势,即能够“按原样”使用现有的 CSS 文件并根据需要合并 LESS 功能。
也就是说,据我所知,SASS 和 LESS 都没有 java 端口。但是,两者都是基于 ruby 的,因此您可以将它们安装在 JRuby 下。这种方法的唯一问题是 JRuby 的启动速度非常慢。不过,这并不是什么大问题,因为您可能会在开发中使用文件监控(一旦启动,它就会运行得非常顺畅),而且您不会太在意在部署期间构建需要多几秒钟的时间.
还有一些基于 php 的实现,例如 LessPhp、xCSS 等。不过,还没有亲自尝试过。
【讨论】:
Sass 语法已经被淡化:它现在很像没有括号的 CSS。即将发布的 Sass 版本将允许使用可选括号。 Sass 的一个优点是编译器和工具比 Less 对应物要成熟得多。 IntelliJ 9 支持 Sass(安装 Ruby 插件即可获得)。我们从 Less 切换到 Sass 主要是为了对编辑器的支持。我现在比 Less 更喜欢它(父引用 '&' 是无价的) css2sass 工具使转换 css 文件变得非常容易 - 它还会在可能的情况下嵌套选择器。我们转换了一个大型项目,没有遇到任何问题。 我也讨厌 sass 语法。据说更容易查看,但大括号对我来说更容易。 顺便说一句,现在有使用大括号的 SCSS 语法。【参考方案7】:似乎毕竟有一个(可能在提出这个问题后开发了一段时间)
https://github.com/Jasig/sass-maven-plugin
【讨论】:
遗憾的是它引入了 jRuby:<dependency><groupId>org.jruby</groupId><artifactId>jruby-complete</artifactId><version>1.6.7.1</version></dependency>
我更喜欢没有任何依赖关系的东西。
@SamHasler 明白了,为什么你更喜欢不依赖呢?除了它会改变许可证/破坏/膨胀你的代码库的机会之外,甚至 maven 本身也有大量的依赖关系......任何好的东西实际上都有很多依赖关系,这是开源的好处的一部分,不是吗?
如果我的某个依赖项中的某些内容出现故障,我希望能够自行修复它。我不了解 ruby,所以我更喜欢不是建立在它之上的东西。
Ruby 很棒 :) 我是 Java 人,学习 Ruby 是我最近做过的最有趣的事情之一......
这里是 sass-maven-plugin 的作者。除非有人用 Java 完全重写 SASS,否则总是需要 jRuby。这明显更加稳定,因为 maven 插件正在使用提供的工具中使用的相同 SASS 代码。【参考方案8】:
鉴于必须将 SASS 转换为 CSS 才能使用,使用与 Ruby SASS 一起分发的 sass2css 有什么问题?
【讨论】:
【参考方案9】:你可以试试我刚刚整理的这个过滤器 - https://github.com/darrinholst/sass-java
【讨论】:
【参考方案10】:我在使用 Ant 的 Eclipse 项目中使用 Compass & Sass。
我在这里学习了这个教程:
http://caueguerra.com/tutorial-using-sass-in-a-java-project
Compass 扩展了 Sass 并允许我的其他附加功能。
http://compass-style.org/
【讨论】:
链接失效了。【参考方案11】:我知道我迟到了,但这是我在具有 Ant 构建的 Java 项目中使用 SASS 的方法: http://workingonthecoolstuff.blogspot.com/2011/02/using-sass-in-ant-build.html 总而言之,我在安装了 Ruby 和 Sass 的机器上进行构建,所以它就像使用 Ant“应用”任务调用 sass 命令/应用程序一样简单,文件集包含所有 SCSS/SASS 文件.
【讨论】:
【参考方案12】:Sassc 是 C 中的命令行实现,应该很容易添加到构建过程中。根据作者,我认为它应该与 sass 保持同步:
Sass 最初是由这个库的共同创建者 Hampton Catlin (@hcatlin) 创建的。该语言的扩展和持续发展都是 Nathan Weizenbaum (@nex3) 和 Chris Eppstein (@chriseppstein) 多年努力的结果。
【讨论】:
以上是关于Java的SASS实现? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章