大家好。我写这个文章的时候是因为,我在使用的时候走了很多弯路,也很感谢 http://www.jfinal.com/share/422 这篇文章的作者对我的帮助,再次感谢。整理后,我重新处理了下,大概是这样的。 重点声明,这个是对他的那篇文字的补充说明。pom文件用我的。app.class 文件也是可以参考我的。其他参考他的
第一pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ynwl.clientdata</groupId> <artifactId>charge_increment_model</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>charge_increment_model Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <!-- 调试工具 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- jfinal 默认工具 --> <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>3.3</version> </dependency> <dependency> <groupId>com.jfinal</groupId> <artifactId>jetty-server</artifactId> <version>8.1.8</version> </dependency> <!-- 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <!-- 阿里巴巴数据源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.31</version> </dependency> <!-- 阿里巴巴JSON --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.36</version> </dependency> <!-- 日志管理工具 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <!-- 缓存管理工具 --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.11</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.6</version> </dependency> <!-- https://mvnrepository.com/artifact/com.xiaoleilu/hutool --> <dependency> <groupId>com.xiaoleilu</groupId> <artifactId>hutool</artifactId> <version>2.16.2</version> </dependency> <dependency> <groupId>com.xiaoleilu</groupId> <artifactId>hutool-all</artifactId> <version>3.2.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <!-- main 函数的入口函数,切勿配置错误 --> <mainClass>config.App</mainClass> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.handlers</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.schemas</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
第二个就是函数需要这样写: 当然这个文件是复制了他的内容: djs19960601
package config;
import com.jfinal.core.JFinal;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.StrKit;
import com.xiaoleilu.hutool.util.ZipUtil;
import java.io.IOException;
public class App {
/**
* 用于在 IDEA 中,通过创建 main 方法的方式启动项目,不支持热加载
* 本方法存在的意义在于此方法启动的速度比 maven 下的 jetty 插件要快得多
* <p>
* 注意:不支持热加载。建议通过 Ctrl + F5 快捷键,来快速重新启动项目,速度并不会比 eclipse 下的热加载慢多少
* 实际操作中是先通过按 Alt + 5 打开 debug 窗口,才能按 Ctrl + F5 重启项目
*/
//用于启动JFinal
public static void main(String[] args) {
/**
* 特别注意:IDEA 之下建议的启动方式,仅比 eclipse 之下少了最后一个参数
*/
String baseBath = String.valueOf(AppConfig.class.getProtectionDomain().getCodeSource().getLocation());
String classPath, webRootPath, jarPath;
if (StrKit.notBlank(baseBath) && baseBath.contains("file:/")) {
// 获取运行操作系统的运行方式 window和linux的细微区别
boolean windows = System.getProperties().getProperty("os.name").contains("Windows");
System.out.println(System.getProperties().getProperty("os.name"));
jarPath = (windows ? "" : "/") + baseBath.substring("file:/".length());
classPath = (windows ? "" : "/") + jarPath.substring(0, jarPath.lastIndexOf("/")) + "/class-path";
System.out.println("jarPath:" + jarPath);
System.out.println("classPath:" + classPath);
webRootPath = classPath;
try {
ZipUtil.unzip(jarPath, classPath);
} catch (IOException e) {
e.printStackTrace();
}
// 这两步是核心指定 webapp目录和classpath目录
PathKit.setWebRootPath(webRootPath);
PathKit.setRootClassPath(classPath);
// eclipse 启动是4个参数
JFinal.start(webRootPath, 80, "/");
} else {
throw new RuntimeException("你丫的路径不对!");
}
}
}重点是这个方式是可以用Java 7 编译。不用Java 8
项目结构如图:
AppConfig
不影响:


ok .应该清楚了吧。
最终生成的文件如图
