博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java开发小技巧(三):Maven多工程依赖项目
阅读量:5050 次
发布时间:2019-06-12

本文共 5451 字,大约阅读时间需要 18 分钟。

Maven多工程依赖项目开发流程

前言

本篇文章基于中创建的父工程project-monitor实现,运用我们自定义的依赖包进行多工程依赖项目的开发。

下面以多可执行Jar包项目的开发为例,进行Maven多工程依赖项目开发的讲解。

需求分析

首先来看一下封面图,我们要实现的效果是:

1.多个项目共享一个项目的类和方法等通用内容
2.每个子项目单独导入所需依赖,以及各自填充父项目配置文件中的占位符
3.子项目按指定目录结构进行打包
4.所有子项目集成打包到一个统一的目录,共享依赖包和配置文件等内容
5.打包后目录结构:

  • bin:存放脚本文件,用来设置环境变量,执行相应的jar包
  • lib:依赖、项目jar包
  • etc:配置文件
  • ......

好啦,目标明确的,接下来要进行具体开发实现了

实现

打包配置

在上一篇文章中已经创建好了一个自定义的Maven依赖,相当于一个父项目,接下来我们新建一个子项目,命名为project-onepom.xml文件与父项目基本相同,所有依赖包都必须单独引入,不同的是多了对父项目的依赖:

com.demo
project-monitor
0.0.1

以及Maven插件maven-assembly-plugin的引入,用来实现依赖的打包以及打包后的目录结构:

maven-assembly-plugin
false
package.xml
make-assembly
package
single

目录结构配置位于项目根目录下package.xml配置文件中:

package
zip
true
src/main/resources
*.properties
*.xml
etc
lib
runtime

以上就实现了项目打包的配置工作,实现流程图中最后的项目结构,打包结果为zip文件

填充配置文件占位符

之前我们在父项目的spring上下文中定义了一个数据源bean,配置信息使用了占位符填充,所以如果我们想要使用这个bean,就需要替换其中的占位符信息,要怎么做呢?

首先当然是创建配置文件了,在项目中创建jdbc.propertiesJDBC配置文件,如:

jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localdb:3306/test?characterEncoding=utf8&useSSL=true&serverTimezone=UTCjdbc.username=rootjdbc.password=5EF28C5A9A0CE86C2D231A526ED5B388

然后我们需要借助PropertyPlaceholderConfigurer这个类来实现,在项目spring上下文中定义bean:

classpath:jdbc.properties

Bingo,占位符修改完毕,别忘了引入父项目的上下文,毕竟我们要填充占位符的bean是在父项目中的:

测试Demo

好了,接下来来测试项目的可行性,主要实现使用父项目定义的数据源来对MySql进行查询。

先创建一个DemoService类,内容如下:

package com.demo.project.one.service;import org.apache.log4j.Logger;import javax.sql.DataSource;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class DemoService {    private static final Logger logger = Logger.getLogger(DemoService.class);    private DataSource dataSource;    public void queryDb(){        Connection conn = null;        Statement stmt = null;        ResultSet rs = null;        try {            conn = dataSource.getConnection();            stmt = conn.createStatement();            rs = stmt.executeQuery("select * from movie limit 1");            while(rs.next()){                logger.info(String.format("Movie[Id=%d,Title=%s,Director=%s,Genre=%s,Language=%s]",                        rs.getInt(1),                        rs.getString(2),                        rs.getString(3),                        rs.getString(4),                        rs.getString(5)                        ));            }        } catch (SQLException e) {            e.printStackTrace();        } finally {            try {                if(rs != null){                    rs.close();                }                if(stmt != null){                    stmt.close();                }                if(conn != null){                    conn.close();                }            } catch (SQLException e) {                e.printStackTrace();            }        }    }    public void setDataSource(DataSource dataSource) {        this.dataSource = dataSource;    }}

在上下文中为其注入dataSource定义:

别忘了添加log4j.properties配置文件,这里就不贴出文件内容了。

OK,新建一个入口类来执行DemoService的测试吧:

package com.demo.project.one;import com.demo.project.one.service.DemoService;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Application {    public static void main(String[] args){        ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("/project-one.xml");        DemoService demoService = (DemoService)context.getBean("demoService");        demoService.queryDb();    }}

最终的项目结构如图

项目结构

打包

一切准备就绪,轮到项目打包了,在项目根目录执行以下Maven命令即可

mvn clean package

执行完成后你会发现target目录的结构如图所示

target目录结构
project-one.zip就是我们要的打包结果,解压后你会发现,依赖包和配置文件已经放在了各自的目录下
zip包目录结构

执行文件

项目开发完成,接下来就是执行程序了,以Windows平台下为例,首先创建bin目录,目录中创建批处理文件setenv.batproject-one.bat

因为jar包与配置文件的分离,所以我们需要指定执行jar包时的classpath,批处理文件内容如下:

setenv.bat

@echo offset SRC_DIR=%cd%cd %~dp0cd ..set MAIN_HOME=%cd%cd %SRC_DIR%set BIN_HOME=%MAIN_HOME%\binset ETC_HOME=%MAIN_HOME%\etcset LIB_HOME=%MAIN_HOME%\libset CLASSPATH=%ETC_HOME%;%JAVA_HOME%\lib\tools.jarfor %%i in (%LIB_HOME%\*.jar) do set CLASSPATH=!CLASSPATH!;%%i

project-one.bat

@echo off@setlocal enableextensions enabledelayedexpansioncall setenv.batchcp 65001java -cp %CLASSPATH% com.demo.project.one.Applicationpause

bat文件的内容就不详细解释,有兴趣可以百度了解一下,主要是为了拼接出完整的CLASSPATH,执行project-one-0.0.1.jar可执行jar包

运行

点击project-one.bat运行程序

运行结果

结语

项目终于开发演示完毕,这里只是创建一个打造可执行jar包的子项目作为例子,你还可以创建多个子项目,最后打包的时候合并相同的依赖和配置文件,然后在bin中创建相应项目的执行文件即可,各个子项目之间也可进行相互依赖。

以上开发技巧不仅适用于可执行jar包的开发,同样适用于WEB项目的开发,具体还是由项目需求决定。

文章项目源码已发布到Github:

本文为作者原创,转载请注明来源:http://www.jianshu.com/p/3fa98dd52520。

转载于:https://www.cnblogs.com/zkh101/p/8083368.html

你可能感兴趣的文章
递归与循环的区别
查看>>
【USACO】Watering Hole 2008 Oct
查看>>
动态链接的步骤
查看>>
emacs 缩写词功能
查看>>
Api demo源码学习(2)--App/Activity/Custom Dialog --自定义Activity样式
查看>>
Velocity脚本简明教程
查看>>
虚拟机类加载机制
查看>>
RTSP流媒体数据传输的两种方式(TCP和UDP)
查看>>
大数n!
查看>>
TreeView控件使用总结
查看>>
PowerDesigner 生成的脚本取掉双引号
查看>>
改进卷积神经网络,你需要这14种设计模式
查看>>
Swap Nodes in Pairs
查看>>
js中数组以及for循环的使用
查看>>
「风格」与「设计」by杰夫·齐曼(Jeffrey Zeldman)
查看>>
js实现配置菜品规格时,向后台传一个json格式字符串
查看>>
c#winform,制作可编辑html编辑器
查看>>
20175326实验五 网络编程与安全
查看>>
数据库(class0507)
查看>>
ruby实现SHA1PRNG
查看>>