700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > maven 打包时缺少文件_maven父子工程---子模块相互依赖打包时所遇到的问题:依赖的程

maven 打包时缺少文件_maven父子工程---子模块相互依赖打包时所遇到的问题:依赖的程

时间:2019-10-15 00:08:26

相关推荐

maven 打包时缺少文件_maven父子工程---子模块相互依赖打包时所遇到的问题:依赖的程

场景:

因为之前用到的是,基于springboot框架所搭建的maven工程,而且都是相互独立的。现研发经理要求将所有工程进行整合和规范化,所以抽出一个parent父工程,base基础模块(包含一些公用的实体类和工具类等),以及其他子模块(Module A、 Module B …)。Module A 以及Module B工程都需要依赖base工程。

问题:

在对Module A进行打包时,出现问题:Module A中所依赖的base工程的util程序包不存在。即使能打包成功,用java -jar启动jar包也会报Class Not Found,依赖的base工程的类找不到。

解决方案:

未解决之前在base工程的pom.xml中maven插件的配置如下:

org.springframework.boot

spring-boot-maven-plugin

解决base工程的pom.xml的maven配置如下:

org.springframework.boot

spring-boot-maven-plugin

exec

原因分析:

spring-boot-maven-plugin打包出来的jar是不可依赖的

我们现在整合后的maven项目有一个parent工程,打包类型为pom,下面多个spring-boot工程作为它的module,分别为base和moduleA,moduleB。假如moduleA依赖于base。如果你在base中使用了spring-boot-maven-plugin的默认配置build,或者在parent工程中使用spring-boot-maven-plugin的默认配置build。那么在clean package的时候会发现moduleA找不到base中的类。原因就是默认打包出来的jar是不可依赖的。

解决方案:

官方告诉我们,你如果不想移代码,好吧,我这样来给你解决,给你打两个jar包,一个用来直接执行,一个用来依赖。于是,你需要指定一个属性classifier,这个属性为可执行jar包的名字后缀。比如我设置exec,原项目名为Vehicle-business。那么会得到两个jar:Vehicle-business.jar和Vehicle-bussiness-exec.jar

官方文档位置:84.5 Use a Spring Boot application as a dependency

总结:回到聚合maven上,如果你在parent工程中使用了spring-boot-maven-plugin作为builder,那么你的依赖module一定要用解决方案二来设置。否则你不在parent工程中用spring-boot-maven-plugin作为builder,而在需要打包的module上使用。

一般parent工程的maven插件配置如下:

org.springframework.boot

spring-boot-maven-plugin

1.8

1.8

repackage

被依赖的maven子模块的maven插件配置如下(其余maven子模块就不需要配置):

org.springframework.boot

spring-boot-maven-plugin

exec

其他的坑:

1.jdk8一定要指明

不指明的话在开发工具里运行没有一点问题,如果你没有用到java8的特性打包也没有问题。一旦你用到了java8的特性,而且使用spring-boot-maven-plugin作为builder,一定要指明jdk版本。不然你会收到类似不识别Lambda,请使用resource8这样的错误。

parent工程pom文件:

4.0.0

org.springframework.boot

spring-boot-starter-parent

1.5.6.RELEASE

com.demo

demo-parent

pom

1.0-SNAPSHOT

demo-base

demo-sync

demo-pattern

UTF-8

UTF-8

1.8

1.5.6

org.springframework.boot

spring-boot-devtools

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

org.springframework.cloud

spring-cloud-starter-eureka

org.springframework.cloud

spring-cloud-starter-ribbon

org.springframework.boot

spring-boot-starter-actuator

org.springframework.boot

spring-boot-starter-freemarker

redis.clients

jedis

org.springframework.data

spring-data-redis

org.springframework.boot

spring-boot-starter-redis

1.3.7.RELEASE

org.springframework

spring-jdbc

org.springframework

spring-aspects

org.mybatis

mybatis

3.2.8

org.mybatis

mybatis-spring

1.3.2

com.alibaba

fastjson

1.2.8

com.github.pagehelper

pagehelper

3.7.5

com.github.jsqlparser

jsqlparser

0.9.1

com.github.abel533

mapper

2.3.4

mysql

mysql-connector-java

com.jolbox

bonecp-spring

0.8.0.RELEASE

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-logging

org.springframework.boot

spring-boot-starter-log4j2

org.apache.logging.log4j

log4j-1.2-api

2.8.2

com.lmax

disruptor

3.3.6

org.dom4j

dom4j

2.1.0

io.springfox

springfox-swagger2

2.6.1

io.springfox

springfox-swagger-ui

2.6.1

org.springframework.cloud

spring-cloud-dependencies

Camden.SR7

pom

import

org.apache.maven.plugins

maven-resources-plugin

UTF-8

org.apache.maven.plugins

maven-compiler-plugin

1.8

1.8

UTF-8

org.springframework.boot

spring-boot-maven-plugin

base工程pom文件:

demo-base

4.0.0

com.demo

demo-parent

1.0-SNAPSHOT

org.springframework.boot

spring-boot-maven-plugin

exec

sync的pom文件:

demo-sync

4.0.0

com.demo

demo-parent

1.0-SNAPSHOT

com.demo

demo-base

1.0-SNAPSHOT

maven 打包时缺少文件_maven父子工程---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。