背景
本文将介绍开源项目DBApi的Maven配置,通过学习它的配置进而学习Maven知识
项目介绍
这里并没有使用原仓库进行分析,而是使用了其他人fork的分支,该分支修复了一些jar包冲突https://gitee.com/kensan/db-api/tree/feature%2Ffix_version_conflicts
简介
DBApi提供零代码开发api服务,只需编写sql,就可以生成http api服务。支持api动态创建,多数据源连接,动态添加数据源,兼容多种数据库。 适用于BI报表、数据可视化大屏的后端接口快速开发
pom结构
- dbapi
- dbapi-ui
- dbapi-common
- dbapi-plugin
- dbapi-service
- dbapi-controller
- dbapi-standalone
- dbapi-cluster-apiServer
- dbapi-cluster-manager
- dbapi-cluster-gateway
- dbapi-assembly
各模块pom配置
dbapi根pom
properties
根pom中使用properties声明了一些jar包的版本,搭配dependencyManagement便可以控制其子模块中引用的jar包版本
properties中版本的定义使用的是groupId+artifactId,这样就可以避免属性被覆盖的问题,详情可以查看Maven properties覆盖
profiles
使用profiles定义了两种模式,每种模式引入的子模块module不同,这样仅需切换profile就能满足不同场景下打包的需求
参考文章:Maven - Profile
dependencyManagement
多模块管理时控制jar包版本,解决jar包冲突
配合properties可以方便的调整jar包版本
参考文章Maven中dependencyManagement作用说明
build
plugins
使用的插件maven-compiler-plugin,maven-clean-plugin,versions-maven-plugin,maven-source-plugin,maven-gpg-plugin详见maven插件介绍中对应插件的介绍
developers
开发者信息
1 2 3 4 5 6 7 8
| <developers> <developer> <name>freakchicken</name> <email>jiangqiang110@126.com</email> <url>https://gitee.com/freakchicken/db-api</url> </developer> </developers>
|
scm
软件管理方面
1 2 3 4 5 6
| <scm> <url>https://gitee.com/freakchicken/db-api.git</url> <connection>scm:git:https://gitee.com/freakchicken/db-api.git</connection> <developerConnection>scm:git:https://gitee.com/freakchicken/db-api.git</developerConnection> </scm>
|
licenses
版权信息
1 2 3 4 5 6 7 8
| <licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> <distribution>repo</distribution> </license> </licenses>
|
distributionManagement
分发
1 2 3 4 5 6 7 8 9 10
| <distributionManagement> <snapshotRepository> <id>ossrh</id> <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url> </snapshotRepository> <repository> <id>ossrh</id> <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement>
|
以下将着重介绍各子模块对maven插件的使用
dbapi-assembly
这里有必要介绍下dbapi打包后的产物的目录结构,运行mvn package后,会在项目根目录生成一个dist文件夹。dist文件夹中会包含一个tar.gz文件,解压该文件可得到一个以下结构的文件夹

其中
/bin/中为shell脚本,对应dbapi-assembly下的bin目录
/conf/中为配置文件
/docs/中为文档,对应dbapi-assembly下的docs目录
/lib/中为使用的jar包
/sql/中为初始脚本,对应dbapi-assembly下的sql目录
这里重点介绍maven-assembly-plugin插件(maven插件介绍)中binary.xml文件
UsingComponentDescriptors
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
| <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> <id>bin</id> <formats> <format>tar.gz</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <baseDirectory>DBApi-${project.version}</baseDirectory> <dependencySets> <dependencySet> <useProjectArtifact>true</useProjectArtifact> <outputDirectory>lib</outputDirectory> <excludes> <exclude>com.gitee.freakchicken.dbapi:dbapi-assembly</exclude> </excludes> </dependencySet> </dependencySets> <fileSets> <fileSet> <directory>${project.basedir}/bin</directory> <outputDirectory>bin</outputDirectory> <lineEnding>unix</lineEnding> <fileMode>744</fileMode> <includes> <include>*.sh</include> </includes> </fileSet> <fileSet> <directory>${project.basedir}/bin</directory> <outputDirectory>conf</outputDirectory> <lineEnding>unix</lineEnding> <fileMode>744</fileMode> <includes> <include>install_config.conf</include> </includes> </fileSet> <fileSet> <directory>${project.basedir}/bin</directory> <outputDirectory>bin</outputDirectory> <includes> <include>*.bat</include> </includes> </fileSet> <fileSet> <directory>${project.basedir}/docs</directory> <outputDirectory>docs</outputDirectory> <includes> <include>*.md</include> </includes> </fileSet> <fileSet> <directory>${project.basedir}/../</directory> <outputDirectory>docs</outputDirectory> <includes> <include>*.md</include> </includes> </fileSet> <fileSet> <directory>${project.basedir}/sql</directory> <outputDirectory>sql</outputDirectory> <lineEnding>unix</lineEnding> <fileMode>644</fileMode> <includes> <include>*.sql</include> </includes> </fileSet> <fileSet> <directory>${project.parent.basedir}/dbapi-standalone/src/main/resources</directory> <outputDirectory>conf</outputDirectory> <includes> <include>*.properties</include> <include>*.xml</include> <include>*.db</include> <include>*.yml</include> </includes> </fileSet> <fileSet> <directory>${project.parent.basedir}/dbapi-service/src/main/resources</directory> <outputDirectory>conf</outputDirectory> <includes> <include>*.properties</include> <include>*.xml</include> <include>*.db</include> <include>*.yml</include> </includes> </fileSet> <fileSet> <directory>${project.parent.basedir}/dbapi-cluster-gateway/src/main/resources</directory> <outputDirectory>conf</outputDirectory> <includes> <include>*.properties</include> <include>*.xml</include> <include>*.db</include> <include>*.yml</include> </includes> </fileSet> <fileSet> <directory>${project.parent.basedir}/dbapi-cluster-manager/src/main/resources</directory> <outputDirectory>conf</outputDirectory> <includes> <include>*.properties</include> <include>*.xml</include> <include>*.db</include> <include>*.yml</include> </includes> </fileSet> <fileSet> <directory>${project.parent.basedir}/dbapi-cluster-apiServer/src/main/resources</directory> <outputDirectory>conf</outputDirectory> <includes> <include>*.properties</include> <include>*.xml</include> <include>*.db</include> <include>*.yml</include> </includes> </fileSet> <fileSet> <directory>${project.parent.basedir}/dbapi-common/src/main/resources</directory> <outputDirectory>conf</outputDirectory> <includes> <include>*.properties</include> <include>*.xml</include> <include>*.db</include> <include>*.yml</include> </includes> </fileSet> <fileSet> <directory>${project.parent.basedir}/dbapi-plugin/src/main/resources</directory> <outputDirectory>conf</outputDirectory> <includes> <include>*.properties</include> <include>*.xml</include> <include>*.db</include> <include>*.yml</include> </includes> </fileSet>
</fileSets> </assembly>
|
参考
参考Using Component Descriptors
参考maven-assembly-plugin 入门指南
使用Maven的assembly插件实现自定义打包
dbapi-controller
观察dbapi打包后产物,解压后没有在lib中发现前端产物因此就可以推测前端产物一定是放在某个jar包的静态资源路径下,果然在dbapi-controller jar包中的static路径下发现了静态产物
这里主要介绍一下dbapi-controller模块下几个插件的使用
maven-clean-plugin
介绍maven-clean-plugin插件介绍
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> <configuration> <failOnError>true</failOnError> <filesets> <fileset> <directory>${basedir}/src/main/resources/static/</directory> <includes> <include>**/*</include> </includes> </fileset> </filesets> </configuration> </plugin>
|
maven-jar-plugin
介绍maven-jar-plugin插件介绍
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <excludes> <exclude>**/*.xml</exclude> <exclude>**/*.properties</exclude> <exclude>**/*.db</exclude> </excludes> </configuration> <executions> <execution> <id>default-jar</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>
|
maven-antrun-plugin
介绍maven-antrun-plugin插件介绍
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <id>move-dist-to-static</id> <phase>validate</phase> <goals> <goal>run</goal> </goals> <configuration> <target> <delete> <fileset dir="${basedir}/src/main/resources/static/" includes="**/*.*"/> </delete> </target> <target> <copy todir="${basedir}/src/main/resources/static"> <fileset dir="${basedir}/../dbapi-ui/dist"> <include name="**/*.*"/> </fileset> </copy> </target> </configuration> </execution> </executions> </plugin>
|
dbapi-ui
dbapi-ui模块下仅关注exec-maven-plugin这个插件,对于maven-antrun-plugin的使用与dbapi-controller模块中一致这里不再赘述
exec-maven-plugin
介绍exec-maven-plugin插件介绍
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <id>exec-npm-install</id> <phase>validate</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>npm</executable> <arguments> <argument>install</argument> </arguments> <workingDirectory>${basedir}</workingDirectory> </configuration> </execution> <execution> <id>exec-npm-run-build</id> <phase>validate</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable>npm</executable> <arguments> <argument>run</argument> <argument>build</argument> </arguments> <workingDirectory>${basedir}</workingDirectory> </configuration> </execution> </executions> </plugin>
|
其他模块的使用大同小异,不再赘述
引用
- DBApi项目地址:https://gitee.com/freakchicken/db-api