资讯专栏INFORMATION COLUMN

maven打包oracle jdbc驱动

vvpvvp / 2079人阅读

摘要:背景由于版权问题,中央仓库缺少的驱动,这个给开发带来了很多不便利性。本文主要探讨的就是第三个问题,怎么把驱动打到包里背景交代完毕,正文开始。是的,如果你只是想在本地打一个包,这种方式简单方便。

背景

由于版权问题,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插件maven-assembly-plugin可以实现自定义打包,但是该插件是将依赖包全部放在lib目录下,这个不是我的本意,我的本意是将依赖包里的class文件解压到根目录下,和自开发的jar包同一个目录下。(这个插件我研究了很久不能实现就放弃了,如果有知道怎么实现的读者欢迎留言)

自己写插件实现,其实难度也不大,就是麻烦点

借助maven脚本执行插件exec-maven-plugin执行自定义脚本对maven打包后的jar包进行"改造"。

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

配置

首先引入插件的依赖
pom.xml


    
        
            exec-maven-plugin
            org.codehaus.mojo
            
                
                    asan
                    package
                    
                        exec
                    
                    
                        ${basedir}/scripts/package.sh
                        
                            ${project.build.directory}
                            ${project.build.finalName}
                            /Users/asan/u01/docker/lib/ojdbc6.jar
                        
                    
                
            
        
    

phase:在打包这个生命周期结束后执行该脚本

executable:脚本目录位置

arguments:传给脚本的参数,这里传了三个参数

${basedir}:当前目录,就是项目所在目录

${project.build.directory}:maven构建目录,就是target目录

${project.build.finalName}:maven打包名称

/you/path/ojdbc6.jar:要打进去的jar包路径

脚本

package.sh

v_workspace=$1/tmp
v_name=$2.jar
v_depency=$3
v_depency_name=`basename $3`
echo "workspace==>$v_workspace"
echo "name==>$v_name"
echo $v_depency
echo $v_depency_name
rm -rf $v_workspace
mkdir -p $v_workspace
cp $v_depency $v_workspace
cd $v_workspace
jar -xf $v_workspace/$v_depency_name
rm -rf $v_workspace/$v_depency_name
rm -rf META-INF/
cp $1/$v_name $v_workspace
for file in `ls $v_workspace`
do
    if [ -d $file ]
    then
        jar -uf $v_workspace/$v_name $file
    fi
done
rm -rf $1/$v_name
mv $v_workspace/$v_name $1/$v_name

整个脚本的大概流程如下

创建一个临时目录v_workspace

将依赖包复制到临时目录下

解压依赖包

删除jar包和META-INF文件夹

将项目的jar包复制到临时目录下

遍历所有文件夹,将文件夹通过命令jar -uf更新到项目jar包里

用新的jar包替换掉老的jar包

写在最后

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/72255.html

相关文章

  • maven 初步

    摘要:在中配置可以使用国内的,提高下载速度使用代理服务默认不使用代理服务器,在通过代理服务器访问网络的情况下无法连接到仓库。 maven 在$HOME.m2setting.xml 中配置 mirror 可以使用国内的aliyun mirror,提高下载速度 aliyun aliyun maven http://maven.aliyun.com/n...

    young.li 评论0 收藏0
  • spring-boot 同时配置Oracle和MySQL

    摘要:同时配置和配置文件数据库驱动包因为在仓库下载不到,就直接下载手动导入配置文件数据源配置类测试类启动之后访问看后台有打印结果表示配置成功借鉴 Spring Boot 1.5.8.RELEASE同时配置Oracle和MySQL 配置POM文件 4.0.0 com.adagio demo 0.0.1-SNAPSHOT jar multi...

    zxhaaa 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<