# 开发环境搭建

本文作者:youhong.ai (opens new window)

公司: 泛微 (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中包含的文件和文件夹

image-20231221173840834

上图胡总我们可以看到很多文件和文件夹,但是在我们搭建开发环境时,只有寥寥几个和我们相关,首先是classbean文件夹以及WEB-INF文件夹;

classbean文件夹(classes根目录)

classbean文件夹下面的所有class文件是我们程序运行的关键所在,所以也是我们搭建开发环境的必要依赖文件,这里涉及到是否是信创环境(国产中间件),如果是信创环境,这个目录下的文件不生效(并非绝对,应为可以在中间件中修改classse的根路径,一般默认情况下是不生效的),只有是非国产中间件(Resin)这里的文件才是我们所需要的依赖文件

image-20231221174007828

WEB-INF文件夹

WEB-INF文件夹下面有很多文件是开发环境搭建所需要的,首先是classes文件夹,它是信创环境的默认classes根路径,所以如果环境为信创环境,搭建开发环境的依赖就不再是classbean文件夹,而是WEB-INF/classes文件夹

image-20231221174711660

除了classes文件夹之外,还有一个重要的依赖文件夹,即WEB-INF/lib,此文件夹下的所有jar包都是程序运行的依赖jar包(有些jar包是没有内容的,这些jar包是公司用来覆盖原有客户环境的低版本依赖所创建的空jar包,用来解决依赖版本冲突等问题,这些jar包通常不需要管它)

image-20231221174948668

到这里,我们搭建开发环境的class依赖文件基本就齐全了,但是除了ecology应用本身的依赖文件意外,程序还依赖了中间件的lib文件,最主要的是servlet包,这里以Resin中间件举例,搭建环境时不要忽略掉它的依赖

image-20231221175212593

WEB-INF中还有程序运行的关键配置文件目录: prop

image-20231221175349144

这里最为重要的是: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
1
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),然后配置好环境变量

image-20231222100124735

进入classes根路径(非信创classbean

image-20231222100848995

打开控制台输入命令

# 将classben下的所有文件打包成jar包 jar包名称可以自定义
jar -cvf e9-classbean.jar ./
1
2

image-20231222101014906

image-20231222101114612

结束后会在当前目录下生成e9-classbean.jar文件

image-20231222101206283

这个就是我们所有的classes根路径下的class文件依赖

使用java编程工具创建开发项目,更具个人喜好选择对应的工具,这里采用idea作位举例

此处使用maven来搭建项目,所以我们创建一个maven项目

image-20231222101719142

当前采用最简单的单maven的项目创建,可以更具团队或公司需求创建多maven项目

image-20231222102031967

我们创建完成工程后,会得到这样的一个项目结构

image-20231222102142350

编写代码的方式与普通maven项目一致,此时我们需要导入ecology的相关依赖,首先创建一个lib文件夹用于存放对应的依赖信息(通常操作,也可以直接引入本地任何路径下的依赖,无需单独创建),并且将对应的依赖放到lib文件夹下

  1. 导入classes对应的依赖

    将我们刚才生成的jar包导入到lib文件夹下,并在pom文件中添加对应依赖的引入

    image-20231222102655379

    <!--       导入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
  2. 导入WEB-INF/lib下的所有jar包(有些空jar包可以跳过),以及中间件中的lib下的所有jar包

image-20231222102939866

到这里后有两种导入方式,一种是使用idea的项目Libraries方式导入

第一种方式

找到项目设置

image-20231222103304141

image-20231222105824234

image-20231222103233047

image-20231222105854222

回到modules查看依赖是否绑定,并且修改jdk版本,如果没有绑定,则需要添加下脚的加号,将依赖添加

image-20231222105946075

image-20231222110040454

image-20231222110057291

点击确定

等待idea索引完成

第二种方式

第二种方式稍微负责一些,我们可以采用maven来引入我们的jar包依赖,但是因为依赖很多,所以相对不好处理,可以效仿classbean依赖到如的方法来导入依赖,classbean也可以采用第一种方法来引入。如果使用maven的方式引入,我们则需要编写大量的maven坐标引入本地文件(推荐使用脚本生成或者将jar用maven安装到本地后引入依赖,但也需要编写大量maven坐标)

image-20231222105219324

两种方式根据个人的喜好选择

接下来我们创建一个类来测试依赖是否导入成功

image-20231222105346324

如果能正常到如对应的依赖则表示依赖设置成功

image-20231222110823074

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());
	}
}

1
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目录,并在下面创建configprop文件夹,将文件放到对应的目录中

ecology/WEB-INF/config/ehcache.xml
1

存放到创建的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
1
2
3
4
5
6
7
8
9
10

将下列文件存放到WEB-INF

ecology/WEB-INF/log4jinit.properties
1

最终效果

image-20231222113102832

环境检测

在test包中新建一个测试文件,用于检测环境是否搭建成功

image-20231222112320732

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/");
	}
}

1
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,控制台日志输出太多,不容易找到

image-20231222113226216

image-20231222113217075

二开文档   |