简介:此方案结合了 maven 私服以及 VCS(推荐GitLab),可以实现脱离导入 Ecology 也能进行代码开发、调试以及团队协作开发,此方案免去了配置上的麻烦以及 Ecology 在 IDEA 内部的编辑、调试,可以减免现有团队开发模式环境配置的复杂度,提升团队开发的便捷性,简化总部与机构之间的开发沟通
@Author : Jaylan Zhou
1.搭建环境
- Gitlab:作为VCS仓库,按机构及部门进行分组,每个二开项目作为Gitlab的一个Project
- Maven [1]私服:作为环境管理的核心,按照每个 KB 版本,将 EC 的 classbean 打成 jar 包放入 maven 私服,同时在maven中央仓库找到此 kb 版本 lib 中引用的 jar 包,将打入私服的 classbean jar 包与 lib 中的 jar 包依赖信息做成pom工程,示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.weaver</groupId>
<artifactId>KB...._pom</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>KB...._pom</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- 这里是classbean在maven私服上的jar包 -->
<dependency>
<groupId>com.weaver</groupId>
<artifactId>classbean</artifactId>
<version>KB.....</version>
</dependency>
<!-- 这里是lib中引用的jar包依赖 -->
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
</dependency>
...
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
之后,将此pom工程打入maven私服,客户可通过在maven项目中直接引入此pom工程,无需导入系统
2.客户具体操作
1.安装Maven
-
2.配置 Maven 私服,配置地址${maven根目录}/conf/setting.xml,修改信息如下:
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><!--从以下开始修改 --> <!--Maven M2仓库地址 --> <localRepository>/Users/jaylanzhou/Documents/m2</localRepository> <pluginGroups> </pluginGroups> <proxies> </proxies> <!--私服验证信息配置开始 --> <servers> <server> <id>weaver-ebu2</id> <!--服务器id,下同 --> <username>JaylanZhou</username><!--私服用户名,下同 --> <password>bjebu2zhoujinliang</password><!--私服密码,下同 --> </server> <!-- 以下配置为maven私服维护者配置 --> <!-- 发布Releases版的账号,ID要与distributionManagement中的Releases ID一致 --> <server> <id>nexus-releases</id> <username>admin</username> <password>bj_ebu220190507</password> </server> <!-- 发布snapshot版的账号,ID要与distributionManagement中的snapshot ID一致 --> <server> <id>nexus-snapshot</id> <username>admin</username> <password>bj_ebu220190507</password> </server> <!-- maven私服维护者配置结束 --> </servers> <!--私服验证信息配置结束 --> <!--仓库节点信息配置开始 --> <mirrors> <!--私服节点信息配置 --> <mirror> <id>weaver-ebu2</id> <name>weaver-ebu2</name> <mirrorOf>weaver-ebu2</mirrorOf> <url>http://62.234.60.223:8081/repository/weaver-ebu2/</url> </mirror> <!--阿里云服节点信息配置 --> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> <!--私服验证信息配置结束 --> <profiles> <profile> <id>weaver-ebu2</id> <repositories> <repository> <id>weaver-ebu2</id> <name>weaver-ebu2</name> <url>http://62.234.60.223:8081/repository/weaver-ebu2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>weaver-ebu2</activeProfile> </activeProfiles> </settings>
-
3.在IDEA中新建项目,具体操作步骤如下
- 在 Project 新建 Maven module,选择maven-archetype-quickstart
- 新建项目后,在 Maven 的 pom.xml 文件中引入客户对应版本的私服依赖,
4.开始开发
-
5.部署:
- 编译代码
- 将编译后的 class 文件,放到 Ecology 根目录的 classbean 中,默认编译地址为 ${项目根目录}/target/classess
- 将单独引用的 jar 包从 m2 仓库中提取出来,放到 WEB-INF/lib 下
- 启动服务
-
6.VCS 配置
- 将代码上传到总部分配的 gitlab 仓库的本人对应分支中,实现团队协作开发
3.实现方案
1.总部需要搭建一个 Maven 私服以及 Gitlab 的服务器,需要专人维护,按照各级职责,将权限以及部门、组划分好
2.新开发入职时,为其分配 gitlab 以及 Maven 私服账号,Gitlab 账号可通过二次开发,在总部 EC 中以节点后接口的形式创建账号,Maven 私服目前是手动创建账号
-
3.Maven 私服封装 KB 版本操作
- 将不同版本的 classbean 封装成 jar 包,上传到 maven 私服中
- 新建 pom 工程,根据 KB 的 lib 中引用的 jar 包,在 maven 中央仓库中寻找其依赖配置,如果找不到配置,则将这个 jar 包上传到 maven 私服中
- 修改 pom 工程的依赖,将 classbean 的 jar 包在私服的依赖配置,中央仓库找不到依赖的 jar 包在私服中的依赖配置,找到依赖的 jar 包在中央仓库的配置,放入 pom 工程的 pom.xml 中,具体操作请详见 1.搭建环境 中的配置
- 确认无误后,将 pom 工程部署到 maven 私服,供客户调用
4.客户根据 2.具体操作 中的步骤,建立 maven 项目,引入总部配置的 pom 工程,即可无需导入源码,直接进行开发
-
5.客户在开发过程中,需要将代码放入 Gitlab 对应的仓库中,使用此仓库进行团队协作开发,在申请上海协助时,给予相关协助人员的项目操作权限,在修改完成后,将对应的修改 push 到仓库中,客户进行 pull 操作后使用即可
如果碰到修改源码的情况,请在 src 目录下按照源码路径建包并修改即可
6.项目开发完成后,以 gitlab 中的项目主干为备案依据
4.变动计划
- 1.老项目迁移:
- 须与相关人员进行对接,将 SVN 仓库中的项目数据迁移至 Gitlab 中,项目全部作为主干
- 现有开发项目迁移成 Maven 项目,可新建 Maven 项目,将原项目 src 中的 java 代码迁移至 Maven 项目中的 src 目录下,环境没问题后重新放到 gitlab 仓库中
5.客户Q&A
-
Q:我现在有一个项目,除了 classbean 和 lib 中的内容,还需要引用别的jar包,maven私服中有对应的jar包吗?
A:在 maven 的 setting.xml 配置文件中,可以配置多个服务器节点,配置中给出了阿里云服的地址,云服中包含了大部分 maven 中央仓库的 jar 包,并且下载速度较中央仓库快了很多,建议配置一下
-
Q:那我单独引入的,在 lib 中没有的 jar 包,该如何部署到客户环境中并且生效?
A:在 m2 仓库中,根据 groupId + artifactId + version 找到对应的 jar 包,放入 Ecology 的 WEB-INF/lib 目录下即可,示例:
<dependencies> <!-- 此 jar 包的地址为 ${m2仓库根目录}/com/weaver/classbean/KB1234567 --> <dependency> <groupId>com.weaver</groupId> <artifactId>classbean</artifactId> <version>KB1234567</version> </dependency> ... </dependencies>
-
Q:编译后的代码地址在哪?我该如何打包到客户环境?
A:默认编译地址为 ${项目根目录}/target/classess,可以修改,将 class 文件复制到 Ecology 根目录/classbean 下即可,或者将编译地址改到 classbean 下
-
Q:客户 KB 的 lib 中引用的某 jar 包版本,比我需要的版本低,我需要高版本的功能,该如何操作?
A:我们会针对每一个 KB 版本,携带 lib 和 不携带 lib 的版本,可根据需要引入,如果引入携带 lib 的版本,需要排除其中的 jar 包的话,可使用<exclusion>,示例如下:
<!-- 排除 fastjson 这个 jar 包 --> <dependency> <groupId>com.weaver</groupId> <artifactId>classbean</artifactId> <version>KB1234567</version> <exclusions> <exclusion> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </exclusion> </exclusions> </dependency>
-
如果是IDEA 2019以上版本,推荐使用3.6.2以下版本的Maven,否则可能会有问题 ↩