记录一次Maven无法打包的排查过程

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【5月更文挑战第3天】记录一次WhatTheFuck经历

起因

很早之前就一直在维护一个git仓库,平时调研什么组件就会在里面新建一个springboot的工程用来编写示例代码。

不愧是我-自豪.png

最一开始使用的是SpringInitializr,后来网站更新之后,只能生成JDK17+的工程,WhatTheFuck?近期刚从8切换到11.

于是弃用并改用 StartAliyun

今天调研ClickHouse,生成的工程pom-build是这个样子的 :



 <build>
        <plugins>
            <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>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.ramble.clickhouse.ClickhouseApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

然后发现打的jar只有7KB,WhatTheFuck!我需要它能生成可以正常运行的jar。

后面就是围绕怎么让maven输出jar展开了。

使用Spring-boot-maven-plugin打包

思虑片刻,想起来了,之前遇到过这样的问题,原因是用maven-compiler-plugin打包就不行,需要用Spring-boot-maven-plugin,于是删除了 maven-compiler-plugin 所在的plugin节点。

新问题出现了:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project clickhouse: Compilation failure: Compilation failure: 
[ERROR] 不再支持源选项 5。请使用 6 或更高版本。
[ERROR] 不再支持目标选项 1.5。请使用 1.6 或更高版本。

WhatTheFuck!!!怎么还1.5了,那里冒出来的,明明在StartAliyun选中的是11。

解决1.5问题

可以肯定的是打包的时候找到的JDK版本是1.5,而预期的是11,预期和实际不一致,所以是设置的问题。

按照经验来说这时候该检查 IDEA SETTINGSProjectStructure了,检查的结果是这两个位置确实是1.5。

好消息是报错的直接原因找到了,坏消息是根本原因还没有找到。

头大.jpg

在看一下报错log,发现了这一句话:

Failed to execute goal......

也就是说它找的是全局级别的设置,而不是我项目中设置的,那这个全局是在哪里呢?难道是maven的settings.xml?

同时将去掉的maven-compiler-plugin恢复回来package又正常了。这里基本可以确认 goal 就是指 Maven 的settings.xml了, 因为maven-compiler-plugin中设置了JDK。

那问题太似乎简单了,在settings.xml中设置一下不就行了,代码如下:


<profile>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>  
        <maven.compiler.target>11</maven.compiler.target>  
    </properties>
</profile>

满心欢喜的试一波,哎哟,package不报错了。

然而,生成的jar还是7KB。。。。。。 WhatTheFuck.....

先稳一波,虽然通过设置全局解决了,但是也仅解决了当下的问题,万一明天再搞个JDK22的项目,不还是会预期和实际不一致???

既然全局的settings.xml中设置jdk生效,那工程中设置一样生效,因为依稀记得好好好几年前撸MAVEN的时候工程中的配置会覆盖全局的,于是在pom中的properties下添加上述配置,果然好使。

skip

后面的故事就是:

  • 反复观看package-log
  • 反复检验生成的代码
  • baidu&google
  • chatGPT
  • ......

最终,当我把这个工程的pom和其他正常的工程pom做对比的时候,发现多了一个skip=true的配置


<build>
    <plugins>
        <plugin>
            ......
            <configuration>
                ......
                <skip>true</skip>
            </configuration>
           ......
        </plugin>
    </plugins>
</build>

skip什么意思?跳过。

嘿嘿嘿.png

你要跳过什么?反正你是跳过了!跳过了就7KB了!!!

精准搜索了一下,这里的跳过是:跳过打包

WhatTheFuck......

注释这个之后,问题确实解决了,好了,天晴了,雨停了......

可是,为什么StartAliyun默认要Skip=true呢?着实想不明白,不行我还得找找其他的 Initializr ,这个不喜欢用。

总结

  • 遇事不要慌,心态最重要
  • 不要怕麻烦,在不影响团队和交付物的情况下,应该死磕
  • 平时知识的积累还是需要系统化一些,不可留在皮毛,亦或是参差不齐,应该是由浅入深,结构化,系统化。这样在遇到问题的时候排查思路和方向更靠谱
目录
相关文章
|
1月前
|
Java Linux Apache
maven篇6:maven打包
maven篇6:maven打包
126 5
|
1月前
|
Java Maven
如何用Maven打包
如何用Maven打包
114 0
|
1月前
|
XML Java Maven
【Maven技术专题】「实战开发系列」盘点Maven项目中打包需要注意到的那点事儿
【Maven技术专题】「实战开发系列」盘点Maven项目中打包需要注意到的那点事儿
71 1
|
30天前
|
Java Maven
SpringBoot项目的用maven插件打包报Test错误
SpringBoot项目的用maven插件打包报Test错误
|
8天前
|
Java Maven Perl
解决Maven父子多模块打包互相引用打包:必须父模块才能打包成功,单个子模块无法打包成功问题(会提示找不到)
解决Maven父子多模块打包互相引用打包:必须父模块才能打包成功,单个子模块无法打包成功问题(会提示找不到)
|
22天前
|
Java Maven Spring
maven打包插件maven-jar-plugin与spring-boot-maven-plugin
该内容介绍了两个Maven打包插件:`spring-boot-maven-plugin`和`maven-jar-plugin`。`spring-boot-maven-plugin`是Spring Boot项目的默认打包工具,它会包含项目类文件、资源和依赖的jar,但不会解编译依赖。而`maven-jar-plugin`则用于创建普通JAR包,不包含依赖。文中还展示了两个插件打包后的效果差异,并强调了持续练习以掌握这些技能的重要性。
28 0
|
1月前
|
安全 前端开发 Java
安全同学讲Maven重打包的故事
经过去年的Log4j-core的治理工作,我们通过Maven的依赖仲裁机制,在蚂蚁集团静态代码扫描平台-STC 和资产威胁透视-哈勃2款产品的联动合作下,很好的完成了直接依赖和间接依赖场景下的治理工作。但路还很远,新的场景层出不穷,故事还远远没有结束,我们要做的事情还非常多。
82 12
|
1月前
|
存储 XML Java
【Maven技术专题】「入门到精通」教你如何使用Maven中引用依赖本地Jar包,并进行打包输出
【Maven技术专题】「入门到精通」教你如何使用Maven中引用依赖本地Jar包,并进行打包输出
76 0
|
1月前
|
Java Maven
maven手动打包常用标签
maven手动打包常用标签
17 1
|
1月前
|
XML Java Maven
深入探讨Maven打包:打造精致的Zip包
本文介绍了如何使用Maven将Spring Boot项目打包并部署。首先,利用Maven Assembly Plugin创建包含JAR的ZIP文件,以便于部署和修改配置文件。该插件允许自定义打包内容和格式。在`package.xml`中定义了打包格式、依赖、脚本和资源文件的规则。接着,在POM.xml中配置插件,排除配置文件和静态资源以保持外部。最后,执行`mvn package`命令生成分发包,简化了项目的部署流程。
135 2