pom: project object model 项目对象模型
1, dependencies 标签
2, properties标签: 管理属性
dependency标签
补充: maven在下载依赖的时候,会把指定依赖包所依赖的包下载下来
3, build标签: 指定如何构建当前项目
source : 指定当前构建的source目录
plugin: 指定构建时使用的插件
4, packing: 指定当前构建项目的类型
补充: pom是可以继承的
5, maven插件 plugins
maven实际是依赖插件执行的框架,每个任务都是由插件执行的.
两种类型:
build plugins: 在构建时执行,需要在pom.xml中配置
reporting plugins: 在网站生成过程中执行,也需要在pom.xml中配置.
Maven 创建自定义原型 以及 报错 "Invoker process ended with result different than 0!" 解决方案-CSDN博客
6, maven之archetype(骨架)
可以实现基于某个项目快速进行复制重新构建
将某个项目A作为骨架方便其他项目复制直接生成时步骤:
1, 在项目A中build标签下定义插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.2.1</version>
</plugin>
2, 可在项目A目录下执行:
mvn archetype: create-from-project
执行完该命令后会在项目A的target目录下生成一个模型骨架项目
然后在target目录下的archetype下执行 mvn install 即可 骨架在本地生效
3, 在某个目录下执行以下命令,按照demo2骨架来生成新项目:
mvn archetype:generate
-DgroupId=com.project.li
-DartifactId=demo3
-Dversion=1.0.0-SNAPSHOT
-Dpackage=com.project.li
-DarchetypeGroupId=com.example.magic
-DarchetypeArtifactId= demo2-archetype
-DarchetypeVersion=0.0.1-SNAPSHOT -B
-DarchetypeCatalog=local
-DinteractiveMode=false
mvn archetype:generate
-DgroupId=com.project.li #新建项目的工程名
-DartifactId=demo3 #要创建的项目名称
-Dversion=1.0.0-SNAPSHOT #要创建的项目的版本号
-Dpackage=com.project.li #要创建的项目的基础包名
-DarchetypeGroupId=com.example.magic #./m2下的xml里的
-DarchetypeArtifactId= demo2-archetype #./m2下的xml里的
-DarchetypeVersion=0.0.1-SNAPSHOT #./m2下的xml里的
-B
-DarchetypeCatalog=local #从本地仓库选取模板
-DinteractiveMode=false
或者 执行一个Java程序执行:
String groupId = "com.project.li";
String artifactId = "demo4";
String version = "1.0.0-SNAPSHOT";
String packaged = "com.project.li";
String command = "mvn archetype:generate"
+ " -DgroupId="+ groupId
+ " -DartifactId="+ artifactId
+ " -Dversion="+ version
+ " -Dpackage="+ packaged
+ " -DarchetypeGroupId=com.example.magic"
+ " -DarchetypeArtifactId=demo2-archetype"
+ " -DarchetypeVersion=0.0.1-SNAPSHOT"
+ " -B"
+ " -DarchetypeCatalog=local"
+ " -DinteractiveMode=false";
File file=new File("/Users/lizhihao");
//#通过模板进行创建项目
Runtime.getRuntime().exec(command,null,file);
-----------------------------------------------------------------------------------------------------
1,modelVersion -
modelVersion 指定 pom.xml 符合哪个版本的描述符。maven 2 和 3 只能为 4.0.0
2,optional:当出现多项目互相依赖、有父子依赖传递时,如果需要选择性的依赖某些包时可使用optional,防止maven依赖传递时强制依赖父pom的所有jar包,造成项目包很多,加载过慢。
参照:https://www.cnblogs.com/FraserYu/p/11796301.html
3,dependencyManagement:一般用于 父类pom中,即在父类pom中定义依赖包及版本,子模块会自动继承(注:子模块中不能定义版本号,否则会覆盖掉父类的依赖)
参照:https://www.cnblogs.com/feibazhf/p/7886617.html
4,issueManagement:项目的问题管理系统(Bugzilla, Jira, Scarab,或任何你喜欢的问题管理系统)的名称和URL。
5,ciManagement:项目持续集成信息
6,developer:某个项目开发者的信息
7,scm(Source Control Management):配置的代码仓库,供Maven站点和其他插件使用。
8,distributionManagement:项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库。
参照:https://www.cnblogs.com/yangzhilong/p/4329336.html
9,maven在多模块项目时会使用到 packaging标签,需要注意的是,如果使用pom,则在进行编译时不会生成resources下的配置文件,可能导致程序报错,所以一般pom用来设置聚合工程(即专门用来管理包的父项目),子项目模块一般都需要设置成jar。