精华内容
下载资源
问答
  • maven多模块打包的pom文件,里面包含个模块的pom文件,没有代码
  • 本篇文章主要介绍了vue-cli扩展多模块打包的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • maven 多模块打包

    2020-09-09 06:48:14
    九月初,炎夏褪去,秋微凉。...言归正传,今天介绍一下 maven 多模块打包过程中蹚过的点,昨天耗费一整天的时间,就只玩了一个 `mvn -X clean install` 命令,说了都是学艺不精交的时间学费,值得反思

    背景

    九月初,炎夏褪去,秋微凉。最近,不知从哪一天开始,早上 5 点钟起床时,天还没亮;晚上不到 7 点,天已黑;四季的车轮,就在人无所察觉中轰隆而过!

    言归正传,今天介绍一下 maven 多模块打包过程中蹚过的点,昨天耗费一整天的时间,就只玩了一个 mvn -X clean install 命令,说多了都是学艺不精交的时间学费,值得反思……

    功能描述

    近期参与的一个产品,技术组合是 maven 多模块 + SpringBoot 后端 + Vue.js 前端。

    前一阵儿略玩了一下单模块的打包,昨天被领导安排去部署整个产品,虽说就是一个在父模块根目录下执行 mvn -X clean install 的事情,也遭遇了三个只有原来打包同事【已成为前同事】才知道的问题,总结一下。

    不出意外的话,打包其实是很容易的事情,将各个模块 target 目录下的 moduleName.war 上传服务器的 Tomcat 的 webapps 目录下,重启 Tomcat 即可。工程的 build.xml 脚本将所有目标 war 打包到一个 webapps.zip 文件,直接 unzip 该文件,然后上传即可。

    虽然也部署过无数次 web 应用,为避免意外,事先备份了服务器上的 webapps 目录。事实证明,小心驶得万年船,程序员的谨慎意识对后来定位问题起到了决定性作用。

    问题一:空白页

    部署后,访问项目菜单模块时,出现了 SpringBoot 空白页:
    在这里插入图片描述
    问题排查:将这个工程的 war 包还原为备份版本,访问正常,说明直接原因是 mvn 生成的新包有问题。对比 Tomcat 下的两个工程目录,发现空白页面这个工程的 classes 下没有 static 静态资源文件。

    理论上,所有前端代码都应该通过 npm build 打包对应的 SpringBoot 后端工程的 static 目录下的,这个空白页产生大概率是访问不到前端页面文件,难道这个工程没有打包前端?

    为什么这个工程没有打包前端文件呢?进入它的 pom.xml 中看:

    <id>exec-npm-install</id>
    <phase>prepare-package</phase>
    

    没有配置这个预处理动作,导致前端文件缺失。除了它,其他所有前后端分离的模块都有,为什么呢?

    一再追问下,前同事都被我的问得不耐烦了,真相竟然是这个模块不需要重新打包替换,所以没有配置前端打包命令。

    问题二:axios 请求路径错误

    解决了第一个问题后,菜单功能正常了,但是 F12 看到控制台一堆 localhost:8080 请求报 404 ,这个问题早有所闻,因为项目多模块之间没法完全独立,所以通过配置文件设置其他模块的后端请求路径 :

    const moduleUrl= {
        md1: 'http://localhost:8080/m1',
        md2: 'http://localhost:8080/m2',
    };
    
    export default moduleUrl;
    

    开发环境,不同的后端工程,内置 Tomcat 端口不同,所以配置 moduleUrl 的时候需要注意端口信息;统一发布到一个 Tomcat 目录后,端口是统一的,但是路径中不能用 localhost ,因为这是前端配置,浏览访问 localhost 的时候,视为本机 IP,所以会请求失败。

    解决办法:全局路径配置中,区分开发环境和测试环境,开发环境,直接用相对路径:

    const moduleUrl= {
        md1: 'http://localhost:8080/m1',
        md2: 'http://localhost:8080/m2',
    };
    
    if (process.env.NODE_ENV === 'production') {
      moduleUrl.md1 = 'm1';
      moduleUrl.md2 = 'm2';
    }
    export default moduleUrl;
    

    问题三:context-path 配置和发布路径不一致问题

    最后一个问题,是 SpringBoot 的 servlet:context-path 配置和发布路径不一致导致前端 axios 请求 404 错误。

    有一个模块,特立独行,它的模块根路径配置为 / :

    # Tomcat
    server:
      tomcat:
        uri-encoding: UTF-8
        max-threads: 1000
        min-spare-threads: 30
      port: 8084
      servlet:
        context-path: /
    

    而打包后,该工程为 manager.war ,即部署后,前端应该访问路径是 /manager,但所有的 axios 请求都是相对于根路径的,比如,这个登录请求:
    在这里插入图片描述
    因此前端爆出一堆 404 ,通过对比备份工程和当前工程的网络请求,发现了该问题。

    隐藏的这么深,我一个写了半年前端的人,咋可能知道嘛!

    启示录

    原以为就是放几个 war 包的事情,凭我对 Tomcat 的了解,logs 日志里面没有一个异常,判断部署流程没问题,但是前端页面始终是空白页。鼓足了被讨厌的勇气,追问前同事了十几个问题后,终于搞明白了这个简单部署工作背后要注意的问题。

    结论就是,打包真的是个极其考验耐心的工作,耗时又长,稍有问题,就要重来:

    1. mvn -X clean install 一次,顺利的时候,四十分钟,忘记关 FTP 目录,导致 clean 一半失败了,还要重来;
    2. 50M 的破网再直连 VPN 上传 六七个 150MB 左右的文件,90Kb/s 的速度,上传完成半个小时到四十分钟,网速还得看运气;
    3. 重启一次 Tomcat ,5分钟;
    4. 被领导扣扣追问进度 3 次,电话催问两次,总共20分钟;
    5. 对比问题包和正常包,以及想到要去对比来定位问题,这个过程一共经过了一小时。

    昨天打包这件事,也让我深刻体会到 IT 行业人员变动的时间成本是多么大呀!这些问题原来负责的人都深切经历过的坑点,没有交接给后来人,后者再经历一次排查,虽然成本都是企业的,但当事人可能是自己。

    所以,文档很重要,今天公司产品的 doc 目录下已经多了一份打包注意事项。就让这个问题在我手上终结吧,这就是记录的意义!

    展开全文
  • jbootmaven模块打包例子
  • idea多模块打包

    千次阅读 2018-10-28 13:59:40
    多模块打包的办法有两个。 1 在parent的pom下执行deploy, 这样就会自动将父 pom以及子 module都发布到仓库。 在模块中添加如下选项 &lt;distributionManagement&gt; &lt;repository&gt; &lt;...

    多模块打包的办法有两个。

    1 在parent的pom下执行deploy, 这样就会自动将父 pom以及子 module都发布到仓库。
    在模块中添加如下选项

    <distributionManagement>
    	<repository>
    		<id></id>
    		<url></url>
    	</repository>
    	<snapshotRepository>
    		<id></id>
    		<url></url>
    	</snapshotRepository>
    </distributionManagement>
    

    2 将子module的parent去掉,不要依赖不在仓库中的pom,将子module提升为一个独立的maven项目单独发布。

    展开全文
  • maven多模块打包

    千次阅读 2020-03-25 16:13:07
    1. 父模块打包模块打包时,子模块都是依赖即使打包的jar,所有模块的jar都是最新jar 2. 子模块打包 子模块直接打包,如果有依赖其他模块,其他的模块必须在本地库存在, mvn install 方式安装到本地库,所以子模块...

    1. 父模块打包

    父模块打包时,子模块都是依赖即使打包的jar,所有模块的jar都是最新jar

    2. 子模块打包

    子模块直接打包,如果有依赖其他模块,其他的模块必须在本地库存在, mvn install 方式安装到本地库,所以子模块打包都是使用库里的jar. 如果要使用最新的代码,方式一,父模块直接打包;方式二,把所有依赖的模块 install 到maven本地库中

    3. 常用命令

    默认使用pom.xml文件,跳过测试代码的编译和执行,-Dskip.tests=true只是跳过代码执行,还是会编译
    clean package -Dmaven.test.skip=true
    
    指定pom.xml文件
    clean package -f pom-my.xml -Dmaven.test.skip=true
    
    +X debug模式
    clean package -f pom-my.xml -Dmaven.test.skip=true -X
    

    4.常用打包命令

    实例

    命令

    -pl,--projects <arg>                Comma-delimited list of specified
                                        reactor projects to build instead
                                        of all projects. A project can be
                                        specified by [groupId]:artifactId
                                        or by its relative path.
    

    打包指定模块

    # 只打包指定模块
    mvn clean package -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Pdev -pl module
    # 打包指定模块并且打包其依赖的模块
    mvn clean package -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Pdev -pl module -am
    # 打包指定模块并且打包依赖指定模块的模块
    mvn clean package -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Pdev -pl module -amd
    

    不打包模块 !

    # 支持多个模块不打包
    mvn clean package -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Pdev -pl !./test,!./module2
    
    展开全文
  • gradle将多模块打包成一个jar执行类demo,附博客地址:https://blog.csdn.net/qq_43813937/article/details/106869813
  • Spring boot maven多模块打包踩坑

    万次阅读 热门讨论 2017-11-03 11:13:59
    最近折腾了两次spring boot在maven下的多模块打包,踩了很坑,现在记录如下。 项目目录: - 项目 P - 模块 A - 模块 B - 公有基础模块 C - Mybatis基础模块 M父pom.xml文件: <!--版本号--> <...

    最近折腾了两次spring boot在maven下的多模块打包,踩了很多坑,现在记录如下。

    项目目录:

    • 项目 P
    • 模块 A
    • 模块 B
    • 公有基础模块 C
    • Mybatis基础模块 M

    父pom.xml文件:

      <!--版本号-->
      <groupId>com.parent</groupId>
      <artifactId>demo</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    
      <!--管理所有的模块-->
      <modules>
        <modules>C</modules>
        <modules>M</modules>
      </modules>
    
      <!--指定项目的spring boot的版本-->
      <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>2.0.0.M5</version>
      </parent>
    
      <!--指定项目中公有的模块-->
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>com.module</groupId>
            <artifactId>c</artifactId>
            <version>${project.version}</version>
          </dependency>
          <dependency>
            <groupId>com.module</groupId>
            <artifactId>m</artifactId>
            <version>${project.version}</version>
          </dependency>
        </dependencies>
      </dependencyManagement>
    
      <!--指定jdk的版本为1.8,默认为1.6-->
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
      </properties>
    
      <!--指定项目中公有的依赖-->
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter</artifactId>
        </dependency>
      </dependencies>
    
      <!--指定使用maven打包-->
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
              <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                </configuration>
          </plugin>
    
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.19.1</version>
                <configuration>
                  <skipTests>true</skipTests>    <!--默认关掉单元测试 -->
                </configuration>
          </plugin>
        </plugins>
      </build>
    

    模块A的pom.xml

      <groupId>com.module</groupId>
      <artifactId>a</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <!--指定父模块,需要注意的是,这里要指定父模块pom.xml的相对路径-->
      <parent>
        <groupId>com.parent</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
      </parent>
    
      <!--spring boot打包的话需要指定一个唯一的入门-->
      <build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
              <configuration>
                <!-- 指定该Main Class为全局的唯一入口 -->
                <mainClass>com.module.a.Application</mainClass>
                <layout>ZIP</layout>
              </configuration>
              <executions>
                <execution>
                  <goals>
                    <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                  </goals>
                </execution>
              </executions>
          </plugin>
    		</plugins>
    	</build>
    

    模块B的pom.xml

    同A即可

    模块C的pom.xml

    如果是共有模块的话,不需要打包,否则会报错,因为其他模块在打包的时候会自动添加依赖进去,如果这里打包了,其他的模块就找不到该依赖了。

      <groupId>com.module</groupId>
    	<artifactId>c</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
      <!--指定父模块,需要注意的是,这里要指定父模块pom.xml的相对路径-->
      <parent>
        <groupId>com.parent</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
      </parent>
    

    模块M的pom.xml

    如果项目中使用的Mybatis的话,肯定是作为一个单独的模块来处理的,这个Mybatis是需要打包的

      <groupId>com.module</groupId>
      <artifactId>m</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <!--指定父模块,需要注意的是,这里要指定父模块pom.xml的相对路径-->
      <parent>
        <groupId>com.parent</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
      </parent>
    
      <!--mybatis的打包方式-->
      <build>
    		<plugins>
    			<plugin>
    				<groupId>org.mybatis.generator</groupId>
    				<artifactId>mybatis-generator-maven-plugin</artifactId>
    				<version>1.3.5</version>
    				<executions>
    					<execution>
    						<id>Generate MyBatis Artifacts</id>
    						<phase>none</phase>
    						<goals>
    							<goal>generate</goal>
    						</goals>
    					</execution>
    				</executions>
    				<configuration>
    					<overwrite>true</overwrite>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    

    打包

    按照上面的配置好以后,执行下面的命令就好了

      mvn clean package
    

    但是如果使用了多个模块,上面的命令是会吧全部的模块都执行打包的,如果只是打包某个模块的话,可以用

      mvn -pl A -am install
    
    展开全文
  • Springboot 多模块打包 为 war

    千次阅读 2018-01-27 18:32:25
    Springboot 多模块打包  1.进入到项目的目录结构里面  目录结构  2.出现下面这个错误表示打包的项目没有主方法  3.在配置文件里面添加主方法   pom.xml里面去配置,主方法在哪个模块就在哪个模块里面的...
  • springBoot聚合父工程的项目多模块打包 今天多模块打包遇到一点小坑,特意分享给你们,最初在IDEA中的Maven中的夫工程中执行Package命令打包之后,执行打出的jar包,却出问题了,问题是:“没有主清单属性”,今天...
  • IDEA maven 多模块打包问题总结

    千次阅读 2019-06-13 14:50:16
    IDEA maven 多模块打包问题总结,这个作者总结的很好 https://www.jianshu.com/p/37c6688c4fcb
  • springboot多模块打包jar

    千次阅读 2019-07-02 20:29:00
    弄了半天,进入了误区,第一次打包,我就想打包哪个字模块就打包那个子模块,于是公共模块打包成子模块的依赖jar包时报不可以找到。 正确操作,第一次打包直接打包所有的模块,父工程上maven install就好了(成功的...
  • idea环境下springboot项目父子多模块打包部署过程讲解 我们以一个使用idea构建的项目为例为大家讲解如何对springboot的父子模1块工程进行打包部署; 1.项目工程结构 父工程:ewe-hr 子模块:core 不依赖其它模块 子...
  • maven多模块打包编译报错
  • spring boot在maven下的多模块打包

    千次阅读 2017-11-10 14:24:27
    spring boot在maven下的多模块打包,踩了很坑,现在记录如下。  项目目录:  - 项目 P  - 模块 A  - 模块 B  - 公有基础模块 C  - Mybatis基础模块 M 父pom.xml文件: groupId>...
  • Springboot 多模块打包 坑点

    千次阅读 2018-11-07 19:46:09
    第一次写点东西,写的不好,多多包涵 这几天弄一个springboot项目,多模块开发,中间碰到了几个坑点,记录一下,方便自己查看,也希望能对其他同学有所帮助
  • 使用maven插件install公共模块后 查看仓库存在 再install其他模块显示找不到这个公共模块 ``` Failed to execute goal on project chess-auth-common: Could not resolve dependencies for project ...
  • springboot多模块打包实例 由于在项目中引入了groovy编程,并且使用了lombok,在运行时没发现什么问题,但是最后打包部署时出现一系列问题。查了许久资料终于解决,特将解决方案写成文档记录一下 项目结构 ...
  • Maven项目多模块打包

    千次阅读 2016-11-07 11:55:09
    多模块工程的打包命令参考: -am --also-make 同时构建所列模块的依赖模块; -amd -also-make-dependents 同时构建依赖于所列模块模块; -pl --projects 构建制定的模块模块间用逗号分隔; -rf -resume-from 从...
  • springboot一个项目多模块打包踩过的坑

    万次阅读 多人点赞 2018-07-12 14:42:47
    其实主要几点: ...因为对应的模块文件不需要打包,因为我的主模块需要到对应包中的依赖,打包了就找不到了 &amp;amp;lt;plugins&amp;amp;gt; &amp;amp;lt;plugin&amp;amp;gt; &amp;amp
  • 一、多模块打包 Xml代码 <?xmlversion="1.0"encoding="UTF-8"?> <projectxmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema...
  • idea springboot多模块打包

    千次阅读 2019-06-10 14:16:31
    在项目入口模块的pom文件中加,注意其他模块中不要存在<build>这一栏 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> ...
  • 微服务打包的例子用的spring2.3版本的工程创建的。能运行 花了几天时间才搞定的。网上很的文档都不能成功。不是版本问题就是包问题 这个是用eclipse工具创建的springboot工程。
  • Maven多模块打包遇到的问题详解

    万次阅读 多人点赞 2018-06-25 14:03:29
    多模块多module的分布式架构; 项目目录结构如下 父工程为server工程,其中有个子module工程: 1、独立子工程:db、model、quartz、redis、util、basecontroller; 2、独立功能模块:dao、service、...
  • 项目共有common,consumer,productor模块,其中common为公用模块,被consumer,productor模块所依赖,当打包consumer或productor时,出现如下找不到所引用的类问题. 二、解决方法 经过分析发现common模块pom中包含有...
  • 个.py文件和打包命令格式如下: pyinstaller [主文件] -p [其他文件1] -p [其他文件2] --hidden-import [自建模块1] --hidden-import [自建模块2] 根据上面的文件结构打包命令如下 pyin...
  • spring boot 多模块打包jar包问题

    千次阅读 2018-07-27 20:05:40
    最近工作中用到了spring boot,在多模块项目打包时遇到了问题,现记录一下。     执行命令mvn clean package报错:Failed to execute goal on project web 上级模块依赖没有安装,在上级模块执行 mvn clean ...
  • 创建多模块 boot 项目,打包失败。 问题原因 因为 pom 集成了 boot-parent,打包时,在没有指定 mainClass 入口时,会找所有子模块下的 main 方法,除去 web 目录下有之外,其他模块下面均没有,导致打包异常...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 244,978
精华内容 97,991
关键字:

多模块打包