博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
maven打包oracle jdbc驱动
阅读量:4569 次
发布时间:2019-06-08

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

背景

由于版权问题,maven中央仓库缺少oracle jdbc的驱动,这个给开发带来了很多不便利性。也出现各种各样的解决方案,基本就两种思路:

  • 将oracle驱动安装到本地仓库,这个需要大家统一好名称和版本
  • 使用第三方仓库

不管哪种方案,本来maven就是为了方便开发人员管理包依赖,这样一来反而更麻烦。当然,不是maven的错,oracle这事做的确实够sb。(听说oracle要对java进行收费???)

那么有没有更好的方案,假设你现在开发了一个框架,框架支持多数据库,并且已经将jar包提交至maven中央仓库,如果你的jar包里面就已经包含了oracle驱动,那么使用框架的人就不用额外再去导入驱动。

这种方案有以下几个小问题

  • 会不会有版权问题(这个不是很了解)
  • 驱动升级怎么办
  • 怎么把驱动打到jar包里

关于驱动升级问题,可以对jar包发布多个版本,比如纯净版不包含驱动,驱动xxx版包含不同版本的驱动。

本文主要探讨的就是第三个问题,怎么把驱动打到jar包里

背景交代完毕,正文开始。

实现

遇到的问题

你可能觉得,这是个很简单的事,通过idea的Artifacts不就行了。是的,如果你只是想在本地打一个jar包,这种方式简单方便。但如果要上传到maven,就得使用maven来打包,maven是不管你ide是怎么配置的,而且maven不会将依赖包打到jar包里的。有几个方案可以考虑

  • 借助maven插件可以实现自定义打包,但是该插件是将依赖包全部放在lib目录下,这个不是我的本意,我的本意是将依赖包里的class文件解压到根目录下,和自开发的jar包同一个目录下。(这个插件我研究了很久不能实现就放弃了,如果有知道怎么实现的读者欢迎留言)
  • 自己写插件实现,其实难度也不大,就是麻烦点
  • 借助maven脚本执行插件执行自定义脚本对maven打包后的jar包进行"改造"。

最终选择了第三个方案,写shell脚本实现自定义打包

配置

首先引入插件的依赖

pom.xml

<plugins>        <plugin>            <artifactId>exec-maven-plugin</artifactId>            <groupId>org.codehaus.mojo</groupId>            <executions>                <execution>                    <id>asan</id>                    <phase>package</phase>                    <goals>                        <goal>exec</goal>                    </goals>                    <configuration>                        <executable>${basedir}/scripts/package.sh</executable>                        <arguments>                            <argument>${project.build.directory}</argument>                            <argument>${project.build.finalName}</argument>                            <argument>/Users/asan/u01/docker/lib/ojdbc6.jar</argument>                        </arguments>                    </configuration>                </execution>            </executions>        </plugin>    </plugins></build>
  • phase:在打包这个生命周期结束后执行该脚本
  • executable:脚本目录位置
  • arguments:传给脚本的参数,这里传了三个参数
  • ${basedir}:当前目录,就是项目所在目录
  • ${project.build.directory}:maven构建目录,就是target目录
  • ${project.build.finalName}:maven打包名称
  • /you/path/ojdbc6.jar:要打进去的jar包路径

脚本

package.sh

v_name=$2.jarv_depency=$3v_depency_name=`basename $3`echo "workspace==>$v_workspace"echo "name==>$v_name"echo $v_depencyecho $v_depency_namerm -rf $v_workspacemkdir -p $v_workspacecp $v_depency $v_workspacecd $v_workspacejar -xf $v_workspace/$v_depency_namerm -rf $v_workspace/$v_depency_namerm -rf META-INF/cp $1/$v_name $v_workspacefor file in `ls $v_workspace`do    if [ -d $file ]    then        jar -uf $v_workspace/$v_name $file    fidonerm -rf $1/$v_namemv $v_workspace/$v_name $1/$v_name

整个脚本的大概流程如下

  1. 创建一个临时目录v_workspace
  2. 将依赖包复制到临时目录下
  3. 解压依赖包
  4. 删除jar包和META-INF文件夹
  5. 将项目的jar包复制到临时目录下
  6. 遍历所有文件夹,将文件夹通过命令jar -uf更新到项目jar包里
  7. 用新的jar包替换掉老的jar包

写在最后

现在脚本里只支持一个jar包,稍微修改下就可以支持多个,或者你可以在自己本地把多个jar包用jar -uf打到一个jar包里,再执行脚本。

原文地址:

转载于:https://www.cnblogs.com/lalalagq/p/9986644.html

你可能感兴趣的文章
(七)unittest单元测试框架
查看>>
(八) 自动化测试的实例(以浏览器为例)
查看>>
js获取单选框和复选框的值并判断值存在后允许转跳
查看>>
任务一:零基础HTML编码
查看>>
C#类和结构以及堆和栈大烩菜(本来就迷,那就让暴风来的更猛烈吧!)
查看>>
Bayan 2012-2013 Elimination Round (ACM ICPC Rules, English statements) A. Old Peykan
查看>>
jmeter之jdbc请求
查看>>
C语言习题三
查看>>
94. Binary Tree Inorder Traversal
查看>>
MongoDB安装及多实例启动
查看>>
[css]我要用css画幅画(三)
查看>>
eletron打包
查看>>
numpy
查看>>
django | 连接mysql数据库
查看>>
labelme2coco问题:TypeError: Object of type 'int64' is not JSON serializable
查看>>
Python字符串操作
查看>>
连接池
查看>>
使用易语言COM对象取文件版本
查看>>
3、将uboot,kernel,rootfs下载到开发板上
查看>>
2.16.10.init进程详解1
查看>>