# ymate-maven-extension
**Repository Path**: suninformation/ymate-maven-extension
## Basic Information
- **Project Name**: ymate-maven-extension
- **Description**: 帮助您快速搭建基于YMP框架的各种Java工程结构的Maven扩展工具。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: http://www.ymate.net/
- **GVP Project**: No
## Statistics
- **Stars**: 33
- **Forks**: 11
- **Created**: 2015-10-19
- **Last Updated**: 2023-05-11
## Categories & Tags
**Categories**: maven-plugin
**Tags**: None
## README
### YMP-Maven-Extension(YMP Maven扩展工具)
帮助您快速搭建基于[YMP框架](https://gitee.com/suninformation/ymate-platform-v2)的各种Java工程结构的Maven扩展工具集合,主要包括`项目模板`和`Maven插件命令`两部分。
> YMP框架项目地址:[https://gitee.com/suninformation/ymate-platform-v2](https://gitee.com/suninformation/ymate-platform-v2)
#### 1、项目模板
目前提供以下5种项目模板:
- `ymate-archetype-quickstart (quickstart)`:标准Java工程,已集成YMP依赖;
- `ymate-archetype-webapp (webapp)`:JavaWeb工程,已集成WebMVC框架相关依赖和完整的参数配置;
- `ymate-archetype-module (module)`:YMP模块工程,提供Demo示例及JUint测试代码;
- `ymate-archetype-serv (serv)`:YMP服务工程,分别提供TCP、UDP客户端和服务端示例程序及相关配置;
- `ymate-archetype-microservice (microservice)`:YMP微服务多模块Maven工程;
> 查看使用文档:[通过项目模板自动生成Java工程](https://gitee.com/suninformation/ymate-platform-v2/wikis/pages?title=Quickstart_New&parent=)
#### 2、Maven插件命令
- 在`pom.xml`文件中添加插件配置(**必须**):
```
net.ymate.maven.plugins
ymate-maven-plugin
1.0-SNAPSHOT
```
- 执行命令格式:
```
mvn ymate: -D= -D=
```
> 注:请在`pom.xml`文件所在路径下执行;
- 命令列表:
|命令|说明|
|---|---|
|`module`|模块代码生成器|
|`controller`|控制器类生成器|
|`mapping`|控制器请求方法生成器|
|`interceptor`|拦截器类生成器|
|`validator`|验证器类生成器|
|`repository`|存储器类生成器|
|`service`|服务层类生成器|
|`config`|配置类生成器|
|`enpasswd`|字符串加密|
|`depasswd`|字符串解密|
|`tomcat`|Tomcat服务配置生成器|
|`entity`|数据实体代码生成器|
|`crud`|CRUD代码生成器|
|`dbquery`|数据库SQL查询|
|`init`|初始化基于YMP框架工程所需的各类配置文件及必要的目录结构|
|`configuration`|配置体系目录结构生成器|
#### 2.1 插件命令详解
##### 2.1.1 `module`:模块代码生成器
> 用于生成基于`IModule`接口的模块代码实现(完全替代`ymate-archetype-module (module)`模板);
- 参数列表:
|参数名称|必须|说明|
|---|---|---|
|name|是|模块名称|
|package|否|模块包名,默认值:`${project.groupId}.module`|
- 命令示例:
> 创建名称为`Demo`的模块;
执行命令:
```
mvn ymate:module -Dname=Demo
```
控制台输出:
```
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building ympDemo 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- ymate-maven-plugin:1.0-SNAPSHOT:module (default-cli) @ ympDemo ---
[INFO] Output file: /Users/.../ympDemo/src/main/java/net/ymate/demo/module/IDemo.java
[INFO] Output file: /Users/.../ympDemo/src/main/java/net/ymate/demo/module/Demo.java
[INFO] Output file: /Users/.../ympDemo/src/main/java/net/ymate/demo/module/IDemoModuleCfg.java
[INFO] Output file: /Users/.../ympDemo/src/main/java/net/ymate/demo/module/impl/DefaultModuleCfg.java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.504s
[INFO] Finished at: Tue Oct 31 17:12:56 CST 2017
[INFO] Final Memory: 9M/245M
[INFO] ------------------------------------------------------------------------
```
##### 2.1.2 `controller`:控制器类生成器
> 用于生成适用于WebMVC模块的控制器类代码;
- 参数列表:
|参数名称|必须|说明|
|---|---|---|
|name|是|控制器名称|
|package|否|控制器包名,默认值:`${project.groupId}.controller`|
|suffix|否|控制器类名后缀,默认值:`Controller`|
|singleton|否|控制器是否为单例,默认值:`true`|
|transaction|否|是否添加事务注解,默认值:`false`|
|mapping|否|控制器请求根路径,默认值:`空`|
|mapping.method|否|控制器请求方式,默认值:`空`,多个用`,`分隔,取值范围:`GET`,`HEAD`,`POST`,`PUT`,`DELETE`,`OPTIONS`,`TRACE`|
|mapping.header|否|控制器请求头,默认值:`空`,多个用`,`分隔|
|mapping.param|否|控制器请求参数,默认值:`空`,多个用`,`分隔|
- 命令示例:
> 创建名称为`DemoAction`的控制器类,内容如下:
```
@Controller
@RequestMapping(value = "/user/info", method = {Type.HttpMethod.POST, Type.HttpMethod.GET} )
public class DemoAction {
@RequestMapping("/")
public IView __index() throws Exception {
return View.textView("Hello YMPer!");
}
}
```
执行命令:
```
mvn ymate:controller -Dname=Demo -Dsuffix=Action -Dmapping=/user/info -Dmapping.method=post,get
```
控制台输出:
```
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building ympDemo 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- ymate-maven-plugin:1.0-SNAPSHOT:controller (default-cli) @ ympDemo ---
[INFO] properties:
[INFO] |--controllerName:DemoAction
[INFO] |--packageName:net.ymate.demo.controller
[INFO] |--singleton:true
[INFO] |--transaction:false
[INFO] |--mapping:/user/info
[INFO] |--method:POST
[INFO] |--method:GET
[INFO] Output file: /Users/.../ympDemo/src/main/java/net/ymate/demo/controller/DemoAction.java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.377s
[INFO] Finished at: Tue Oct 31 17:48:20 CST 2017
[INFO] Final Memory: 8M/245M
[INFO] ------------------------------------------------------------------------
```
##### 2.1.3 `mapping`:控制器请求方法生成器
> 用于为指定的控制器类追加请求方法代码片段;
- 参数列表:
|参数名称|必须|说明|
|---|---|---|
|name|是|控制器名称|
|package|否|控制器包名,默认值:`${project.groupId}.controller`|
|suffix|否|控制器类名后缀,默认值:`Controller`|
|method|是|控制器方法名称|
|method.param|否|控制器方法参数,默认值:`空`,多个用`,`分隔;可以通过`<取值方式>:<参数名称>`指定参数取值方式,取值方式包括:`path`,`header`,`cookie`,`model`,`file`|
|fileUpload|否|是否添加@FileUpload注解|
|transaction|否|是否添加事务注解,默认值:`false`|
|mapping|否|控制器请求根路径,默认值:`空`|
|mapping.method|否|控制器请求方式,默认值:`空`,多个用`,`分隔,取值范围:`GET`,`HEAD`,`POST`,`PUT`,`DELETE`,`OPTIONS`,`TRACE`|
|mapping.header|否|控制器请求头,默认值:`空`,多个用`,`分隔|
|mapping.param|否|控制器请求参数,默认值:`空`,多个用`,`分隔|
- 命令示例:
> 为名称为`DemoAction`的控制器类添加`__sayHi`请求方法并添加`username`和`age`方法参数,其中`age`参数通过`@Pathvariable`注解获取,内容如下:
```
@RequestMapping(value = "/sayHi/{age}" )
public IView __sayHi(@RequestParam String username, @PathVariable String age) throws Exception {
return View.textView("mapping: /sayHi/{age}");
}
```
执行命令:
```
mvn ymate:mapping -Dname=Demo -Dsuffix=Action -Dmapping=/sayHi/{age} -Dmethod=sayHi -Dmethod.param=username,path:age
```
控制台输出:
```
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building ympDemo 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- ymate-maven-plugin:1.0-SNAPSHOT:mapping (default-cli) @ ympDemo ---
[INFO] properties:
[INFO] |--controllerName:DemoAction
[INFO] |--fileUpload:false
[INFO] |--transaction:false
[INFO] |--method:__sayHi
[INFO] |--param:username
[INFO] |--param:path:age
[INFO] |--mapping:/sayHi/{age}
[INFO] Output file: /Users/.../ympDemo/src/main/java/net/ymate/demo/controller/DemoAction.java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.482s
[INFO] Finished at: Wed Nov 01 22:27:58 CST 2017
[INFO] Final Memory: 11M/309M
[INFO] ------------------------------------------------------------------------
```
##### 2.1.4 `interceptor`:拦截器类生成器
> 用于生成拦截器类代码;
- 参数列表:
|参数名称|必须|说明|
|---|---|---|
|name|是|拦截器名称|
|package|否|拦截器包名,默认值:`${project.groupId}.intercept`|
|suffix|否|拦截器类名后缀,默认值:`Interceptor`|
- 命令示例:
> 创建名称为`DemoInterceptor`的拦截器,内容如下:
```
public class DemoInterceptor extends AbstractInterceptor {
@Override
protected Object __before(InterceptContext context) throws Exception {
return null;
}
@Override
protected Object __after(InterceptContext context) throws Exception {
return null;
}
}
```
执行命令:
```
mvn ymate:interceptor -Dname=Demo
```
控制台输出:
```
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building ympDemo 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- ymate-maven-plugin:1.0-SNAPSHOT:interceptor (default-cli) @ ympDemo ---
[INFO] properties:
[INFO] |--interceptorName:DemoInterceptor
[INFO] |--packageName:net.ymate.demo.intercept
[INFO] Output file: /Users/.../ympDemo/src/main/java/net/ymate/demo/intercept/DemoInterceptor.java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.421s
[INFO] Finished at: Wed Nov 01 22:41:23 CST 2017
[INFO] Final Memory: 9M/245M
[INFO] ------------------------------------------------------------------------
```
##### 2.1.5 `validator`:验证器类生成器
> 用于生成验证器注解及类代码;
- 参数列表:
|参数名称|必须|说明|
|---|---|---|
|name|是|验证器名称|
|package|否|验证器包名,默认值:`${project.groupId}.validation`|
|suffix|否|验证器类名后缀,默认值:`Validator`|
- 命令示例:
> 创建名称为`VDemo`和`DemoValidator`的验证器注解和验证器类,内容如下:
```
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface VDemo {
/**
* @return 自定义验证消息
*/
String msg() default "";
}
@Validator(VDemo.class)
@CleanProxy
public class DemoValidator extends AbstractValidator {
@Override
public ValidateResult validate(ValidateContext context) {
Object _paramValue = context.getParamValue();
if (_paramValue != null) {
boolean _matched = false;
VDemo _anno = (VDemo) context.getAnnotation();
// TODO Code here.
if (_matched) {
String _pName = StringUtils.defaultIfBlank(context.getParamLabel(), context.getParamName());
_pName = __doGetI18nFormatMessage(context, _pName, _pName);
String _msg = StringUtils.trimToNull(_anno.msg());
if (_msg != null) {
_msg = __doGetI18nFormatMessage(context, _msg, _msg, _pName);
}
return new ValidateResult(context.getParamName(), _msg);
}
}
return null;
}
}
```
执行命令:
```
mvn ymate:validator -Dname=Demo
```
控制台输出:
```
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building ympDemo 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- ymate-maven-plugin:1.0-SNAPSHOT:validator (default-cli) @ ympDemo ---
[INFO] properties:
[INFO] |--validatorName:DemoValidator
[INFO] |--packageName:net.ymate.demo.validation
[INFO] Output file: /Users/.../ympDemo/src/main/java/net/ymate/demo/validation/VDemo.java
[INFO] Output file: /Users/.../ympDemo/src/main/java/net/ymate/demo/validation/DemoValidator.java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.438s
[INFO] Finished at: Wed Nov 01 22:48:42 CST 2017
[INFO] Final Memory: 9M/245M
[INFO] ------------------------------------------------------------------------
```
##### 2.1.6 `repository`:存储器类生成器
> 用于生成存储器类代码;
- 参数列表:
|参数名称|必须|说明|
|---|---|---|
|name|是|存储器名称|
|package|否|存储器包名,默认值:`${project.groupId}.repository`|
|suffix|否|存储器类名后缀,默认值:`Repository`|
|transaction|否|是否添加事务注解,默认值:`false`|
|config|否|是否启用配置对象,默认值:`false`|
|interface|否|是否启用接口模式,默认值:`false`|
- 命令示例:
> 创建名称为`DemoRepository`的存储器并启用配置对象和接口模式,内容如下:
```
public interface IDemoRepository {
IResultSet