参考:https://github.com/hengyunabc/executable-embeded-tomcat-sample
使用spring-boot-maven-plugin打包,按照spring-boot规范。
git:https://gitee.com/g-vic/jfinal_demo_for_maven_jar
效果:


代码改造:
bom:
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.3.3.RELEASE</version> <executions> <execution> <phase>package</phase> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
dependencies:
<tomcat.version>8.0.32</tomcat.version>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>${tomcat.version}</version>
</dependency>Main:
public class Main {
public static void main(String[] args) throws ServletException, LifecycleException, IOException {
String hostName = "localhost";
int port = 80;
String contextPath = "";
String tomcatBaseDir = TomcatUtil.createTempDir("tomcat", port).getAbsolutePath();
String contextDocBase = TomcatUtil.createTempDir("tomcat-docBase", port).getAbsolutePath();
Tomcat tomcat = new Tomcat();
tomcat.setBaseDir(tomcatBaseDir);
tomcat.setPort(port);
tomcat.setHostname(hostName);
Host host = tomcat.getHost();
Context context = tomcat.addWebapp(host, contextPath, contextDocBase, new EmbededContextConfig());
context.setJarScanner(new EmbededStandardJarScanner());
ClassLoader classLoader = Main.class.getClassLoader();
context.setParentClassLoader(classLoader);
// context load WEB-INF/web.xml from classpath
context.addLifecycleListener(new WebXmlMountListener());
tomcat.start();
tomcat.getServer().await();
}
}DemoConfig改造:
public void configEngine(Engine me) {
me.setBaseTemplatePath("static");
me.setSourceFactory(new ClassPathSourceFactory());
me.addSharedFunction("/common/_layout.html");
me.addSharedFunction("/common/_paginate.html");
}静态文件:
