Maven问题汇总

标签: 无 分类: 未分类 创建时间:2024-01-15 15:37:22 更新时间:2024-11-15 10:49:43

1.mvnw导致idea无法识别依赖

我在官网 spring.io 下载了初始化项目,或者就是用 idea 新建一个 springboot 项目,总是无法识别src目录,很是奇怪。

【尝试方案】
(1)降低jdk版本,重新安装。
(2)关闭重启,还是不行。

【解决方案】
后来我把 .mvn、HELP.md、mvnw、mvnw.cmd 这几个文件删除了,就可以重新下载依赖了,还真是麻烦。

2.Import does not have member field ‘com.sun.tools.javac.tree.JCTree qualid’

maven 从15.0.2升级到 21.0.2,结果原先的代码重新打包就不行了。

【解决方案】
找到相关的 lombok 依赖,然后进行版本升级。

1
2
3
4
5
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
</dependency>

3. Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project drone: Fatal error compiling: 错误: 不支持发行版本 21

进行项目打包的时候,出现了这个问题:还有就是 不支持发行版本 17。

【解决方案】
需要将系统默认的 jdk 版本改为 jdk21 ,这样在打包的时候就不会报错了。

参考文章:
【1】.解决IntelliJ IDEA报错Error: java: 错误: 不支持发行版本 XX
【2】.使用openjdk17编译时报错:Fatal error compiling: 错误: 不支持发行版本 1.17 java -version正常,mvn -v正常。最后发现,没有javac命令…也就是说这个基础镜像里没有openjdk-devel的包,最后安装上该包后,可以正常编译
【3】.不支持java17 这里是不支持java17

4.zip END header not found

在idea中进行依赖加载,出现了:读取/Users/bibichuan/.m2/repository/javax/activation/activation/1.1.1/activation-1.1.1.jar时出错; zip END header not found。后来我把依赖注释掉,结果出现了:javax.activation:javax.activation-api:jar:1.1.1 was not found in https://repo.maven.apache.org/maven2。

主要的问题就是需要我在模块中引入 jeecg-system-biz 这个东西,但是随之而来的就是一系列的问题。

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-biz</artifactId>
</dependency>

【尝试方案】
(1) 找到 idea 默认的 maven 的路径:/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3,然后我修改为了自己的安装路径,然后修改了其中的 setting.xml ,结果还是无效。

(2) 我重新处理了这个idea 的maven,但是我里面配置的 镜像始终无法修改,我也不知道默认的到底在哪里搞的。后来我发现了,只要在pom.xml中配置了 repositories,似乎就不再走 setting.xml 中的配置了。

(3) 当我配置了阿里云的镜像的时候,还有问题:Could not find artifact javax.activation:javax.activation-api:pom:1.1.1 in aliyun,但是死活又找不到这个问题的解决方案,这还真是难办了,陷入了一个死循环中。

(4) 尝试修改依赖源,结果也还是无效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 <repositories>
<repository>
<id>adobe-public</id>
<url>https://repo.adobe.com/nexus/content/repositories/public/</url>
</repository>
<repository>
<id>nexus</id>
<url>https://repo.maven.apache.org/maven2</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>interval:10000</updatePolicy>
</snapshots>
</repository>
</repositories>

【解决方案】
最后经过不断的尝试,我还是通过排除 javax.activation-api 依赖解决了这个问题。

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-system-biz</artifactId>
<version>3.6.1</version>
<exclusions>
<exclusion>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
</exclusion>
</exclusions>
</dependency>
参考文章:
【1】.Maven 3.8.1 报错 Blocked mirror for repositories 解决
【2】.pom.xml中引入repository无效
【3】.Maven pom.xml 设置 repository 不生效解决方案 如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念。
【4】.Maven排除依赖exclusion用法
【5】.Maven 在项目的 pom.xml 文件中 指定 阿里云的景象仓库

5.程序包javax.servlet.http不存在

【尝试方案】
(1) 我尝试了在 javax.servlet 的依赖

1
2
3
4
5
6
7
8
<!-- 解决编译时,报程序包javax.servlet不存在的错误 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!-- 只在编译和测试的时候用 -->
<scope>provided</scope>
</dependency>

【解决方案】
最后的解决方案就是增加了这个 spring-boot-starter-web 依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
参考文章:
【1】.IntelliJ IDEA 出现” java: 程序包javax.servlet不存在、 java: 程序包javax.servlet.annotation”等错误
【2】.Maven:编译时,报程序包javax.servlet不存在的错误(转载)
【3】.IDEA中显示找不到javax.servlet 这是我们少了servlet-api.jar这个jar包(在tomcat的lib目录里面找)
【4】.Springboot分模块项目错误之无法访问javax.servlet.http.HttpServlet 找不到javax.servlet.http.HttpServlet的类文件 springboot项目默认会添加spring-boot-starter和spring-boot-starter-test两个依赖,而web项目需要spring-boot-starter-web依赖。spring-boot-starter,没有web:

6.javax.annotation.jar

提示 java: 程序包javax.annotation不存在

【尝试方案】
(1)增加了 jsr250-api, 但是启动的时候就报错了:The following method did not exist:’java.lang.String javax.annotation.Resource.lookup()’

1
2
3
4
5
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>

(2)将 javax.annotation.Resource 改为 jakarta.annotation.Resource

1
2
3
4
5
// 修改前
import javax.annotation.Resource;

// 修改后
import jakarta.annotation.Resource;

【解决方案】
切换了 api 的版本

1
2
3
4
5
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.1</version>
</dependency>
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。