Simple Note
From official site:
For production and especially if performance is important, we recommend pre-compiling using node or one of the many third party tools.
This article describe how to compile .less file to .css file in java code on server start-up.
Pre-request
LESS Getting Started
http://ben-bai.blogspot.tw/2013/10/less-getting-started.html
Do Something on Server Startup/Shutdown
http://ben-bai.blogspot.tw/2013/10/do-something-on-server-startupshutdown.html
Result
The same as the result in previous post.
Required jars
lesscss-engine-1.3.3.jar
http://mvnrepository.com/artifact/com.asual.lesscss/lesscss-engine/1.3.3
rhino-1.7R4.jar
http://mvnrepository.com/artifact/org.mozilla/rhino/1.7R4
commons-logging-1.1.1.jar
http://mvnrepository.com/artifact/commons-logging/commons-logging/1.1.1
Code
test.less
Copied from previous post, nothing changed.
https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/LESS/CompileLESSWithJava/WebContent/resources/less/test.less
less_test.html
Modified from previous post, load compiled css file instead of less file and do not load less.js.
https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/LESS/CompileLESSWithJava/WebContent/less_test.html
TestServletContextListener.java
Implements ServletContextListener, will compile less file to css file on server start-up.
package test;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.asual.lesscss.LessException;
import test.util.LESSUtils;
public class TestServletContextListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent sce) {
// do nothing on server shutdown
}
// compile less on server startup
@Override
public void contextInitialized(ServletContextEvent sce) {
try {
String webContentPath = sce.getServletContext().getRealPath("/");
LESSUtils.compile(new File(webContentPath + File.separator + "resources" + File.separator + "less" + File.separator + "test.less"),
new File(webContentPath + File.separator + "resources" + File.separator + "css" + File.separator + "test.css"));
} catch (LessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
LESSUtils.java
Contains utility function to compile less file, say Utils means (probably) will add more functions in future work.
package test.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import com.asual.lesscss.LessEngine;
import com.asual.lesscss.LessException;
public class LESSUtils {
public static void compile (File lessFile, File cssFile) throws LessException, IOException {
if (lessFile == null
|| !lessFile.exists()) {
// less file should exist
throw new FileNotFoundException("LESS file not exists !");
}
// create less engine
LessEngine engine = new LessEngine();
if (!cssFile.getParentFile().exists()) {
// create folders for css file
boolean cssFileCreated = cssFile.getParentFile().mkdirs();
if (!cssFileCreated) {
throw new IOException("Folders for CSS file are not created !");
}
}
// compile less file to css file
engine.compile(lessFile, cssFile);
}
}
web.xml
Define listener.
https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/LESS/CompileLESSWithJava/WebContent/WEB-INF/web.xml
References
Java Compiler for Less CSS?
http://stackoverflow.com/questions/9739724/java-compiler-for-less-css
LESS Engine
https://github.com/asual/lesscss-engine
Download
Full project at github
https://github.com/benbai123/JSP_Servlet_Practice/tree/master/Practice/LESS/CompileLESSWithJava
No comments:
Post a Comment