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

概述

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

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: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。

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,302评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,227评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,342评论 25 709
  • 电影讲述的是在荒岛里上演的一出好戏,虽然陨石未让世界崩塌,但对于岛上的人来说,大海已将他们与文明世界隔绝。 末日的...
    深度艺评阅读 3,269评论 1 3
  • 这一周一直在勤勤恳恳的坚持,所以很期待这篇周复盘,发布完开启新的一周,2018年已然过去二分之一,还剩24次周复盘...
    晓寒云轻阅读 1,733评论 0 0

友情链接更多精彩内容