# 开发环境搭建
本文作者:youhong.ai (opens new window)
部门: 上海大区EBU7部开发1部
职位: 开发工程师
# 说明
泛微ecology开发有多种方式,搭建的开发环境也各有不同,每个人的开发习惯也不一样,这里正对开发环境的搭建采用的是maven项目的形式进行搭建,当然也可以更具其他的文档或者教程来搭建普通项目或者集成中间件的项目。
ecology运行时的主要依赖更具项目性质不同而有所差异,如果是信创环境(国产中间件),程序主要依赖的文件有ecology/WEB-INF/classes/*
、ecology/WEB-INF/lib/*
和中间件的lib/*
,非信创环境(如Resin),程序主要依赖的文件有ecology/classbean/*
、ecology/WEB-INF/lib/*
和中间件的lib/*
。
# 搭建准备——了解程序运行的主要结构和依赖
ecology程序包含很多文件,每个文件都有这不同的作用,但是在搭建开发环境时,并非所有的文件都能用得到,如下是ecology中包含的文件和文件夹
上图胡总我们可以看到很多文件和文件夹,但是在我们搭建开发环境时,只有寥寥几个和我们相关,首先是classbean文件夹以及WEB-INF文件夹;
classbean文件夹(classes根目录)
classbean
文件夹下面的所有class文件是我们程序运行的关键所在,所以也是我们搭建开发环境的必要依赖文件,这里涉及到是否是信创环境(国产中间件),如果是信创环境,这个目录下的文件不生效(并非绝对,应为可以在中间件中修改classse
的根路径,一般默认情况下是不生效的),只有是非国产中间件(Resin
)这里的文件才是我们所需要的依赖文件
WEB-INF文件夹
WEB-INF文件夹下面有很多文件是开发环境搭建所需要的,首先是classes
文件夹,它是信创环境的默认classes
根路径,所以如果环境为信创环境,搭建开发环境的依赖就不再是classbean
文件夹,而是WEB-INF/classes
文件夹
除了classes
文件夹之外,还有一个重要的依赖文件夹,即WEB-INF/lib
,此文件夹下的所有jar包都是程序运行的依赖jar包(有些jar包是没有内容的,这些jar包是公司用来覆盖原有客户环境的低版本依赖所创建的空jar包,用来解决依赖版本冲突等问题,这些jar包通常不需要管它)
到这里,我们搭建开发环境的class
依赖文件基本就齐全了,但是除了ecology应用本身的依赖文件意外,程序还依赖了中间件的lib文件,最主要的是servlet
包,这里以Resin
中间件举例,搭建环境时不要忽略掉它的依赖
在WEB-INF
中还有程序运行的关键配置文件目录: prop
这里最为重要的是:weaver.properties
文件,其中包含了链接数据库的配置信息
除了以上主要的搭建环境的依赖和文件之外,还有一些在开发中比较常用到的目录:
ecology/log
:程序运行时的日志默认输出目录
ecology/systemfile
:程序的文件存储目录
ecology/WEB-INF/web.xml
:程序的web.xml
配置文件
ecology/WEB-INF/securityXML
: 程序的安全配置等信息配置
ecology/WEB-INF/securitylog
: 程序运行时安全拦截等的输出路径
# 环境搭建
可查看另外几种搭建方式:E9开发环境搭建IDEA篇.docx
和../二次开发环境搭建.mp4
# 依赖准备
将上述所需要的文件从服务器中下载到本地,也可以将整个ecology目录下载到本地,按需下载需要下载:
对应环境的classes
根目录的所有文件,WEB-INF/lib
下的所有jar包文件或者整个目录,WEB-INF/prop
下的配置文件,可以全部获取或者一下文件(搭建环境进行单元测试时必要的文件,后续可以按需引入):
initCache.properties
interceptsql.properties
isSyncLog4j.properties
weaver.properties
weaver_client_pwd.properties
weaver_enableMultiLangEncoding_blackList_cus.properties
weaver_enableMultiLangEncoding_blackList_standard.properties
weaver_enableMultiLangEncoding_whiteList.properties
weaver_enableMultiLangEncoding_whiteList_new.properties
2
3
4
5
6
7
8
9
除了上述的配置文件外还需要WEB-INF/config/ehcache.xml
文件和WEB-INF/log4jinit.properties
# 搭建环境
这里环境依赖搭建有几种形式,一种是将classes
文件打包成jar包然后当做依赖引入,一种是直接引入class
文件,lib
下依赖的jar包可以通过idea的依赖导入方式进行导入,也可以使用maven的方式引入,看个人喜好。
这里我采用的方式是将class
文件打包成jar包然后当做依赖导入,首先我们需要准备我们的jdk环境(因为ecology的jdk是1.8版本的,所以需要准备1.8的jdk),然后配置好环境变量
进入classes
根路径(非信创classbean
)
打开控制台输入命令
# 将classben下的所有文件打包成jar包 jar包名称可以自定义
jar -cvf e9-classbean.jar ./
2
结束后会在当前目录下生成e9-classbean.jar
文件
这个就是我们所有的classes
根路径下的class
文件依赖
使用java编程工具创建开发项目,更具个人喜好选择对应的工具,这里采用idea
作位举例
此处使用maven来搭建项目,所以我们创建一个maven项目
当前采用最简单的单maven的项目创建,可以更具团队或公司需求创建多maven项目
我们创建完成工程后,会得到这样的一个项目结构
编写代码的方式与普通maven项目一致,此时我们需要导入ecology
的相关依赖,首先创建一个lib
文件夹用于存放对应的依赖信息(通常操作,也可以直接引入本地任何路径下的依赖,无需单独创建),并且将对应的依赖放到lib
文件夹下
导入
classes
对应的依赖将我们刚才生成的jar包导入到
lib
文件夹下,并在pom
文件中添加对应依赖的引入<!-- 导入e9-classbean.jar 包--> <dependency> <groupId>SH_EBU7_DEV1</groupId> <artifactId>e9-dev-demo</artifactId> <scope>system</scope> <systemPath>${pom.basedir}/lib/e9-classbean.jar</systemPath> <version>1.0-SNAPSHOT</version> </dependency>
1
2
3
4
5
6
7
8导入
WEB-INF/lib
下的所有jar包(有些空jar包可以跳过),以及中间件中的lib
下的所有jar包
到这里后有两种导入方式,一种是使用idea的项目Libraries
方式导入
第一种方式
找到项目设置
回到modules查看依赖是否绑定,并且修改jdk版本,如果没有绑定,则需要添加下脚的加号,将依赖添加
点击确定
等待idea索引完成
第二种方式
第二种方式稍微负责一些,我们可以采用maven来引入我们的jar包依赖,但是因为依赖很多,所以相对不好处理,可以效仿classbean
依赖到如的方法来导入依赖,classbean
也可以采用第一种方法来引入。如果使用maven的方式引入,我们则需要编写大量的maven坐标引入本地文件(推荐使用脚本生成或者将jar用maven安装到本地后引入依赖,但也需要编写大量maven坐标)
两种方式根据个人的喜好选择
接下来我们创建一个类来测试依赖是否导入成功
如果能正常到如对应的依赖则表示依赖设置成功
package e9dev.dome.envtest;
import com.alibaba.fastjson.JSON;
import weaver.conn.RecordSet;
import java.util.Collections;
/**
* <h1>环境测试</h1>
* </br>
* <p>create: 2023/12/22 10:54</p>
*
* <p></p>
*
* @author youHong.ai
*/
public class EnvTest {
public static void main(String[] args) {
RecordSet rs = new RecordSet();
JSON.toJSONString(Collections.emptyMap());
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
接下来对配置文件进行导入
我们需要在resources
下创建WEB-INF
目录,并在下面创建config
和prop
文件夹,将文件放到对应的目录中
ecology/WEB-INF/config/ehcache.xml
存放到创建的config
目录下
将对应的prop
存放到创建的prop
文件夹下(也可以全部复制,当然也可以不用复制,保留在原地,然后通过代码配置设置prop的地址,看个人喜好和团队开发时如何协调处置),这里云行时报那个文件找不到则找到对应的文件放入即
ecology/WEB-INF/prop/initCache.properties
ecology/WEB-INF/prop/initDb.properties
ecology/WEB-INF/prop/interceptsql.properties
ecology/WEB-INF/prop/isSyncLog4j.properties
ecology/WEB-INF/prop/weaver.properties
ecology/WEB-INF/prop/weaver_client_pwd.properties
ecology/WEB-INF/prop/weaver_enableMultiLangEncoding_blackList_cus.properties
ecology/WEB-INF/prop/weaver_enableMultiLangEncoding_blackList_standard.properties
ecology/WEB-INF/prop/weaver_enableMultiLangEncoding_whiteList.properties
ecology/WEB-INF/prop/weaver_enableMultiLangEncoding_whiteList_new.properties
2
3
4
5
6
7
8
9
10
将下列文件存放到WEB-INF
中
ecology/WEB-INF/log4jinit.properties
最终效果
环境检测
在test包中新建一个测试文件,用于检测环境是否搭建成功
package e9dev.dome.envtest;
import com.alibaba.fastjson.JSON;
import org.junit.Before;
import weaver.general.GCONST;
import weaver.hrm.User;
/**
* <h1>环境检测</h1>
* </br>
* <p>create: 2023/12/22 11:22</p>
*
* <p></p>
*
* @author youHong.ai
*/
public class E9BaseTest {
public static void main(String[] args) {
// 设置服务名称,这里的名称也可以理解为数据源,默认是ecology
GCONST.setServerName("ecology");
// 设置根路径,这里设置的是服务的路径地址,如果没有吧WEB-INF文件放到项目中,则这里可以填写实际的ecology的路径地址
GCONST.setRootPath("/Users/aoey.oct.22/code/dome/e9-dev-demo/src/main/resources/");
User user = new User(1);
System.out.println(JSON.toJSONString(user));
}
/**
* ************************************************************
* <h2>针对后期使用单元测试,我们可以将路径地址写到before中这样就不用每次都重新设置和编写了</h2>
* <i>2023/12/22 11:37</i>
*
* @author youHong.ai
* ************************************************************
*/
@Before
public void before(){
// 设置服务名称,这里的名称也可以理解为数据源,默认是ecology
GCONST.setServerName("ecology");
// 设置根路径,这里设置的是服务的路径地址,如果没有吧WEB-INF文件放到项目中,则这里可以填写实际的ecology的路径地址
GCONST.setRootPath("/Users/aoey.oct.22/code/dome/e9-dev-demo/src/main/resources/");
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
程序运行结果当前user为系统管理员则表示环境搭建成功,这里推荐使用debug查看user,控制台日志输出太多,不容易找到