2021SC@SDUSC
目录
一、简介
二、部署
1.安装环境
2.部署步骤
3.解决错误
三、项目分析
1.目录结构
2.jpress架构
3.团队分析与分工
一、简介
JPress 是一个使用 Java 开发的、开源免费的建站神器,灵感来源于 WordPress,目前已经有超过 10w+ 的网站使用 JPress 搭建,其中包括多个政府机构,200+上市公司,中科院、红十字会等。
二、部署
1.安装环境
- 阿里云学生机
- 操作系统Ubuntu 20.04.2 LTS x86_64(Py3.7.9)
- Java环境,JDK 1.8
- Apache Maven 3.8.2
- MySQL 5.7.34
- apache-tomcat-9.0.53
2.部署步骤
- 首先保证以上环境都配置好,可以正常运行。
- 下载jpress官方的war包,将其放置在tomcat的webapps下,并命名为jpress。可直接放war包,tomcat会帮你解压。
- 在服务器上启动tomcat,此时访问 ip:8080 ,访问成功,说明tomcat启动成功。
- 继续访问 ip:8080/jpress ,访问成功。
3.解决错误
但是访问 ip:8080/jpress/admin/login 的时候,出现错误——jpress后台管理系统的验证码显示不出来。 (注意:以下配图是已修复错误的截图,未修复之前验证码无法正常显示)
排错步骤如下:
- F12,捉个包,发现有一个 captcha包 是500错误,报错信息为 java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11Graphi 这应该是初始化Java的一个图形界面包失败,导致二维码显示不出来。
- 修改步骤如下:
- 打开tomcat的配置文件 ./bin/catalina.sh,修改里面的数据。
- 找到如下的代码 "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ -Djava.security.manager \ -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \
- 在如上代码后面添加以下 -Djava.awt.headless=true \ 意思大概是手动配置初始化这个图形界面包
- 重新启动tomcat。
- 打开 ip:8080/jpress/admin/login ,查看配置是否生效。
- 项目二维码正常显示,成功!捉包时也没有500错误了。于是顺利登录jpress后台管理界面,开始jpress之旅。
三、项目分析
1.目录结构
目录 | 备注 |
codegen | 代码生成器,开发的时候用与生成maven模块代码,运行时用不到该模块 |
doc | 文档存放目录 |
jpress-commons | 工具类和公用代码 |
jpress-core | JPress的核心代码 |
jpress-model | JPress非业务实体类 |
jpress-service | JPress非业务 service 接口定义 |
jpress-service-provider | JPress非业务 service 接口实现 |
jpress-template | JPress的html模板 |
jpress-web | JPress非业务的web处理代码,包含了 Controller、指令等 |
module-article | 文章模块代码 |
module-page | 页面模块代码 |
starter | undertow启动模块,开发的时候可以运行里面的 Starter.java 的main方法,编译的时候会 jpress 可执行程序 |
starter-tomcat | tomcat 启动模块,编译的时候回生成 war 包,用于放在tomcat部署 |
2.jpress架构
3.团队分析与分工
由于 JPress 是基于 JFinal 和 Jboot 开发的,,在分析 JPress 之前,有必要了解下 JFinal 和 Jboot,特别是 JFinal。Jboot对Jfinal进行了封装,并且增加了很多,通用默认组件配置:数据库、代码生成与封装、微信调用、配置类、定时任务、服务容器等。
团队在Jpress目录总结了以下四个主要核心模块:
- jpress-core,jpress的核心模块框架
- module-article:文章模块代码
- module-page:页面模块代码
- module-product:产品模块代码
以上四个模块,团队一人负责主要分析一个模块。而这四个模块之外的代码,不是不重要,而是那些东西估计大家都会涉及到(比如common包,估计每个人都要分析一遍),所以剩下的部分就是大家可以一起分析的代码。
除了以上的代码分工,队伍还规定每周进行一次每周线下分享、总结,在团队内部分享自己的成果,让其他模块的同学能了解其他模块,从而更好地认识整个系统。