最简单的pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
</project>
project root
modelVersion - should be set to 4.0.0
groupId - the id of the project's group.
artifactId - the id of the artifact (project)
version - the version of the artifact under the specified group
url: The URL, like the name, is not required. This is a nice gesture for projects users, however, so that they know where the project lives.
依赖配置
dependency元素可以包含的元素:
- groupId,artifactId,versionId
- type:依赖类型,对应项目定义中的packaging,默认jar
- scope: 依赖范围
- compile:默认依赖范围,在编译,测试,运行时都使用该依赖(spring-code)
- test: 测试时使用的依赖范围,只对测试classpath有效(junit)
- provided:编译,测试时使用的依赖范围(servlet-api,运行时tomcat容器已提供,不需要maven重复引入依赖)
- runtime:运行,测试时使用的依赖范围(JDBC,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动)
- optional:标记依赖是否可选,默认false
- exclusions用来排除传递性依赖
X依赖A,A依赖B
当B的optional设为true时,那么B只能在A中使用,而不会主动传给X,X如果需要使用B,则需要显式地引用B 如果B的optional默认为false,而且X不需要使用B,则在X用exclusions排除对B的使用
- classifier: 可以是任意的字符串,用于拼接在GAV之后来确定指定的文件
关于snapshot和release的使用
1.协同开发时,如果A依赖B,因为B会更新,所以B应当使用snapshot版本 如果B使用release版本,如果B每次更新后都使用一个稳定的版本号,会造成版本泛滥。如果B一直使用单一的版本号,因为A所使用的本地repository一般不会频繁地更新release版本,所以A可能接收不到B的更新。
2.如果是正式环境,不得使用snapshot版本 因为第三方库更新snapshot后,再去构建项目时,maven会去远程repository下载snapshot最新版本,这可能会导致项目报错
打包war包
- packaging默认为jar,生成finalName.jar
- maven-jar-plugin
archiveClasses表示是否将class打包,默认false 正常的war类型工程,java代码编译后的类文件放在WEB-INF/classes目录下,散装。当参数配置为true时,会将所有的class文件打包成一个jar包,jar的名字与war的名字一致(除了后缀)。然后把这个jar放到WEB-INF/lib目录下,此时WEB-INF/classes目录下是空的。
attachClasses表示发布war包的时候是否同时发布一个jar包(只有classes,不包含页面相关文件)。该jar包的classifier默认为classes。
archiveClasses和attachClasses参数可以同时配置为true。此时打包文件中含有lib,不含classes。发布时会同时发布classifier为classes的jar包。
来自: my.oschina.net/huanger/blo…
filtering: www.iteye.com/blog/xj84-1…