maven项目如何依赖另一个项目的配置文件

2018-11-16  本文已影响236人  不知名的蛋挞

概述

某系统如今的项目结构如下:

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项目下面有两个子项目,分别为:

BBProgram项目下面有两个子项目,分别为:

我们运行整个项目的时候,就运行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:copydependency:copy-dependenciesdependency:unpackdependency:unpack-dependencies这四个,如果要实现上述的场景,我们需要的是第三个。

dependency:unpack官网的解释就是:like copy but unpacks。打个比方,bb-service项目打包成jar包之后,封装了配置文件,现在我们的aa_time_job项目要使用到这些配置文件,那么在jar包就肯定不行了,我们需要将bb-service项目里面的配置文件提取到aa_time_job项目中的resources文件夹才能使用。那么我们怎么将这些提取出来呢,当然只能打开了啊。

步骤如下:

(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文件夹下面了。

其实不用maven-dependency-plugin插件..

但是我在aa_time_job项目里面追溯applicationContext.xml的位置,发现直接引到了bb-service.jar包里面的applicationContext.xml而不是我提取出来到resources文件夹里面的applicationContext.xml。

所以不用特意把配置文件提取出来....

上一篇 下一篇

猜你喜欢

热点阅读