SASS-Implementierung für Java? [geschlossen]

76

Ich suche nach einer SASS-Implementierung in Java (könnte mit JSP / JSF verwendet werden). Für Python habe ich CleverCSS gefunden, aber für Java gibt es nichts. Hat jemand etwas über diese Art von Tool zum Generieren von CSS gehört?

user213225
quelle
3
SASS / SCSS wurde in Ruby entwickelt. Um die besten und neuesten Funktionen zu erhalten, ist es besser, Ruby als eine native Implementierung in Java zu verwenden. Eine native Implementierung wird auch hinter der letzten und größten stehen.
Joep
5
@Joepie, weniger Abhängigkeiten zu haben ist mir wichtiger als die neueste Version. SASS / SCSS, wie es im Moment ist, ist gut genug für meine Bedürfnisse. Ich möchte nur eine leichte Art, es zu benutzen.
Sam Hasler
2
Nur weil etwas keine "native" Implementierung ist, bedeutet dies nicht automatisch, dass es veraltet ist. Maschinelle Übersetzung könnte verwendet werden, oder ein begeisterter Entwickler könnte sie auf dem neuesten Stand halten.
Sam Hasler

Antworten:

48

Mit ANT:

  1. JRuby Complete Jar- Datei herunterladen ( JRuby Complete Jar-Download-Seite )
  2. Laden Sie den neuesten HAML / SASS-Code ( HAML / SASS-Tarball ) herunter und extrahieren Sie ihn. Setzen Sie es in "/ libs / sass- [VERSION]"
  3. Fügen Sie einer Ant-Build-Datei Folgendes hinzu.
  4. Ersetzen Sie [VERSION] im Skript durch die entsprechenden Versionen von JRuby und SASS
  5. Führen Sie das Ant-Skript aus, und die sass- oder scss-Dateien werden kompiliert!

<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>

Mit MAVEN:

Maven kann auch Folgendes tun: Verwenden des Antrun-Plugins:

<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>  
Joep
quelle
Ist es auch über Maven möglich?
Jeremy S.
Wo extrahieren Sie das Haml / Sass-Archiv? Muss ich es in die Gemfiles für JRuby einfügen oder kann ich sie irgendwie direkt referenzieren? Das heißt, ohne das JRuby-Installationsprogramm zu verwenden, nur das Glas. Vielen Dank!
Alex Ciminian
Die erste Anforderung "require 'libs / sass / lib / haml'" ist der Pfad relativ zu Ihrem Projektordner.
Joep
1
Aus irgendeinem Grund require 'libs/sass-[VERSION]/lib/sass'funktionierte das für mich nicht als Verwandter, ich musste das Absolute von einer Immobilie, die ich in der Hand hatte, ablegen. So funktionierte es mitrequire $project.getProperty('project.root') + '/sass/sass-3.2.9/lib/sass'
L. Holanda
1
Hallo Joepie, der Link zu HAML / SASS scheint tot zu sein. Könntest du den Link wenn möglich aktualisieren?
Bummi
19

ZUSS ist eine gute Alternative zu LESS und SASS. Es ist ähnlich wie WENIGER. Im Gegensatz zu LESS und SASS ist für die Verarbeitung der ZUSS-Dateien kein JavaScript-Interpreter erforderlich.

Haftungsausschluss: Ich bin der Entwickler von ZUSS. Ich habe es einfach entwickelt, weil ich keine ordentliche Lösung für Java finden kann.

Tom Yeh
quelle
IMO, Zuss eignet sich am besten für Java-Umgebungen wie Java-Methodenaufruf, Variablenauflöser und Ressourcen-Locator.
Mo.
Wow, schöne Lösung. Ich werde dies für zukünftige Java-Projekte berücksichtigen! Wirklich nett. Haben Sie weitere Informationen zum Caching bei Verwendung des Servlets? Die Dokumentation ist darüber nicht klar ... Wie schnell ist der Kompilierungsschritt bei Verwendung des Servlets?
Joep
1
Das Standardservlet stellt keinen Cache bereit. Wenn Sie möchten, erweitern Sie es bitte.
Tom Yeh
14

Es gibt ein Projekt: http://code.google.com/p/jsass/ (aber es befindet sich in einem sehr frühen Stadium).

Wenn Sie an Less interessiert sind, gibt es eine gebrauchsfertige Java-Version: http://www.asual.com/lesscss/

Gilberto Olimpio
quelle
Ich sage nur, dass dies im Interesse weiterer Informationen gut ist. Das obige Projekt verwendet Rhino, um eine Javascript-Datei auszuführen.
mP.
3
jsass sieht aus wie verlassenware. Upvoted für asuals lesscss-servlet
Sam Hasler
10

Sie können sich auch Web Resource Optimizer 4 J (WRO4J) ansehen, das viele Dinge ermöglicht (Minimierung, Zusammenführen von Ressourcen) und Less CSS unterstützt (soweit ich weiß zur Laufzeit).

Dies bedeutet: Sie fügen Ihrer web.xml den Filter wro4j hinzu, und wenn Sie nach einem CSS fragen, werden Ihre .scss- (oder .saas-) Dateien zu Standard-CSS kompiliert.

Ich habe es noch nicht verwendet, aber es scheint fortgeschrittener zu sein als andere hier aufgeführte Produkte.


Tatsächlich habe ich Kommentare auf der Less for Java-Website ( http://www.asual.com/lesscss/ ) gelesen und WRO4J verwendet diese Bibliothek, um die "on the fly Less-Kompilierung" bereitzustellen. Ich denke, Less for Java ist der richtige Weg.

Legzo
quelle
5

Ich persönlich finde die SASS-Syntax zutiefst nervig. Für Ruby / Python-Leute kann es als zweite Natur kommen; für mich als Java-Typ - nicht so sehr. Ich stark bevorzugen LESS , die stattdessen auf CSS - Syntax baut mit einem neuen von der Tür. Dies hat den zusätzlichen Vorteil, dass Sie Ihre vorhandenen CSS-Dateien "wie sie sind" verwenden und bei Bedarf WENIGER Funktionen integrieren können.

Soweit ich weiß, haben weder SASS noch LESS Java-Ports. Beide basieren jedoch auf Ruby, sodass Sie sie unter JRuby installieren können . Das einzige Problem bei diesem Ansatz ist, dass JRuby nur langsam startet. Es ist jedoch keine große Sache, da Sie wahrscheinlich die Dateiüberwachung in der Entwicklung verwenden werden (und sobald sie gestartet ist, läuft sie sehr reibungslos) und es Ihnen nicht so wichtig ist, dass Ihr Build während der Bereitstellung einige Sekunden länger dauert .

Es gibt auch einige PHP-basierte Implementierungen wie LessPhp , xCSS und andere. Ich habe sie aber nicht persönlich ausprobiert.

ChssPly76
quelle
3
Die Sass-Syntax wurde abgeschwächt: Es ist jetzt ähnlich wie bei CSS ohne Klammern. Die kommende Version von Sass erlaubt optionale Klammern. Ein Vorteil von Sass ist, dass der Compiler und die Tools weitaus ausgereifter sind als die Less-Gegenstücke. IntelliJ 9 unterstützt Sass (Installieren Sie das Ruby-Plugin, um es zu erhalten). Wir haben hauptsächlich wegen der Editorunterstützung von Less zu Sass gewechselt. Ich mag es jetzt mehr als weniger (die übergeordnete Referenz '&' ist von unschätzbarem Wert) Das Tool css2sass macht das Konvertieren von CSS-Dateien sehr einfach - es verschachtelt nach Möglichkeit auch Selektoren. Wir haben ein großes Projekt konvertiert und hatten keine Probleme.
Jomohke
Ich hasse auch Sass-Syntax. Es ist angeblich einfacher zu sehen, aber Zahnspangen machen es mir leichter.
Juan Mendes
10
Übrigens gibt es jetzt die SCSS-Syntax, die geschweifte Klammern verwendet.
Debilski
4

Es scheint doch eine zu geben (wahrscheinlich eine Weile nachdem diese Frage gestellt wurde).

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

Eran Medan
quelle
Schade, dass es jRuby anzieht: <dependency><groupId>org.jruby</groupId><artifactId>jruby-complete</artifactId><version>1.6.7.1</version></dependency>Ich würde etwas bevorzugen, das keine Abhängigkeiten hat.
Sam Hasler
1
@SamHasler hat verstanden, warum bevorzugen Sie übrigens keine Abhängigkeiten? Abgesehen von der Möglichkeit, dass sich die Lizenz ändert / Ihre Codebasis aufbricht / aufbläht, hat sogar Maven selbst Unmengen von Abhängigkeiten ... alles Gute da draußen hat tatsächlich viele Abhängigkeiten, das ist ein Teil der schönen Sache bei Open Source, nicht wahr?
Eran Medan
Wenn etwas in einer meiner Abhängigkeiten kaputt geht, möchte ich in der Lage sein, es selbst zu beheben. Ich kenne Ruby nicht, also würde ich etwas bevorzugen, das nicht darauf aufgebaut ist.
Sam Hasler
Ruby ist wunderbar :) Ich bin eine Java-Person, und Ruby zu lernen war eines der lustigsten Dinge, die ich in letzter Zeit getan habe ...
Eran Medan
1
Autor des Sass-Maven-Plugins hier. Sofern nicht jemand SASS in Java komplett neu geschrieben hat, wird jRuby immer benötigt. Dies ist wesentlich stabiler, da derselbe SASS-Code, der in den bereitgestellten Tools verwendet wird, vom Maven-Plugin verwendet wird.
Eric
3

Was ist falsch an der Verwendung von sass2css, das mit Ruby SASS verteilt wird, da SASS in CSS konvertiert werden muss, um verwendet werden zu können?

aussiegeek
quelle
1

Ich weiß, dass ich zu spät zur Party komme, aber dies ist der Ansatz, den ich gewählt habe, um SASS in einem Java-Projekt mit einem Ant-Build zu verwenden: http://workingonthecoolstuff.blogspot.com/2011/02/using-sass-in-ant -build.html Zusammenfassend kann ich sagen , dass ich den Build auf einem Computer mit Ruby und Sass installiere, sodass es so einfach war, den Befehl / die Anwendung sass mit der Aufgabe Ant "apply" mit einer Dateigruppe aufzurufen, die alle SCSS / SASS enthält Dateien.

spaaarky21
quelle
0

Sassc ist eine Befehlszeilenimplementierung in C, die sich leicht zum Erstellungsprozess hinzufügen lässt. Basierend auf den Autoren würde ich sagen, dass es mit sass auf dem neuesten Stand bleiben sollte:

Sass wurde ursprünglich vom Mitschöpfer dieser Bibliothek, Hampton Catlin (@hcatlin), erstellt. Die Erweiterung und Weiterentwicklung der Sprache ist das Ergebnis jahrelanger Arbeit von Nathan Weizenbaum (@ nex3) und Chris Eppstein (@chriseppstein).

Sam Hasler
quelle