groupId,artifactId,packaging,version 是Maven的坐标, 它们唯一标识了一个项目,name,url是pom提供的描述性元素,它们给人提供可阅读的名字
groupId:团体名,组织名
artifactId:在groupId下表示一个单独项目的唯一标识
version:版本号, 加SNAPSHOT表示正在开发中
packaging:项目类型,默认为jar,打包后文件格式。类型为jar的,输出jar文件,类型为war的项目,生成一个web应用
1、创建最简单的项目
在d:project下创建
命令:mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=demo
执行命令后, 就会在d:project创建文件夹为demo的项目
项目名:默认为-DartifactId=demo指定的名
java包名:默认为-DgroupId=ce.demo.mvn指定的名, 但也可以指定包名使用参数:-DpackageName=com.demo.mvn2
1、Maven插件和目标
命令:mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=demo
archetype称为插件
create称为目标(即明确的任务)
一个插件包多个目标
上条命令中, create目标定义了一个配置属性archetypeArtifactId,它有一个默认值maven-archetype-quickstart。maven-archetype-quickstart生成一个最小项目的躯壳,包括一个POM和一个类。Archetype插件可以用来生成复杂如web应用的项目,以及使用Archetype插件自定义自己的项目集合。
mvn archetype:create -DgroupId=ce.demo.mvn -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart
2、在pom.xml所在的文件下执行
mvn package 打包,生成jar文件
mvn install 安装到本地仓库
3、Maven本身不知道如何编译你的代码,不知道如何生成jar文件,它将这些任务交给了Maven插件,如Compiler插件和Jar插件,在需要的时候,将它们下载, 并定时的从Maven中央仓库更新。当你下载Maven的时候,只是一个基本躯壳的Maven核心,它知道如何解析命令行,管理classpath,解析POM文件,在需要的时候下载Maven插件。这样,Maven核心与插件分离。
4、一个生命周期的阶段可能绑定多个目标,如:mvn package 有多个目标被执行, 当执行mvn package时, package以前的生命周期也被执行
5、Maven仓库存放的文件目录格式:
/groupId/artifactId/verfsion/<artifactId>-<version>.<packaging>
6、Maven依赖有传递性,A依赖B,B依赖C,D, 那么只需要定义A依赖B即可,
7、创建的简单项目中依赖junit, 在.m2/repository/junit/junit/3.8.1下有junit-3.8.1.jar和junit-3.8.1.pom(定性所依赖的),还有Maven用来验证已下载构件准确性的校验和文件
8、当为项目创建jar文件时,它的依赖不会被一起在生成的构件中,只是将当前的项目java文件编译
9、当用Maven生成war,可以配置Maven,将所依赖的构件也包含进来。
如:依赖的Servlet 想在编译的时候需要,生成war包时,不将servlet包含进来,可以给依赖的servlet设置provided范围,这样在编译的时候使用, 在生成war包时,不将其包含在war包中
10、mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch04 -DartifactId=simple-weather -DpackageName=org.sonatype.mavenbook -Dversion=1.0
11、可在在pom.xml文件中,定义组织,法律,开发人员信息
12、archiveClasses 将资源文件打成jar形式,testFailureIgnore忽略测试失败
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1-beta-1</version>
<configuration>
<!-- archiveClasses 将资源文件打成jar形式 -->
<archiveClasses>true</archiveClasses>
</configuration>
</plugin>
</plugins>
</build>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
13、跳过单元测试
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
14、archetypeArtifactId=maven-archetype-webapp
mvn archetype:create -DgroupId=com.jd.card -DartifactId=card -DarchetypeArtifactId=maven-archetype-webapp -Dversion=1.0
15、子模块中只设置artifactId, groupId和version没有设置,默认从父模块继承了。实际上子模块从父模块继承一切东西,包括依赖,插件配置等等。
16、version的值为${project.version},这个值是一个属性引用,指向了POM的project/version的值,也就是这个POM对应的version,依赖其他模块时使用, 使得各模块的版本号是一致的。
17、依赖范围
compile(默认,对于编译、测试、运行三种classpath都有效)、test: 测试依赖范围(JUnit)、provided: 已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍。