maven项目编译失败,解决方案

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 

完毕。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值