Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/exp-codes/release-project-plugin

(非 Spring)Maven 项目一键发布插件
https://github.com/exp-codes/release-project-plugin

java maven mvn plugin programming

Last synced: 25 days ago
JSON representation

(非 Spring)Maven 项目一键发布插件

Awesome Lists containing this project

README

        

# release-project-plugin
> (非 Spring)Maven 项目一键发布插件

------

## 运行环境

![](https://img.shields.io/badge/Maven-3.2.5%2B-brightgreen.svg) ![](https://img.shields.io/badge/JDK-1.8%2B-brightgreen.svg)

## 软件介绍

- 一键快速发布一个可运行于生成环境的应用程序
- 支持混淆打包以避免被反编译
- 自动集成依赖构件、配置文件、部署文档、数据库脚本、版本说明、运行脚本等

> **注**:

  本插件的主要作用其实就是**生成运行脚本**与**组织应用程序的目录结构**

  混淆打包是依赖第三方 `proguard-maven-plugin` 插件实现的

  应用程序的部署文件复制(如配置文件、部署文档、数据库脚本等)是依赖第三方 `maven-antrun-plugin` 插件实现的

  版本说明是依赖 [`经验构件库 exp-libs-refactor`](https://github.com/lyy289065406/exp-libs-refactor) 实现的

## 使用说明

在指定项目的 `pom.xml` 中添加本插件配置后,**通过 `Maven install` 指令触发**。

本插件的完整参数配置如下:

```xml

com.exp-blog
release-project-plugin
${rpp.version}


rpp
install

install


SELF
./libs
STAND
D:\mavenRepository
foo.bar.prj.Version
foo.bar.prj.Main

UTF-8
java
32m
64m


true
exp-?libs-.*
false


```

其中各个参数说明如下:

| 参数 | 必填 | 取值范围/约束 | 作用 |
|:----:|:--------:|:--------|:----|
| dependMode | 否 | ○ SELF
○ MAVEN | 影响所发布项目的运行脚本中`-cp *.jar`所依赖构件的指向位置:

**SELF(默认)** :
把所有依赖构件都复制到`./lib`目录下,运行脚本直接指向`./lib`。
此方式所发布应用的体积较大,但是可放在任何环境中运行。

**MAVEN** :
对于通过pom依赖的构件,在运行脚本直接指向本地Maven仓库;
对于不是通过pom依赖的构件,则复制到`./lib`目录后再进行指向。
此方式所发布应用的体积较小,但是运行环境中需存在Maven仓库。 |
| jarLibDir | 否 | ./libs(默认) | 复制依赖构件到所发布应用下的目录位置
(影响`dependMode`的复制目录,**一般无需修改**) |
| cmpPathMode | 否 | ○ LEAST
○ STAND
○ MOST | 运行脚本中指向依赖构件路径的压缩模式。
若运行脚本中`-cp *.jar`的依赖构件都是绝对路径,则会导致命令
过长不易维护,因此本插件会提取相同前缀的路径并创建对应的路
径前缀变量。此配置项的作用仅仅是影响这些变量的多寡而已,无
需过于关注。

**默认为STAND,即标准模式,一般无需修改** |
| mavenRepository | 是 | 绝对路径 | 本地Maven仓库位置,必须与本地部署的 `apache-maven` 的配置文
件 `settings.xml` 中的配置项 `` 取值一致。

win环境推荐值为`D:\mavenRepository`
unix环境推荐值为`~/mavenRepository` |
| versionClass | 是 | version 类路径 | 运行脚本打印应用版本信息的入口类路径。
版本信息的配置依赖 [`构件经验库 exp-libs`](https://github.com/lyy289065406/exp-libs) 实现,详见[`这里`](https://github.com/lyy289065406/exp-libs/tree/master/exp-libs/src/main/java/exp/libs/warp/ver) |
| mainClass | 是 | main 类路径 | 运行脚本启动应用程序的入口类路径 |
| mainArgs | 否 |   | 启动应用程序的main类参数表,按需填写即可 |
| charset | 否 |   | 项目编码,**默认为UTF-8** |
| jdkPath | 否 | java(默认) | JRE路径,亦即 `%JAVA_HOME%/bin/java` 路径。
由于配置了系统环境变量,一般无需修改。
但若生产环境下存在多个JRE版本,则可按需修改。 |
| xms | 否 | 32m(默认) | 应用运行时的最小堆内存,按需填写即可 |
| xmx | 否 | 64m(默认) | 应用运行时的最大堆内存,按需填写即可 |
| jdkArgs | 否 |   | JVM参数表,按需填写即可 |
| threadSuffix | 否 |   | 进程后缀名。
所发布的应用默认用项目名作为进程名,若指定了后缀则会自动
附加到进程名末尾,一般用于同一生产环境下部署多套应用时以
作区分。(实际上在使用本插件发布应用后,也可通过直接修改
`.threadname`文件达到同样目的) |
| noPrjVer | 否 | true(默认) | 所发布应用的自身jar文件是否去掉版本号。
默认值为true(即去掉版本号),以便升级时无需调整运行脚本 |
| noVerJarRegex | 否 |   | 命中**正则表达式**的\*.jar依赖构件去掉版本号。
建议配置版本迭代较快的依赖构件,以便升级时无需调整运行脚本 |
| proguard | 否 | false(默认) | 是否启用混淆打包,可有效防止应用被反编译。
需配置`proguard-maven-plugin`插件支持,但是proguard插件配置
项过于复杂,推荐使用[`Maven项目规范骨架 mojo-archetype`](https://github.com/lyy289065406/mojo-archetype)创建项
目,即可自动生成混淆配置。 |

## 其他参考配置

混淆打包插件 proguard-maven-plugin 的配置示例

```xml

com.github.wvengen
proguard-maven-plugin
2.0.7


package

proguard





false
pg



${java.home}/lib/rt.jar






${project.build.finalName}-pg



-ignorewarnings

-dontshrink
-dontoptimize
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers










-repackageclasses exp.libs.pojo.pg





-keepattributes LineNumberTable









-keep class
exp.libs.pojo.Version,
exp.libs.pojo.Main




-keep class exp.libs.pojo.bean.** { *;}



-keepclasseswithmembers public class * {
public static void main(java.lang.String[]);
}




-keep class exp.libs.pojo.api.** { *;}



-keepclasseswithmembernames class * {
native <methods>;
}








-keepclassmembers class * extends java.lang.Enum {
public static **[] values();
public static ** valueOf(java.lang.String);
}




-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}


```

部署文件复制插件 maven-antrun-plugin 的配置示例

```xml

org.apache.maven.plugins
maven-antrun-plugin
1.7


ant-build
install

run



拷贝数据库脚本



拷贝项目配置文件



拷贝文档












```

## 运行效果

详见[这里](./Demo.md)