Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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 项目一键发布插件
- Host: GitHub
- URL: https://github.com/exp-codes/release-project-plugin
- Owner: EXP-Codes
- License: gpl-3.0
- Created: 2018-09-12T17:30:25.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-16T18:04:26.000Z (almost 2 years ago)
- Last Synced: 2024-11-04T01:13:45.225Z (2 months ago)
- Topics: java, maven, mvn, plugin, programming
- Language: Java
- Homepage:
- Size: 3.56 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
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)