idea工具maven projects里面有9种生命周期,今天刚好遇到,顺便分享下自己的理解。生命周期是包含在一个项目构建中的一系列有序的阶段。
最常用的两种打包方法:
1、clean,package(如果报错,很可能就是jar依赖的问题)
2、clean,install
maven 9种生命周期:
clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy
clean:清理,在进行真正的构建之前进行一些清理工作,移除所有上一次构建生成的文件。执行该命令会删除项目路径下的target文件,但是不会删除本地的maven仓库已经生成的jar文件。
resources:复制文件到target目录,一定要先指定resources文件目录,再指定要复制的文件。
默认情况下,如果没有指定resources,目前认为自动会将src/main/resources下的.xml文件放到target里头的classes文件夹下的package下的文件夹里。
如果设定了resources,那么默认的就会失效,因此需要设置指定resources文件夹。
compile:编译源码,编译生成class文件,编译命令,只编译选定的目标,不管之前是否已经编译过,会在你的项目路径下生成一个target目录,在该目录中包含一个classes文件夹,里面全是生成的class文件及字节码文件。
test:单元测试,测试。
jar:生成jar包。
install,安装至本地仓库,将包安装至本地仓库,以让其它项目依赖。该命令包含了package命令功能,不但会在项目路径下生成class文件和jar包,同时会在你的本地maven仓库生成jar文件,供其他项目使用(如果没有设置过maven本地仓库,一般在用户/.m2目录下。如果a项目依赖于b项目,那么install b项目时,会在本地仓库同时生成pom文件和jar文件,解决了上面打包package出错的问题)。
deploy:复制到远程仓库。
package:打包,将工程文件打包为指定的格式,例如JAR,WAR等。这个命令会在你的项目路径下一个target目录,并且拥有compile命令的功能进行编译,同时会在target目录下生成项目的jar/war文件。如果a项目依赖于b项目,打包b项目时,只会打包到b项目下target下,编译a项目时就会报错,因为找不到所依赖的b项目,说明a项目在本地仓库是没有找到它所依赖的b项目,这时就用到install命令了
其他maven命令:
verify:核实,检查package是否有效、符合标准。
validate:验证,验证工程是否正确,所需的信息是否完整。
build:功能类似compile,只是只对整个项目进行编译。
相同点:将java文件编译为class文件,并且将src/main/resources下的.xml文件复制到target目录。
不同点:compile不会编译test,build会编译test 。compile会根据pom.xml里面的命令,build不会。
site:站点,生成项目的站点文档
build和compile的区别
**Compile:**只编译选定的目标,不管之前是否已经编译过。
**Build:**是对整个工程进行彻底的重新编译,而不管是否已经编译过。Build过程往往会生成发布包,这个具体要看对IDE的配置了,Build在实际中应用很少,因为开发时候基本上不用,发布生产时候一般都用ANT等工具来发布。Build因为要全部编译,还要执行打包等额外工 作,因此时间较长。
总结
:
mvn clean package
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
mvn clean install
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
mvn clean deploy
依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。