Triển khai SASS cho Java? [đóng cửa]


76

Tôi đang tìm cách triển khai SASS trong Java (có thể được sử dụng với JSP / JSF). Đối với Python, tôi đã tìm thấy CleverCSS, nhưng không có gì cho Java. Có ai nghe nói gì về loại công cụ tạo CSS này không?


3
SASS / SCSS được phát triển trong Ruby. Để có được các tính năng mới nhất và tốt nhất, tốt hơn hết bạn nên sử dụng Ruby, sau đó là một triển khai gốc trong Java. Triển khai gốc cũng sẽ là cuối cùng và tốt nhất.
Joep

5
@Joepie, Với tôi ít phụ thuộc hơn quan trọng hơn là có phiên bản mới nhất. SASS / SCSS hiện tại là đủ tốt cho nhu cầu của tôi. Tôi chỉ muốn một cách nhẹ để sử dụng nó.
Sam Hasler

2
Ngoài ra, chỉ vì một cái gì đó không phải là triển khai "gốc" không tự động có nghĩa là nó sẽ trở nên lỗi thời. Bản dịch máy có thể được sử dụng hoặc một nhà phát triển nhiệt tình có thể cập nhật nó.
Sam Hasler

Câu trả lời:


48

Với ANT:

  1. Tải xuống tệp jar hoàn chỉnh của JRuby ( Trang tải xuống tệp hoàn chỉnh của JRuby )
  2. Tải xuống mã HAML / SASS mới nhất ( HAML / SASS tarball ) và giải nén nó. Đặt nó vào "/ libs / sass- [VERSION]"
  3. Thêm phần sau vào tệp xây dựng kiến.
  4. Thay thế [VERSION] trong script thành các phiên bản tương ứng của JRuby và SASS
  5. Chạy tập lệnh ant và các tệp sass hoặc scss sẽ được biên dịch!

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

Với MAVEN:

Maven cũng có thể làm điều này: Sử dụng plugin 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>  

Nó cũng có thể thông qua Maven?
Jeremy S.

Bạn giải nén kho lưu trữ haml / sass ở đâu? Tôi có cần phải đưa nó vào các tệp đá quý cho JRuby hay tôi có thể tham khảo chúng trực tiếp bằng cách nào đó không? Đó là, không cần sử dụng trình cài đặt JRuby, chỉ cần cái bình. Cảm ơn!
Alex Ciminian

Yêu cầu đầu tiên "request 'libs / sass / lib / haml'" là đường dẫn liên quan đến thư mục dự án của bạn.
Joep

1
Vì một lý do nào đó mà require 'libs/sass-[VERSION]/lib/sass'nó không hoạt động như tương đối đối với tôi, tôi phải đặt cái tuyệt đối từ tài sản mà tôi có trong tay. Vì vậy, nó đã hoạt động vớirequire $project.getProperty('project.root') + '/sass/sass-3.2.9/lib/sass'
L. Holanda.

1
Xin chào Joepie, liên kết đến HAML / SASS có vẻ đã chết, bạn có thể cập nhật liên kết nếu được không?
bummi

19

ZUSS là một sự thay thế tốt cho LESS và SASS. Nó tương tự như LESS. Không giống như LESS và SASS, việc xử lý các tệp ZUSS không yêu cầu trình thông dịch JavaScript.

Tuyên bố từ chối trách nhiệm: Tôi là nhà phát triển của ZUSS. Tôi đã phát triển nó đơn giản vì tôi không thể tìm thấy một giải pháp gọn gàng cho Java.


IMO, Zuss phù hợp nhất với môi trường Java, chẳng hạn như lệnh gọi phương thức Java, trình phân giải biến và định vị tài nguyên.
Mo.

Wow, giải pháp tốt. Tôi sẽ xem xét điều này cho các dự án java trong tương lai! Thực sự tốt đẹp. Bạn có thêm một số thông tin về bộ nhớ đệm khi sử dụng servlet không? Tài liệu không rõ ràng về điều đó ... Bước biên dịch khi sử dụng servlet nhanh như thế nào?
Joep 19/12/11

1
Servlet mặc định không cung cấp bất kỳ bộ đệm nào. Nếu bạn thích, xin vui lòng mở rộng nó.
Tom Yeh


14

Có một dự án: http://code.google.com/p/jsass/ (nhưng nó đang ở giai đoạn rất sớm).

Nếu bạn quan tâm đến Less, có một phiên bản Java sẵn sàng sử dụng cho nó: http://www.asual.com/lesscss/


Tôi chỉ nói điều này vì có thêm thông tin là tốt, dự án trên sử dụng tê giác để chạy một tệp javascript.
mP.

3
jsass trông giống như phần mềm bỏ rơi. Bình chọn cho lesscss-servlet asual
Sam Hasler

10

Bạn cũng có thể xem qua Trình tối ưu hóa tài nguyên web 4 J (WRO4J) cho phép thực hiện rất nhiều thứ (thu nhỏ, hợp nhất tài nguyên) và hỗ trợ Ít CSS hơn (theo tôi biết).

Điều này có nghĩa là: bạn thêm bộ lọc wro4j vào web.xml của mình và khi bạn yêu cầu CSS, các tệp .scss (hoặc .saas) của bạn sẽ được biên dịch thành CSS chuẩn.

Tôi chưa sử dụng nó, nhưng nó có vẻ cao cấp hơn các sản phẩm khác được liệt kê ở đây.


Trên thực tế, tôi đang đọc các bình luận trên trang web Less for Java ( http://www.asual.com/lesscss/ ) và WRO4J sử dụng thư viện này để cung cấp cho nó "sự biên dịch nhanh hơn". Vì vậy, tôi nghĩ Ít hơn cho Java là cách để đi.



5

Cá nhân tôi thấy cú pháp SASS sâu sắc, khó chịu kinh khủng. Đối với đám đông Ruby / Python, nó có thể là bản chất thứ hai; đối với tôi là một chàng trai Java - không quá nhiều. Tôi mạnh mẽ thích LESS mà xây dựng dựa trên cú pháp CSS thay vì đến với một hình mới. Điều đó có một lợi thế bổ sung tuyệt vời là có thể sử dụng các tệp CSS hiện có của bạn "nguyên trạng" và kết hợp các tính năng LESS nếu cần.

Điều đó nói rằng, cả SASS và LESS đều không có cổng java theo như tôi biết. Tuy nhiên, cả hai đều dựa trên ruby, vì vậy bạn có thể cài đặt chúng theo JRuby . Vấn đề duy nhất với cách tiếp cận đó là JRuby là đầu óc khởi động rất chậm. Tuy nhiên, nó không phải là một vấn đề lớn vì bạn có thể sẽ sử dụng tính năng giám sát tệp trong quá trình phát triển (và khi nó khởi động, nó sẽ chạy rất mượt mà) và bạn sẽ không quan tâm nhiều đến việc bản dựng của bạn mất vài giây trong quá trình triển khai .

Ngoài ra còn có một số triển khai dựa trên PHP như LessPhp , xCSS và các ứng dụng khác. Tuy nhiên, chưa thử chúng một cách cá nhân.


3
Cú pháp Sass đã được giảm bớt: Bây giờ nó giống như CSS không có dấu ngoặc. Phiên bản sắp tới của Sass sẽ cho phép các dấu ngoặc tùy chọn. Một ưu điểm của Sass là trình biên dịch và các công cụ đã hoàn thiện hơn nhiều so với các phiên bản Less. IntelliJ 9 hỗ trợ Sass (Cài đặt plugin Ruby để có được nó). Chúng tôi chủ yếu chuyển từ Ít sang Sass để hỗ trợ trình chỉnh sửa. Bây giờ tôi thích nó hơn Ít hơn (tham chiếu gốc '&' là vô giá) Công cụ css2sass giúp chuyển đổi tệp css rất dễ dàng - nó cũng sẽ lồng các bộ chọn khi có thể. Chúng tôi đã chuyển đổi một dự án lớn và không có bất kỳ vấn đề nào.
jomohke

Tôi cũng ghét cú pháp ngớ ngẩn. Nó được cho là dễ nhìn hơn, nhưng niềng răng làm cho nó dễ dàng hơn đối với tôi.
Juan Mendes

10
Btw, bây giờ có cú pháp SCSS sử dụng dấu ngoặc nhọn.
Debilski

4

Có vẻ như cuối cùng thì vẫn có một (được phát triển có lẽ một thời gian sau khi câu hỏi này được hỏi)

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


Đáng tiếc là nó đang kéo đến jRuby: <dependency><groupId>org.jruby</groupId><artifactId>jruby-complete</artifactId><version>1.6.7.1</version></dependency>Tôi thích thứ gì đó không có bất kỳ sự phụ thuộc nào.
Sam Hasler

1
@SamHasler đã hiểu, nhân tiện, tại sao bạn không thích không có phụ thuộc? ngoại trừ khả năng nó sẽ thay đổi giấy phép / phá vỡ / làm phình cơ sở mã của bạn, thậm chí bản thân maven cũng có rất nhiều phụ thuộc ... bất cứ thứ gì tốt ngoài kia thực sự đều có nhiều phụ thuộc, đó là một phần của điều tốt đẹp về mã nguồn mở, phải không?
Eran Medan

Nếu có điều gì đó ở một trong những phần phụ thuộc của tôi bị hỏng, tôi muốn có thể tự mình khắc phục và sửa chữa nó. Tôi không biết ruby ​​nên tôi muốn thứ gì đó không được xây dựng trên nó.
Sam Hasler

Ruby là tuyệt vời :) Tôi là một người Java, và học Ruby là một trong những điều thú vị tôi đã thực hiện thời gian gần đây ...
Eran Medan

1
Tác giả của sass-maven-plugin tại đây. Trừ khi ai đó đã viết lại hoàn toàn SASS trong Java, jRuby sẽ luôn cần thiết. Điều này ổn định hơn đáng kể vì mã SASS tương tự được sử dụng trong các công cụ được cung cấp đang được sử dụng bởi plugin maven.
Eric

3

Cho rằng SASS phải được chuyển đổi thành CSS để có thể sử dụng được, có gì sai khi sử dụng sass2css phân phối với Ruby SASS?




1

Tôi biết mình đến muộn với bữa tiệc, nhưng đây là cách tôi sử dụng SASS trong một dự án Java với bản dựng Ant: http://workingonthecoolstuff.blogspot.com/2011/02/using-sass-in-ant -build.html Tóm lại, tôi đang thực hiện xây dựng trên một máy có cài đặt Ruby và Sass nên việc gọi lệnh / ứng dụng sass dễ dàng bằng tác vụ Ant "apply" với một tập tin bao gồm tất cả SCSS / SASS các tập tin.


0

Sassc là một triển khai dòng lệnh trong C, sẽ dễ dàng thêm vào quá trình xây dựng. Dựa trên các tác giả, tôi muốn nói rằng nó sẽ được cập nhật với sass:

Sass ban đầu được tạo ra bởi người đồng sáng tạo của thư viện này, Hampton Catlin (@hcatlin). Việc mở rộng và tiếp tục phát triển của ngôn ngữ đều là kết quả của nhiều năm làm việc của Nathan Weizenbaum (@ nex3) và Chris Eppstein (@chriseppstein).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.