maven 项目拆分配置文件为单独的项目(即maven项目如何依赖另一个项目的配置文件)

  在学习dubbo 分布式框架的时候,需要把一个大的项目分割成多个服务,例如:用户服务模块(包括权限、用户登录、用户增删)、公共服务模块(包括文件上传等),这些服务模块之间可能需要依赖公共的配置文件,例如redis配置、数据库配置、第三方配置,系统数据配置,我们不可能把配置文件在每个需要的服务项目上都放置一份,这样维护起来很麻烦,所以就想把公共的配置文件单独分离处理,做成一个单独的project,然后打成jar包,某个服务需要这个配置的话,直接引用这个jar包就好了。

我的项目结构如下:



项目结构划分:

yt-common: 这个工程包含所有服务公用的工具类、实体对象等。

yt-common-config: 这个是公用的配置工程,这个project只包含配置文件

yt-facade-common:dubbo api 接口,里面定义一些各个服务之间公用的接口方法。

yt-facade-user: dubbo 用户接口API,里面定义了用户服务模块的相关操作。

yt-service-web-common:dubbo 公用服务实现工程,这是web工程,这个里面实现都是yt-facade-common API 里面定义的方法,例如:文件上传服务。

yt-service-web-user: 用户服务实现工程,这个里面都是有关yt-facade-user的实现。

yt-web-clound-sound:这是个后台web工程,包括页面、控制层,会调用dubbo服务去实现业务逻辑功能。


我在 yt-facade-user 里面引入了yt-common-config 的配置,见:





yt-common-config 这个项目的配置文件定义了数据库连接、缓存、系统配置等操作,在yt-facade-user 里面需要这些配置,把项目通过myeclipse 部署到tomcat 下面运行正常,能够访问数据库,yt-common-config 下面定义的配置文件会加载到classpath 下面:




但是问题来了:我利用maven 构建项目,然后把war 包部署到tomcat 下面,运行项目,发现user 服务报错了,我打开tomcat 下面部署的yt-service-web-user项目,发现在classpath下面只有它本身的配置文件,它所依赖的配置文件工程中的配置文件并没有被copy 到classpath下面,所以数据库配置、系统配置都读不到了,然后玩不起来了,我有点想哭。

解决办法:常用的解决办法是百度了,于是乎百度,好在我找到和我有一样想法的童鞋:

1、有人问:maven项目如何依赖另一个项目的配置文件 ,刷刷的看完,然后我再次想哭,没有答案啊。
2、有人问:maven 项目拆分配置文件为单独的项目,看到这个我想说还有有人帮我问了,但是拉倒头,发现也只是问了,大神门都不回答啊,好吧,只有靠自己了。

最终的解决办法是:

Maven 打包是由很多插件构成的,我百度的时候发现有这么一个插件: 

maven-dependency-plugin插件的使用 ,这个插件是用来项目打包时copy,unpack...jar 包的,对了,unpack,那我可以把配置文件那个jar包解压到classpath下面啊,这样就和myelipse 直接部署的效果一样了,我在yt-facade-user项目的pom.xml 文件配置如下:

			<plugin>  
			    <groupId>org.apache.maven.plugins</groupId>  
			    <artifactId>maven-dependency-plugin</artifactId>  
			    <executions>  
			        <execution>  
			            <id>unpack</id>  
			            <phase>generate-resources</phase>  
			            <goals>  
			                <goal>unpack</goal>  
			            </goals>  
			            <configuration>  
			                <artifactItems>  
			                    <artifactItem>  
			                        <groupId>com.hzlh</groupId>  
			                        <artifactId>yt-common-config</artifactId>  
			                        <version>0.0.1-SNAPSHOT</version>  
			                        <type>jar</type>  
			                        <overWrite>true</overWrite>  
			                        <outputDirectory>${project.build.directory}/classes</outputDirectory>  
			                        <includes>**/system/*.properties,**/spring/*.xml</includes>  
			                    </artifactItem>  
			                </artifactItems>  
			            </configuration>  
			        </execution>  
    			</executions>  
			</plugin>  
这里指定把:yt-common-config 这个jar包解压到项目的classpath下面,并只copy中system、spring文件下面的指定的文件,配置好后,clean-installl 这个project ,查看build后的工程目录:



发现配置工程中的配置文件果然解压过来了,然后把war包丢到tomcat中跑起来,顿时我就开心的下班了。

PS:有点啰嗦,但是不要喷我啊!


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值