Browse Source

fix command

AE86 5 years ago
parent
commit
505949041e

+ 28 - 3
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/AbstractChecker.java

@@ -1,6 +1,7 @@
 package org.dbsyncer.biz.checker;
 
 import org.apache.commons.lang.StringUtils;
+import org.dbsyncer.biz.BizException;
 import org.dbsyncer.biz.PluginService;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.JsonUtil;
@@ -11,9 +12,14 @@ import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.plugin.config.Plugin;
 import org.dbsyncer.storage.SnowflakeIdWorker;
 import org.dbsyncer.storage.constant.ConfigConstant;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.Assert;
 
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -62,14 +68,14 @@ public abstract class AbstractChecker implements Checker {
         // 过滤条件
         String filterJson = params.get("filter");
         if (StringUtils.isNotBlank(filterJson)) {
-            List<Filter> filter = JsonUtil.jsonToObj(filterJson, List.class);
-            model.setFilter(filter);
+            List<Filter> list = jsonToList(filterJson, Filter.class);
+            model.setFilter(list);
         }
 
         // 转换配置
         String convertJson = params.get("convert");
         if (StringUtils.isNotBlank(convertJson)) {
-            List<Convert> convert = JsonUtil.jsonToObj(convertJson, List.class);
+            List<Convert> convert = jsonToList(convertJson, Convert.class);
             model.setConvert(convert);
         }
 
@@ -90,4 +96,23 @@ public abstract class AbstractChecker implements Checker {
         model.setPlugin(plugin);
     }
 
+    private <T> List<T> jsonToList(String json, Class<T> valueType){
+        try {
+            JSONArray array = new JSONArray(json);
+            if(null != array){
+                List<T> list = new ArrayList<>();
+                int length = array.length();
+                for (int i = 0; i < length; i++) {
+                    JSONObject obj = array.getJSONObject(i);
+                    T t = JsonUtil.jsonToObj(obj.toString(), valueType);
+                    list.add(t);
+                }
+                return list;
+            }
+        } catch (JSONException e) {
+            throw new BizException(String.format("解析高级配置参数异常:%s", json));
+        }
+        return Collections.EMPTY_LIST;
+    }
+
 }

+ 58 - 15
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/tablegroup/TableGroupChecker.java

@@ -22,10 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author AE86
@@ -55,6 +52,7 @@ public class TableGroupChecker extends AbstractChecker {
         // 检查是否存在重复映射关系
         checkRepeatedTable(mappingId, sourceTable, targetTable);
 
+        // 获取连接器信息
         TableGroup tableGroup = new TableGroup();
         tableGroup.setName(ConfigConstant.TABLE_GROUP);
         tableGroup.setType(ConfigConstant.TABLE_GROUP);
@@ -62,11 +60,15 @@ public class TableGroupChecker extends AbstractChecker {
         tableGroup.setSourceTable(getTable(mapping.getSourceConnectorId(), sourceTable));
         tableGroup.setTargetTable(getTable(mapping.getTargetConnectorId(), targetTable));
 
+        // 修改基本配置
+        this.modifyConfigModel(tableGroup, params);
+
+        // 匹配相似字段
+        mergeFieldMapping(tableGroup);
+
         // 生成command
         setCommand(mapping, tableGroup);
 
-        // 修改基本配置
-        this.modifyConfigModel(tableGroup, params);
         return tableGroup;
     }
 
@@ -77,23 +79,23 @@ public class TableGroupChecker extends AbstractChecker {
         String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
         TableGroup tableGroup = manager.getTableGroup(id);
         Assert.notNull(tableGroup, "Can not find tableGroup.");
+        Mapping mapping = manager.getMapping(tableGroup.getMappingId());
+        Assert.notNull(mapping, "mapping can not be null.");
+        String fieldMappingJson = params.get("fieldMapping");
+        Assert.hasText(fieldMappingJson, "TableGroupChecker check params fieldMapping is empty");
 
         // 修改基本配置
         this.modifyConfigModel(tableGroup, params);
 
         // 字段映射关系
-        String fieldMappingJson = params.get("fieldMapping");
-        Assert.hasText(fieldMappingJson, "TableGroupChecker check params fieldMapping is empty");
         setFieldMapping(tableGroup, fieldMappingJson);
 
-        // 生成command
-        Mapping mapping = manager.getMapping(tableGroup.getMappingId());
-        Assert.notNull(mapping, "mapping can not be null.");
-        setCommand(mapping, tableGroup);
-
         // 修改高级配置:过滤条件/转换配置/插件配置
         this.modifySuperConfigModel(tableGroup, params);
 
+        // 生成command
+        setCommand(mapping, tableGroup);
+
         return tableGroup;
     }
 
@@ -118,6 +120,39 @@ public class TableGroupChecker extends AbstractChecker {
         }
     }
 
+    private void mergeFieldMapping(TableGroup tableGroup) {
+        List<Field> sCol = tableGroup.getSourceTable().getColumn();
+        List<Field> tCol = tableGroup.getTargetTable().getColumn();
+        if (CollectionUtils.isEmpty(sCol) || CollectionUtils.isEmpty(tCol)) {
+            return;
+        }
+
+        // Set集合去重
+        Map<String, Field> m1 = new HashMap<>();
+        Map<String, Field> m2 = new HashMap<>();
+        List<String> k1 = new LinkedList<>();
+        List<String> k2 = new LinkedList<>();
+        shuffleColumn(sCol, k1, m1);
+        shuffleColumn(tCol, k2, m2);
+        k1.retainAll(k2);
+
+        // 有相似字段
+        if (!CollectionUtils.isEmpty(k1)) {
+            List<FieldMapping> fields = new ArrayList<>();
+            k1.forEach(k -> fields.add(new FieldMapping(m1.get(k), m2.get(k))));
+            tableGroup.setFieldMapping(fields);
+        }
+    }
+
+    private void shuffleColumn(List<Field> col, List<String> key, Map<String, Field> map) {
+        col.forEach(f -> {
+            if (!key.contains(f.getName())) {
+                key.add(f.getName());
+                map.put(f.getName(), f);
+            }
+        });
+    }
+
     /**
      * 解析映射关系
      *
@@ -128,7 +163,7 @@ public class TableGroupChecker extends AbstractChecker {
     private void setFieldMapping(TableGroup tableGroup, String json) {
         try {
             JSONArray mapping = new JSONArray(json);
-            if(null == mapping){
+            if (null == mapping) {
                 throw new BizException("映射关系不能为空");
             }
 
@@ -160,7 +195,15 @@ public class TableGroupChecker extends AbstractChecker {
     }
 
     private void setCommand(Mapping mapping, TableGroup tableGroup) {
-        Map<String, String> command = manager.getCommand(mapping.getSourceConnectorId(), mapping.getTargetConnectorId(), tableGroup);
+        TableGroup group = new TableGroup();
+        group.setFieldMapping(tableGroup.getFieldMapping());
+        group.setSourceTable(tableGroup.getSourceTable());
+        group.setTargetTable(tableGroup.getTargetTable());
+        // 默认使用全局的过滤条件
+        if (CollectionUtils.isEmpty(tableGroup.getFilter())) {
+            group.setFilter(mapping.getFilter());
+        }
+        Map<String, String> command = manager.getCommand(mapping.getSourceConnectorId(), mapping.getTargetConnectorId(), group);
         tableGroup.setCommand(command);
     }
 }

+ 0 - 36
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/TableGroupServiceImpl.java

@@ -36,9 +36,6 @@ public class TableGroupServiceImpl implements TableGroupService {
     @Override
     public String add(Map<String, String> params) {
         TableGroup model = (TableGroup) tableGroupChecker.checkAddConfigModel(params);
-        // 匹配相似字段
-        mergeTableGroupColumn(model);
-
         String id = manager.addTableGroup(model);
 
         // 合并驱动公共字段
@@ -107,37 +104,4 @@ public class TableGroupServiceImpl implements TableGroupService {
         return list;
     }
 
-    private void mergeTableGroupColumn(TableGroup tableGroup) {
-        List<Field> sCol = tableGroup.getSourceTable().getColumn();
-        List<Field> tCol = tableGroup.getTargetTable().getColumn();
-        if (CollectionUtils.isEmpty(sCol) || CollectionUtils.isEmpty(tCol)) {
-            return;
-        }
-
-        // Set集合去重
-        Map<String, Field> m1 = new HashMap<>();
-        Map<String, Field> m2 = new HashMap<>();
-        List<String> k1 = new LinkedList<>();
-        List<String> k2 = new LinkedList<>();
-        shuffleColumn(sCol, k1, m1);
-        shuffleColumn(tCol, k2, m2);
-        k1.retainAll(k2);
-
-        // 有相似字段
-        if (!CollectionUtils.isEmpty(k1)) {
-            List<FieldMapping> fields = new ArrayList<>();
-            k1.forEach(k -> fields.add(new FieldMapping(m1.get(k), m2.get(k))));
-            tableGroup.setFieldMapping(fields);
-        }
-    }
-
-    private void shuffleColumn(List<Field> col, List<String> key, Map<String, Field> map) {
-        col.forEach(f -> {
-            if (!key.contains(f.getName())) {
-                key.add(f.getName());
-                map.put(f.getName(), f);
-            }
-        });
-    }
-
 }

+ 6 - 3
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/AbstractDatabaseConnector.java

@@ -230,9 +230,12 @@ public abstract class AbstractDatabaseConnector implements Database {
 
         // 拼接或者SQL
         String orSql = getFilterSql(OperationEnum.OR.getName(), filter);
-        // 如果Or条件和Add条件都存在
-        if (StringUtils.isNotBlank(orSql) && StringUtils.isNotBlank(addSql)) {
-            condition.append(" OR ").append(orSql);
+        if (StringUtils.isNotBlank(orSql)) {
+            condition.append(orSql);
+            // 如果Or条件和Add条件都存在
+            if (StringUtils.isNotBlank(addSql)) {
+                condition.append(" OR ").append(orSql);
+            }
         }
 
         // 如果有条件加上 WHERE

+ 18 - 9
dbsyncer-parser/src/main/java/org/dbsyncer/parser/ParserFactory.java

@@ -1,18 +1,17 @@
 package org.dbsyncer.parser;
 
 import org.dbsyncer.cache.CacheService;
+import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.JsonUtil;
+import org.dbsyncer.connector.config.*;
 import org.dbsyncer.connector.template.CommandTemplate;
 import org.dbsyncer.connector.ConnectorFactory;
-import org.dbsyncer.connector.config.ConnectorConfig;
-import org.dbsyncer.connector.config.Filter;
-import org.dbsyncer.connector.config.MetaInfo;
-import org.dbsyncer.connector.config.Table;
 import org.dbsyncer.connector.enums.ConnectorEnum;
 import org.dbsyncer.connector.enums.FilterEnum;
 import org.dbsyncer.connector.enums.OperationEnum;
 import org.dbsyncer.parser.enums.ConvertEnum;
 import org.dbsyncer.parser.model.Connector;
+import org.dbsyncer.parser.model.FieldMapping;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.storage.SnowflakeIdWorker;
@@ -24,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -65,13 +65,22 @@ public class ParserFactory implements Parser {
 
     @Override
     public Map<String, String> getCommand(String sourceConnectorId, String targetConnectorId, TableGroup tableGroup) {
+        List<FieldMapping> fieldMapping = tableGroup.getFieldMapping();
+        if(CollectionUtils.isEmpty(fieldMapping)){
+            return null;
+        }
         String sType = getConnectorConfig(sourceConnectorId).getConnectorType();
         String tType = getConnectorConfig(targetConnectorId).getConnectorType();
-        Table sourceTable = tableGroup.getSourceTable();
-        Table targetTable = tableGroup.getTargetTable();
-        List<Filter> filter = tableGroup.getFilter();
-        final CommandTemplate sourceCmdTemplate = new CommandTemplate(sType, sourceTable, filter);
-        final CommandTemplate targetCmdTemplate = new CommandTemplate(tType, targetTable);
+        String sTableName = tableGroup.getSourceTable().getName();
+        String tTableName = tableGroup.getTargetTable().getName();
+        Table sTable = new Table().setName(sTableName).setColumn(new ArrayList<>());
+        Table tTable = new Table().setName(tTableName).setColumn(new ArrayList<>());
+        fieldMapping.forEach(m ->{
+            sTable.getColumn().add(m.getSource());
+            tTable.getColumn().add(m.getTarget());
+        });
+        final CommandTemplate sourceCmdTemplate = new CommandTemplate(sType, sTable, tableGroup.getFilter());
+        final CommandTemplate targetCmdTemplate = new CommandTemplate(tType, tTable);
         // 获取连接器同步参数
         Map<String, String> command = connectorFactory.getCommand(sourceCmdTemplate, targetCmdTemplate);
         return command;

+ 2 - 3
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/upload/UploadController.java

@@ -3,7 +3,6 @@ package org.dbsyncer.web.controller.upload;
 import org.dbsyncer.biz.vo.RestResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -24,7 +23,7 @@ public class UploadController {
         return "upload/upload";
     }
 
-    @PreAuthorize("hasAuthority('ROLE_')")
+    //@PreAuthorize("hasAuthority('ROLE_')")
     @RequestMapping(value = "/upload")
     @ResponseBody
     public RestResult upload(HttpServletRequest request, @RequestParam("file") MultipartFile[] files) {
@@ -45,4 +44,4 @@ public class UploadController {
         }
     }
 
-}
+}

+ 137 - 169
pom.xml

@@ -1,173 +1,141 @@
 <?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"
+<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">
+    <parent>
+        <artifactId>dbsyncer</artifactId>
+        <groupId>org.ghi</groupId>
+        <version>1.0.0-Alpha</version>
+    </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <groupId>org.ghi</groupId>
-    <artifactId>dbsyncer</artifactId>
-    <version>1.0.0-Alpha</version>
-    <packaging>pom</packaging>
-    <name>dbsyncer</name>
-    <url>https://gitee.com/ghi/dbsyncer</url>
-
-    <!-- 管理的子模块(14个) -->
-    <modules>
-        <module>dbsyncer-biz</module>
-        <module>dbsyncer-cache</module>
-        <module>dbsyncer-cluster</module>
-        <module>dbsyncer-common</module>
-        <module>dbsyncer-connector</module>
-        <module>dbsyncer-listener</module>
-        <module>dbsyncer-manager</module>
-        <module>dbsyncer-message</module>
-        <module>dbsyncer-monitor</module>
-        <module>dbsyncer-parser</module>
-        <module>dbsyncer-plugin</module>
-        <module>dbsyncer-schedule</module>
-        <module>dbsyncer-storage</module>
-        <module>dbsyncer-web</module>
-    </modules>
-
-    <!-- 全局参数版本 -->
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <!-- maven 编译资源 版本 -->
-        <maven.compiler.source>1.8</maven.compiler.source>
-        <!-- maven 编译目标版本  -->
-        <maven.compiler.target>1.8</maven.compiler.target>
-        <!-- maven 编译插件版本 -->
-        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
-        <java.version>1.8</java.version>
-        <spring-boot.version>2.1.7.RELEASE</spring-boot.version>
-        <commons-lang.version>2.6</commons-lang.version>
-        <commons-io.version>2.5</commons-io.version>
-        <commons-dbcp.version>1.4</commons-dbcp.version>
-        <commons-pool.version>1.6</commons-pool.version>
-        <lucene.version>7.6.0</lucene.version>
-        <oracle.version>10.2.0.4.0</oracle.version>
-        <mysql.version>5.1.40</mysql.version>
-        <sqljdbc.version>1.2</sqljdbc.version>
-        <json.version>20090211</json.version>
-        <junit.version>4.12</junit.version>
-    </properties>
-
-    <!-- 镜像仓库地址 -->
-    <repositories>
-        <repository>
-            <id>ali</id>
-            <name>ali Repository</name>
-            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
-
-    <!-- 统一管理第三方依赖jar -->
-    <dependencyManagement>
-        <dependencies>
-            <!-- Import dependency management from Spring Boot -->
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-dependencies</artifactId>
-                <version>${spring-boot.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-
-            <!-- Apache Commons 字符串工具类 -->
-            <dependency>
-                <groupId>commons-lang</groupId>
-                <artifactId>commons-lang</artifactId>
-                <version>${commons-lang.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>commons-io</groupId>
-                <artifactId>commons-io</artifactId>
-                <version>${commons-io.version}</version>
-            </dependency>
-
-            <!-- json -->
-            <dependency>
-                <groupId>org.json</groupId>
-                <artifactId>json</artifactId>
-                <version>${json.version}</version>
-            </dependency>
-
-            <!-- 全文检索 -->
-            <dependency>
-                <groupId>org.apache.lucene</groupId>
-                <artifactId>lucene-core</artifactId>
-                <version>${lucene.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.lucene</groupId>
-                <artifactId>lucene-queryparser</artifactId>
-                <version>${lucene.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.lucene</groupId>
-                <artifactId>lucene-analyzers-common</artifactId>
-                <version>${lucene.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.lucene</groupId>
-                <artifactId>lucene-highlighter</artifactId>
-                <version>${lucene.version}</version>
-            </dependency>
-            <!-- smartcn中文分词器 -->
-            <dependency>
-                <groupId>org.apache.lucene</groupId>
-                <artifactId>lucene-analyzers-smartcn</artifactId>
-                <version>${lucene.version}</version>
-            </dependency>
-
-            <!-- 连接池 -->
-            <dependency>
-                <groupId>commons-pool</groupId>
-                <artifactId>commons-pool</artifactId>
-                <version>${commons-pool.version}</version>
-            </dependency>
-            <!-- 数据源 -->
-            <dependency>
-                <groupId>commons-dbcp</groupId>
-                <artifactId>commons-dbcp</artifactId>
-                <version>${commons-dbcp.version}</version>
-            </dependency>
-
-            <!-- mysql-driver -->
-            <dependency>
-                <groupId>mysql</groupId>
-                <artifactId>mysql-connector-java</artifactId>
-                <version>${mysql.version}</version>
-            </dependency>
-
-            <!-- mvn install:install-file -DgroupId=microsoft -DartifactId=sqljdbc
-                -Dversion=1.2 -Dpackaging=jar -Dfile=D:\sqljdbc-1.2.jar -->
-            <!-- sqlserver-driver -->
-            <dependency>
-                <groupId>microsoft</groupId>
-                <artifactId>sqljdbc</artifactId>
-                <version>${sqljdbc.version}</version>
-            </dependency>
-
-            <!-- mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14
-                -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=D:\ojdbc14-10.2.0.4.0.jar -->
-            <!-- oracle-driver -->
-            <dependency>
-                <groupId>com.oracle</groupId>
-                <artifactId>ojdbc14</artifactId>
-                <version>${oracle.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>junit</groupId>
-                <artifactId>junit</artifactId>
-                <version>${junit.version}</version>
-            </dependency>
-
-        </dependencies>
-    </dependencyManagement>
-
-</project>
+    <artifactId>dbsyncer-web</artifactId>
+
+    <dependencies>
+        <!-- Biz 业务层 -->
+        <dependency>
+            <groupId>org.ghi</groupId>
+            <artifactId>dbsyncer-biz</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+
+        <!-- Web 容器,默认使用Tomcat, 当前使用Jetty容器,故排除-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-tomcat</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-logging</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!-- Jetty Web容器-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-jetty</artifactId>
+        </dependency>
+
+        <!-- Thymeleaf 渲染引擎-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
+
+        <!-- spring security依赖 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+
+        <!-- Websocket -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.15</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.15</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml-schemas</artifactId>
+            <version>3.15</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+            <version>1.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>1.3.2</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <!-- 指定打包名称 -->
+        <finalName>${project.parent.artifactId}-${project.parent.version}</finalName>
+
+        <plugins>
+            <!-- compiler插件参数设置,指定编码 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <encoding>utf-8</encoding>
+                </configuration>
+            </plugin>
+
+            <!-- 负责将应用程序打包成可执行的jar文件 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>application.properties</exclude>
+                        <exclude>jmxremote.*</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+
+            <!-- 负责将整个项目按照自定义的目录结构打成最终的压缩包,方便实际部署 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <configuration>
+                    <descriptors>
+                        <descriptor>src/main/assembly/assembly-zip.xml</descriptor>
+                    </descriptors>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+        </plugins>
+    </build>
+</project>