java war包合并,使用maven warpath插件合并多module的war包

查看原文:http://www.yeetrack.com/?p=899

现在java

项目一般使用maven、gradle等工具来管理jar包、打包、发布。如果一个项目有很多模块,那般是分成多个module,主目录有个parent,负责包含全部的module,然后目录中多个module文件夹,分别依赖parent或者其他module。最近有个项目,项目很久,代码全部放在一起,随着业务拓展变得与越来越庞大,于是其对进行module拆分。

问题

多个模块可能交叉依赖。

每个模块可能都会有前台页面的代码,jsp、js等。

maven打包的时候能否war包、jar包一起打。

解决方式

交叉依赖必须解决,尽可能多的剥离独立代码,让它成为其他模块以来的包,这个包可以使用maven打成jar包。然后拆分其他的模块,可以有顺序依赖,但是不能交叉依赖。

多个模块都有前台代码,前台代码在maven打包是不需要编译,是直接copy到target目录,然后再打成war包。这样我们就可以把所有模块的前台代码都抽离出来,当成一个单独的module,如project-web模块,当然也可以不抽离,但是需要用到第三步。

使用maven插件可以做到war、jar一起打。插件名字是maven-jar-plugin。示例pom配置如下(在pom.xml开头中指定打包类型是war):

org.apache.maven.plugins

maven-jar-plugin

make-a-jar

compile

jar

执行mvn install就可以得到war和jar包,默认是在target文件夹下。

介绍就这些,下面是示例的pom配置,首先parent中的pom.xml(注意parent的打包类型是pom):

com.yeetrack.project

project-parent

1.0-SNAPSHOT

pom

My Maven Webapp

common

module-one

module-two

module-three

在各个模块中配置parent项目(下面是module-one):

com.yeetrack.project

module-one

1.0-SNAPSHOT

jar

module-one

com.yeetrack.project

project-parent

1.0-SNAPSHOT

如果module two依赖module one,有两种情况:

module-one打jar包(此module没有前台代码)

mvn

install后,就可以将该模块打成jar包,然后安装到本地maven仓库,module-two就可以直接依赖,添加dependency即可。

module-two打war、jar同时打(此模块有前台代码)

同时打war、jar方法,去看上面的第三步,打出war、jar包后。maven将module-one的war包安装到本地仓库,将jar包放在它的target文件夹中。这样module需要依赖jar包,也需要war包(合并到自己的war中)。首先看依赖jar的dependency:

com.yeetrack.project

module-one

1.0-SNAPSHOT

jar

system

${project.basedir}/../module-one/target/module-one-1.0-SNAPSHOT.jar

再看依赖war的情况(两个依赖,一个都不能少):

com.yeetrack.project

module-one

1.0-SNAPSHOT

war

com.yeetrack.project

module-one

1.0-SNAPSHOT

warpath

OK,这是依赖的配置,下面是打包的配置,既然它都依赖其他的war了,那么它的打包类型也就是war。其实就是在使用maven-war-plugin的基础上添加一个maven-warpath-plugin:

org.apache.maven.plugins

maven-war-plugin

WEB-INF/lib

true

add-classes

Over,最后打包的时候,在parent中执行mvn install即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

儿童编程python入门_儿童编程python入门

经常会有小朋友问我,“我想做个黑客,我该学什么编程语言?”,或者有的小朋友会说:“我要学c,我要做病毒”。其实对于这些小朋友而言他们基本都没有接触过编程语言,只是通过影视或者其他地方看到的…

ARM GNU 常用汇编伪指令介绍

abort.abort: 停止汇编 .align absexpr1, absexpr2: 以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16 或 32. 第 二个表达式值表示填充的值. if...else...endif.if .else .endif: 支持条件预编译 include.include "file": 包含指定的头文件,…

java 同类型转换失败,你们见过java类型转换,自己转自己失败的情况吗?很神奇的操作...

问题就是上面这个问题。List slaughterProducts slaughterForm.getSlaughterProductModelForm();for (SlaughterProductModelForm e : slaughterProducts) {....}居然运行到for的时候出现上面这个错误。很神奇吧,工作这么多年了第一次发现 JAVA自己转自己转不成功。…

python可视化代码_python可视化实现代码

python可视化#导入两个库import numpy as npimport matplotlib.pyplot as plt#第一个参数就是x轴的初始值#第二个参数是x轴的终止值#第三个返回num均匀分布的样本,也就是0-12的区间取多少个点,如果为曲线的最好数值大一点x np.linspace(0, 12, 50)y np…

用户管理与文件权限

一:用户管理 现代操作系统一般属于多用户的操作系统,也就是说,同一台机器可以为多个用户建立账户,一般这些用户都是为普通用户,这些普通用户能同时登录这台计算机,计算机对这些用户分配一定的资源。 普通用…

php中划线,html中下划线、删除线、上划线的样式与用法实例

这篇文章主要介绍了下划线、删除线、上划线等常用的实例,划线是非常常见的一种样式,为了网页中的视觉效果以及对文字的说明,我们经常对文体进行一些划线操作。下面文章就是对各种划线的详细介绍。一. 下划线的详细介绍在我们日常的Web的开发中…

rabbitmq3.7集群搭建实战

环境: 3台 centos7.4rabbitmq3.7erlang 22 1. 有几种方式安装,这里使用的yum安装(官方推荐)2. 使用rabbitmq时需要安装erlang,在各个节点上使用vim添加两个repo文件**/etc/yum.repos.d/rabbitmq_erlang.repo**[rabbitm…

php获取页面中的指定内容,php 获取页面中指定内容的实现类

[email protected]image:Grep.class.php/** grep class* Date: 2013-06-15* Author: fdipzone* Ver: 1.0** Func:** set: 设置内容* get: 返回指定的内容* replace: 返回替换后的内容* get_pattern 根据type返回pattern*/class Grep{ // class startprivate $_patte…

数据增量更新定义_TiDB 在 OPPO 准实时数据仓库中的实践

作者介绍OPPO 数据分析与解决方案团队主要负责 OPPO 全集团的大数据分析和解决方案提供,团队成员多来自一线互联网公司及著名高校,在 OPPO 众多场景的大数据应用方面有很深经验,极大的支撑了业务迅速发展。文章具体作者:羊欢&…

Python之模块初识-自定义模块

1. 模块的定义与分类 什么是模块?一个模块就是一个py文件。 模拟博客园系统作业,100000行代码. 不可能全部存在一个文件. 不易维护.效率低.分文件: 10个文件.每个文件有50个函数,有一写相同功能或者相似功能的函数.代码冗余,重复性.我们应该将这10个函数…

php统计用户留存脚本,SQL 统计用户留存

问题描述有一个用来记录每日客户消耗数据的表 t,它的表结构如下:字段类型描述created_dayDate消耗日期customer_idInteger客户IDamountInteger消耗金额要求:统计出头部客户、腰部客户、尾部客户在上个月(2020-06-01 ~ 2020-06-30)的留存情况。…

python socket udp_python网络-Socket之udp编程(24)

一、udp简介udp --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。udp不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。udp在传输数据报前不用在客户和服务器之间建立一个连接&…

selenium--单选下拉列表

下拉选择 from selenium import webdriver from time import sleepdriver webdriver.Chrome() driver.get("https://www.xxxxx.com/") sleep(2) driver.find_elements_by_tag_name(option)[2].click() # 通过标签名定位到 option 标签,选择第三个&#x…

matlab实现字符识别,字符识别 - MATLAB Simulink Example - MathWorks 中国

定义问题脚本 prprob 定义了一个包含 26 列的矩阵 X,每列对应一个字母。每列有 35 个值,值可能是 1,也可能是 0。每列(包含 35 个值)定义一个字母的 57 位图。矩阵 T 是一个 2626 的单位矩阵,它将 26 个输入向量映射到 26 个类。[…

python建立ip代理池_Python搭建代理IP池实现存储IP的方法

上一文写了如何从代理服务网站提取 IP,本文就讲解如何存储 IP,毕竟代理池还是要有一定量的 IP 数量才行。存储的方式有很多,直接一点的可以放在一个文本文件中,但操作起来不太灵活,而我选择的是 MySQL 数据库&#xff…

低秩矩阵分解 matlab,低秩分解的matlab代码看不懂,分解的两个矩阵在哪呀??...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼有四个文件:demo.mfunction [] demo()%This routine demonstrates an example of using LRR to do subspace segmentation. We cosntruct 5 independent subspaces, each of which has a rank of 10,%sample 200 point…

python深度神经网络算法_02.深度神经网络算法之Python基础与数据分析

资源内容:02.深度神经网络算法之Python基础与数据分析|____2016最新python基础篇视频教程22课|____Python学习手册(第4版).pdf|____Python程序入门与进阶|____基础篇01-福利课python先入为主上篇|____基础篇02-福利课python先入为主下篇|____基础篇03-虚拟机安装xub…

我们为什么要用MVC?ASP.NET MVC模式的优点?

1.关注点分离:每个功能最少会被切分为M-V-C三个部分,让开发者一次只需要关注一个部分,进而降低复杂难度,提高开发效率2.分层负责:明确切割,M-V-C三个部分并行开发3.自由操控HTML:在ASP.Net MVC中…

python 英语词频统计软件_Python实现统计英文文章词频的方法分析

本文实例讲述了Python实现统计英文文章词频的方法。分享给大家供大家参考,具体如下:应用介绍:统计英文文章词频是很常见的需求,本文利用python实现。思路分析:1、把英文文章的每个单词放到列表里,并统计列表…

mysql磁盘无法挂载,linux – 无法挂载磁盘(VFS:找不到ext4文件系统)

试图挂载磁盘(硬件raid)但失败了.#mount -t ext4 /dev/sda /datamount: wrong fs type,bad option,bad superblock on /dev/sda,missing codepage or helper program,or other errorIn some cases useful info is found in syslog - trydmesg | tail or so#dmesg | tail -1EXT4…