前言
笔者的情况是在maven打包时,有个模块始终某个类报找不到符号,但通过idea的ctrl是能点进去这个类的,并且这个类是在其他模块下。
原理
是循环依赖的问题,比如我的demo模块用到了model模块的一个实体,打包报找不到符号,先去检查maven里pom里有没有导入model模块,然后把model模块install,把model模块打包并安装到本地,此时再去package此demo模块则可以了。来学一下install和package命令的区别。
在Maven中,install
和package
命令都是用于构建项目的,但它们的作用略有不同:
-
mvn package
:- 这个命令会编译你的项目,并将编译后的代码和所有资源文件打包成一个JAR文件(或者WAR文件,如果是Web项目)。
- 在执行
package
之前,它会依次执行以下生命周期阶段:validate
:验证项目是否正确且所有必要信息是否都可用。compile
:编译源代码。test
:使用适当的单元测试框架(如JUnit)运行测试。package
:打包编译后的代码及资源文件成JAR/WAR包。
示例:
mvn package
-
mvn install
:- 这个命令会在执行所有
package
阶段的步骤之后,将打包后的JAR/WAR文件安装到本地的Maven仓库中(通常是~/.m2/repository
)。 - 这样,其他本地项目就可以通过依赖引用这个JAR/WAR文件。
- 在执行
install
之前,它会依次执行以下生命周期阶段:validate
compile
test
package
verify
:运行任何检查以验证打包是否有效且符合质量标准。install
:将打包的工件安装到本地仓库,以便其他项目使用。
示例:
mvn install
- 这个命令会在执行所有
区别
mvn package
只是打包你的项目,不会将生成的包安装到本地Maven仓库。mvn install
不仅打包你的项目,还会将生成的包安装到本地Maven仓库,以便其他项目可以依赖它。
何时使用
mvn package
:如果你只是想要生成一个JAR/WAR文件,进行本地测试或分发。mvn install
:如果你需要其他项目依赖当前项目生成的JAR/WAR文件,或者你正在进行模块化开发,需要将某个模块安装到本地仓库,以供其他模块使用。