当前位置: 首页 > article >正文

spring-ai-alibaba-examples项目编译运行

编译

软件

mac-m芯片arm架构

maven-3.9.9

IDEA-2023.3.8

JDK-17(zulu17.56.15)

IDEA设置

工程设置

maven设置

Compiler设置

执行编译

注意观察执行的命令是否是配置的maven+settings.xml、jdk等,本人就碰到了个坑明明上述配置都完成了的,但执行clean、compile等时候却使用默认配置,导致编译失败

默认配置

1、我本身系统使用brew安装了jdk8,也配置了JAVA_HOME等变量。这样IDEA会直接读到这个jdk路径作为默认的jdk(有点像Spring的约定大于配置的思想)实际上很多软件都会尝试自动读环境变量JAVA_HOME的配置(MAVEN_HOME也是如此)

而这个工程要求jdk版本17以上,因此不得不下载一个tar形式的jdk(但不对其做任何环境变量的配置,只是找个目录解压下来就行),然后仅对这个项目使用该jdk17

2、maven是下载的tar形式的3.9.9版本,其conf目录下有个settings.xml文件

这里又是约定大于配置的思想,在默认情况下若IDEA等工具配置maven时,会使用其conf下的settings.xml,而这个xml文件你不修改的它的话,在maven运行时又会有默认配置,比较关注的是

1)本地仓库localRepository:默认为【xxxxx/.m2/Repository】

2)远程仓库mirror:默认为【https://repo.maven.apache.org/maven2/】

这俩值不改的话会有一些痛苦的事情:编译时巨慢(因为从远程仓库里下载jar包太慢了);时间久了c盘要爆炸(因为上述.m2路径是在用户路径下,如果是windows电脑就在C盘里)

因此不管什么姿势使用maven时,都先把conf/.settings.xml文件里的这俩值改一下,远程仓库建议直接用aliyun,本地仓库本人一般是放在【xxx/xxx/repositories/default/Repository】

再回到本次项目,公司一般会有自己的maven配置,那又希望这个项目用一个本地仓库、公司用一个本地仓库,其实思想类似python工程的Virtualenv Environment是类似的

这里我配置了3个settings文件,一个默认使用,一个公司项目使用,一个是单独为这个项目编译使用,互不影响

注意事项

在执行maven命令时,一定要注意所使用的命令是否是自己期望的,否则会有一些奇奇怪怪的错误

运行

maven依赖冲突

这是比较头疼的一件事情,依赖冲突本身概念简单但会碰到各种各样奇怪的事情:

编辑期 & 编译期

先说可能会碰到什么样的现象

1、Run maven clean install成功(即使用maven没问题)但代码就是报错,而且是那种不点开这个代码文件就不会报错,但只要一点开就报错,刷新后文件夹不报错但点开文件又报错

1)可能是IDEA自身索引问题,用的时间比较久了、项目比较大文件很多:可以使用更新版本的IDEA、Reload All Maven Projects、Repair IDE、Invalidate caches等

2)可能maven依赖冲突(随着IDEA工具越来越完善,但是公司项目代码和依赖越积越多,这个情况才是碰到最多)

这种比较好排查,代码里报错的不认识的标识符会显示【Cann't no resolve xxx】然后import位置会是灰色+红色,类似下面这样

点开灰色的model可以定位到项目的本地依赖(注意是本地依赖,这里为啥要强调呢?留个悬念)

但是困惑的是,在我们IDEA里显示这个类明明是有的啊

原因:公司项目一般是使用专门的文件统一管理依赖的<version>字段的,一般不同项目都不会自己管理version,而二方包相互依赖不同业务可能使用一些共同包升级节奏不同,非常容易造成对一些基础包的依赖版本不同,比如公司提供一个common-utils包,而某个业务方使用了最新的但某些业务方却使用旧的,这样当相互依赖时就会导致版本冲突

解决方案:其实是在增加pom依赖的过程中没有遵循好的规范导致的,比如api包应该干净,不应该依赖任何包(然而很少有做到这一点的)等等

临时方案:

3)本地依赖无法覆盖

现在回答一下上面的本地依赖问题:

当我们执行maven clean install时,会向我们本地仓库里写入一个jar包文件

当我们构建工程时,若本地仓库没有会从公司maven仓库里下载到本地仓库里

首先这里有个原则是

运行期

这种情况比较少碰到,我已经没有截图证据了,印象当中是代码编辑、编译、构建jar包、程序启动等过程全都没问题,但偏偏就逻辑执行到时报一些ClassNotFound、方法未找到等错误,拉最新代码来看又看不出问题(因为本地看代码使用的是电脑本地仓库,IDEA报不报错除了依赖你本地仓库外,还有自己的代码索引);当时是通过arthas命令看目前正在运行的jar包所载入的依赖jar包版本、类路径等,才发现其依赖的二方包未更新


http://www.kler.cn/a/591220.html

相关文章:

  • 总结Solidity 的数据类型
  • 【Lava SE】认识异常
  • 注解与设计模式:解锁Java编程的魔法与艺术!
  • RocketMQ 性能优化与调优策略(二)
  • Diffie-Hellman 加密协议介绍 (DH,DHE,ECDHE)
  • 路由器安全研究|D- Link DIR-823G v1.02 B05 复现与利用思路
  • Git:速查手册
  • K8S学习之前站五:清理docker的overlay2 目录
  • 解决vscode连接失败问题--ssh试图写入的管道不存在
  • svn-1.7.22安装
  • 涨薪技术|Kubernetes(k8s)之认识Pod
  • 前端(vue)学习笔记(CLASS 4):组件组成部分与通信
  • Qt 读取数据库
  • 每日一题:动态规划
  • 第17章-用6050走直线和转90度功能 平衡车入门---MPU6050陀螺仪的使用 超详细陀螺仪MPU6050模块输出姿态角(有完整版源码)
  • Oracle 启用 Sql 跟踪的方式
  • 微软OneNote无法同步解决方案
  • 记一次ElasticSearch参数调优
  • Bash环境定制git分支提示符暨JDK版本切换脚本
  • C 语言格式化输入输出详解