Maven——pom.xml

269 阅读3分钟

最简单的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元素可以包含的元素:

  1. groupId,artifactId,versionId
  2. type:依赖类型,对应项目定义中的packaging,默认jar
  3. scope: 依赖范围
    • compile:默认依赖范围,在编译,测试,运行时都使用该依赖(spring-code)
    • test: 测试时使用的依赖范围,只对测试classpath有效(junit)
    • provided:编译,测试时使用的依赖范围(servlet-api,运行时tomcat容器已提供,不需要maven重复引入依赖)
    • runtime:运行,测试时使用的依赖范围(JDBC,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动)
  4. optional:标记依赖是否可选,默认false
  5. exclusions用来排除传递性依赖

X依赖A,A依赖B
当B的optional设为true时,那么B只能在A中使用,而不会主动传给X,X如果需要使用B,则需要显式地引用B 如果B的optional默认为false,而且X不需要使用B,则在X用exclusions排除对B的使用

  1. 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包

  1. packaging默认为jar,生成finalName.jar
  2. 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…