1. 情况一:
有代码的项目,打包类型一定不能为 pom。
pom一般只用于父工程,管理依赖,不写代码。
1. springboot项目的话,通常打成jar包。
2. 以前的那种SSM项目用tomcat启动war包的方式,才打war包。
如果有java代码的项目,用pom打包,则会导致其他项目依赖不上,从而报错: Could not find artifact com.wqm:tuantuan-common:jar:1.0-SNAPSHOT
所以:解决办法就是,定义pom.xml文件中的 <packaging>jar</packaging> 标签里面的类型,只要项目中有代码,那就定义jar (默认就为jar,可以不定义)
情况二:
有代码的maven项目,通常要指定 maven编译环境,同时电脑的jdk环境,要与这插件的编译、打包环境一致。
不然有可能会出现一些问题,但不是绝对的。
通常报错: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project tuantuan-common: Fatal error compiling
比如:
1. 电脑环境为jdk 8的环境,maven指定编译环境为11 ; 电脑jdk环境为jdk11,maven指定编译打包环境为13。 都是会出现这些错误的。
解决办法就是: 将电脑的jdk环境与maven指定的环境保持一致。
<build>
<!-- 插件-->
<plugins>
<!-- java代码编译、打包插件: -->
<!-- source: 指定使用jdk11进行编译-->
<!-- target: 指定使用jdk11进行打包-->
<!-- encoding: 指定编码为UTF-8-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
情况三:
有些springboot项目,是分模块的,比如domain单独分离成一个模块,然后依赖。有很多模块的情况中,里面可能存在多个main方法,这时候可能导致报错。
解决办法:
<build>
<plugins>
<!-- Spring Boot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供了执行Maven操作的可能。-->
<!-- Spring Boot Maven plugin能够将Spring Boot应用打包为可执行的jar或war文件,然后以通常的方式运行Spring Boot应用。-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 创建多模块 boot 项目,打包失败。-->
<!-- 因为 pom 集成了 boot-parent,打包时,在没有指定 mainClass 入口时,会找所有子模块下的 main 方法,除去 web 目录下有之外,其他模块下面均没有,导致打包异常。-->
<mainClass>com.wqm.gateway.TuantuanGatewayApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
就是指定要打成jar包的main方法的位置。
出现问题的原因举例:
比如说:
创建了一个 springboot项目:
里面的子模块项目结构如下:
springboot
- controller
- pom.xml
- domain
- pom.xml
- common
- pom.xml
按正常逻辑来说,controller模块里面有个main方法,就是springboot项目的入口。
但是现在,我们再common里面,写了一个utils,然后在utils里面,写了一个main方法做测试,这时候,controller也依赖了common项目,就会导致项目部署到服务器之后启动不成功。
情况四:
maven版本的环境 和 jdk版本的环境,要相互匹配。
maven的官网地址(查看版本匹配问题 ):
Maven – Download Apache Mavenhttps://maven.apache.org/download.cgi
如下图:意思就是说,使用maven3.3以上的版本,需要jdk1.7及以后的版本与之对应。
Maven – Maven Releases Historyhttps://maven.apache.org/docs/history.html
就是说,只要用了jdk7及以上的版本,就支持到目前最新的 3.8.6 并且可能会继续向高版本支持
如果以上的办法都不行,不妨试试:
maven的clean命令 或者执行 idea的File选项的 Invalidate Cache 或者 重启idea
完毕。