`

如何用 maven 同时 install jar 和 war

    博客分类:
  • java
 
阅读更多

背景:

项目在一个super pom下,有多个平行module,在各级依赖中,有一个module 在 pom 中定义 package war,但是开发阶段,只需要其中的jar包来使用。如果一直使用其 war 包来开发调试,maven overlay 会占用较多时间。

于是新的需求就是:将这个module 同时打包 jar 和 war 并 intall 到本地 repository 中。开发阶段就用jar,部署用war。

 

解决思路

使用 maven-jar-plugin ,定义在 phase package 阶段同步打 jar 包;

然后在 maven install 时,maven 会将这个 module 的 jar、war、ear、pom 等install到本地repository (此动作是自动完成,有几个就install 几个,无需配置

 

具体操作:

在pom中加入 maven-jar-plugin 2.3.1

 

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-jar-plugin</artifactId>
  4. <version>2.3.1</version>
  5. <executions>
  6. <execution>
  7. <id>my-jar</id>
  8. <phase>package</phase>
  9. <goals>
  10. <goal>jar</goal>
  11. </goals>
  12. <configuration>
  13. <classifier>api</classifier>
  14. </configuration>
  15. </execution>
  16. </executions>
  17. </plugin>
  18.  

  19.  

  20. 其中要注意的是,声明 classifier 为任何你需要的字符。


     

    因为这样可以避免一个问题:

    如果在 pom 中定义 package 为 war,

    运行 maven package 后,在项目 target 目录下成功产生 XX.jar 和 XX.war ,

    但运行 maven install,却只把 XX.jar 安装到 repositoy 中的 XX.war,其中内容仅是 jar 包内容。

    而XX.war 就不install 到 repositoy 了。

     

    加入 classifier 后产生: XX-api.jar 和 XX.war,

    那么maven install 会将这两个文件同时安装到本地 repository 中,不会产生上述问题。

 

 

 

引用:

 

<dependency>
            <groupId>com.my</groupId>
            <artifactId>my-jar</artifactId>
            <classifier>api</classifier>
            <version>${my.version}</version>
            <type>jar</type>
        </dependency>

 

 

后记:

同样的道理,如果项目定义 package jar,同时需要打包 jar 和 war,应该也可以搭配使用 maven-war-plugin 来达成。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics