您现在的位置是:网站首页 > 代码编程 > JAVA开发JAVA开发
【原】DAO模块打包公用,避免项目中多处重复代码
不忘初心 2019-04-08 围观() 评论() 点赞() 【JAVA开发】
简介:Maven问世之后,创建工程的时候,都喜欢整成多包的项目,似乎多包已经成了大型项目标配,此时就会出现一个问题,实体Bean的代码可能要写多套,在一整个工程中就显
Maven问世之后,创建工程的时候,都喜欢整成多包的项目,似乎多包已经成了大型项目标配,此时就会出现一个问题,实体Bean的代码可能要写多套,在一整个工程中就显得很冗余了,当数据库有改动时,需要修改多份重复的代码。
可能大家不太明白,我来举个例子:
拿我自己的博客项目来说,有一个用户访问的网站,有一个后台管理系统,此时对于博客中的文章来说,都是操作的article表的数据,对应javabean也就是Article.java,那么我就需要在项目中写两份一模一样的Article.java文件
如上图,admin和jwcz两个工程中都需要相同的javabean,如果是单包的项目,那我就需要两个工程都写一套,那也无可厚非了,但是在多包的工程中,如果我还这么设计,那就显得比较累赘了,和数据库交互的代码,我只需要写一份即可,因为这部分的代码,相对于业务来说,是比较独立的。
为了解决这个问题,可以单独将javaben和dao模块抽离出来当作一个单独的module,然后admin和jwcz两个工程再依赖这个module。
在admin和jwcz工程中引入dao的依赖:
<dependency>
<groupId>com.wolffy</groupId>
<artifactId>dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
再次使用install打包之后,运行项目,一切正常,而且编写代码也跟我们上面想要的一样,数据库article表增加了一个字段,只需要改动dao模块中的Article.java即可。
至此,问题得到解决,但是好奇心驱使之下,我点开了war包,发现相关的资源文件并没有copy过来
上图中可以很清楚的看到,且不说javaben有没有被拷贝过来,就连dao中配置的jdbc的相关配置都没有拷贝,但是项目依旧可以运行,因为资源文件都在dao.war中,而启动项目的时候,会去加载dao.war中的资源文件
上图是我解压了dao.war之后的文件,基本上就是我dao模块中的所有配置文件,包含jdbc和mapper配置文件。
此时,我有了这样一个非正常的疑问:如果我想看一下改了mapper没生效,定位问题的时候,岂不是还需要将线上的dao.war拖出来排查?
我之所以说是非正常的疑问,就是因为排查问题时,确实应该这样,而且经过测试过的代码才会上线,那么这问题就不能变通一下吗?可以。
查阅资料后,发现有前辈们提出过这种疑问,甚至还找到了解决方案:利用maven-war-plugin的Overlay机制。
在DAO模块的build中增加如下配置(此配置可有可无,默认classesClassifier是class字符):
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!--在打包时相关的类会被独立打成jar-->
<attachClasses>true</attachClasses>
<!--指定名字:dao-class.jar-->
<!--为什么非要使用class才行呢?-->
<classesClassifier>class</classesClassifier>
</configuration>
</plugin>
</plugins>
</build>
在需要使用DAO模块的工程中,配置如下依赖:
<!-- 为了copy资源文件 -->
<dependency>
<groupId>com.wolffy</groupId>
<artifactId>dao</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 指定为war包 -->
<type>war</type>
</dependency>
<!-- 为了正常的import -->
<dependency>
<groupId>com.wolffy</groupId>
<artifactId>dao</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 指定为jar包 -->
<type>jar</type>
<!-- 与DAO模块的classesClassifier保持一致 -->
<!-- 经过多次测试,发现只能使用class才行 -->
<classifier>class</classifier>
</dependency>
注意最后一行注释,看前辈们的配置,可指定任意字符串,只需要与dao中配置的字符串保持一致即可,但是我这里竟然只能使用class字符串,不知道是否我哪里配置有误,只要我写了其他字符串,就算二者保持一致,也依旧会导致打包失败。
配置完毕之后,再次install,打开包中文件查看,已经copy了资源文件
好了,不管是正常的还是非正常疑问,现在都已经有了答案和解决方法了!
看完文章,有任何疑问,请加入群聊一起交流!!!
很赞哦! ()
相关文章
- IntelliJ IDEA 2024.2发布之后强推新UI,如何恢复老的经典UI界面
- Uninstall hasn't detected folder of intelli] lDEA installation. Probablyuninstall.exe was moved from the installation folder.
- 公众号CPS变现新宠:微赚淘客查券返利机器人,开启智能省钱赚钱新时代
- 高返利优惠券公众号推荐
- 返利公众号可信吗安全吗?返利机器人哪个佣金高?
- 唯品会购物返利公众号大揭秘:哪些真正好用的返利公众号?
- 饿了么优惠券免费领取:哪些公众号值得推荐?
- 哪些有用可靠的微信公众号能领淘宝优惠券?
- 微信返利最高的微信号推荐——让你的购物更加实惠!
- 微信返利最高的微信号推荐
标签云
猜你喜欢
- IntelliJ IDEA 2019.2已经可以利用补丁永久破解激活了
- IntelliJ IDEA 2019.3利用补丁永久破解激活教程
- IntelliJ IDEA高版本最灵活的永久破解激活方法(含插件激活,时长你说了算)
- Jetbrains全家桶基于ja-netfilter的最新破解激活详细图文教程
- IntelliJ IDEA 2022.1永久破解激活教程(亲测可用,持续更新)
- 分享几个正版 IntelliJ IDEA 激活码(破解码、注册码),亲测可用,持续更新
- ja-netfilter到底需不需要mymap,2021.3.2版本激活失效?
- 如何激活idea2022.1及以上版本中的插件(亲测可用)
- 【史上最全】IntelliJ IDEA最新2022.1版本安装和激活视频教学(含插件)
- IntelliJ IDEA 2022.2 版本最新2099年永久激活方法,亲测可用,也可以开启新UI了。
站点信息
- 网站程序:spring + freemarker
- 主题模板:《今夕何夕》
- 文章统计:篇文章
- 标签管理:标签云
- 微信公众号:扫描二维码,关注我们