概述
某系统如今的项目结构如下:
AAProgram
| - aa_data
| - src
| - main
| - java
| - pom.xml
| - aa_service
| - src
| - main
| - java
| - pom.xml
BBProgram
| - bb-service
| - src
| - main
| - java
| - resources
| - properties
| - jdbc.properties
| - applicationContext.xml
| - applicationContext-jdbc.xml
| - applicationContext-memcache.xml
| - pom.xml
| - bb-api
AAProgram项目下面有两个子项目,分别为:
- aa_data:数据库连接、查询等代码
- aa_service:业务逻辑代码
BBProgram项目下面有两个子项目,分别为:
- bb-service:导入了aa_data项目、aa_service项目的maven依赖jar包,为aa_data、aa_service提供配置文件
- bb-api:对外提供API
我们运行整个项目的时候,就运行BBProgram的一个Entrance类来启动整个Spring容器。因为bb-service导入了aa_data项目、aa_service项目的maven依赖jar包,所以这时候实际上整个bb-service项目的结构就是这样的:
| - bb-service
| - src
| - main
| - java
(aa_data项目的代码)
(aa_service项目的代码)
(bb-service项目的代码)
| - resources
| - properties
| - jdbc.properties
| - applicationContext.xml
| - applicationContext-jdbc.xml
| - applicationContext-memcache.xml
| - pom.xml
aa_data项目、aa_service项目虽然没有resources文件夹(也就没有配置文件),但是导入到bb-service之后就可以用bb-service里面的配置文件了。
现在要为该项目添加一个定时任务定时刷新系统的memcache缓存,用到了公司的一个定时任务框架,定时任务的配置和启动都在公司的定时任务网站进行操作,而代码主要是编写定时任务的内容。因此定时任务的编写需要新建一个项目:
AAProgram
| - aa_data
| - src
| - main
| - java
| - pom.xml
| - aa_service
| - src
| - main
| - java
| - pom.xml
| - aa_time_job
| - src
| - main
| - java
| - pom.xml
因为aa_time_job项目是定时任务的项目,配置和启动都在公司的定时任务网站进行操作,是不依赖于spring的,定时执行memcache缓存的刷新,所以也就没办法像aa_data、aa_service项目一样导入到bb-service。而缓存的刷新需要查询数据库,并且定时任务类也要用到spring的annotation等配置,也就是说aa_time_job项目需要读取bb-service项目的配置文件,并且还要自己手工加载spring容器。
那么,首先就要解决,怎么把bb-service项目的配置文件弄到aa_time_job项目里面呢?
maven-dependency-plugin插件
百度之后发现了maven-dependency-plugin这么一个插件,dependency 插件我们最常用到的是 dependency:copy
,dependency:copy-dependencies
及dependency:unpack
,dependency:unpack-dependencies
这四个,如果要实现上述的场景,我们需要的是第三个。
dependency:unpack官网的解释就是:like copy but unpacks。打个比方,bb-service项目打包成jar包之后,封装了配置文件,现在我们的aa_time_job项目要使用到这些配置文件,那么在jar包就肯定不行了,我们需要将bb-service项目里面的配置文件提取到aa_time_job项目中的resources文件夹才能使用。那么我们怎么将这些提取出来呢,当然只能打开了啊。
![](https://img.haomeiwen.com/i4444657/43477f39d37f7d10.png)
步骤如下:
(1)把bb-service项目打成一个jar包:bb-service.jar
(2)让aa_time_job项目依赖于bb-service.jar
<dependency>
<groupId>com.vip.bb</groupId>
<artifactId>bb-service</artifactId>
<version>${bb-service.version}</version>
</dependency>
(3)在aa_time_job项目中pom.xml添加maven-dependency-plugin插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>unpack</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.vip.bb</groupId>
<artifactId>bb-service</artifactId>
<version>${bb-service.version}</version>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/classes/resources/main</outputDirectory>
<includes>**/properties/*,**/*.xml,**/*.properties</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
这样我们就把bb-service项目的配置文件文件输出到resources文件夹下面了。
![](https://img.haomeiwen.com/i4444657/ff7e70b6089fb978.png)
其实不用maven-dependency-plugin插件..
但是我在aa_time_job项目里面追溯applicationContext.xml的位置,发现直接引到了bb-service.jar包里面的applicationContext.xml而不是我提取出来到resources文件夹里面的applicationContext.xml。
![](https://img.haomeiwen.com/i4444657/b224ea7c5da3fc19.png)
所以不用特意把配置文件提取出来....
网友评论