1.pom文件
<?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>4.0.0</modelVersion> //设置POM version, 固定设定该值为4.0.0 <groupId>com.company.coffee</groupId> //项目组织 <artifactId>coffeeHome</artifactId> //项目名称 <version>1.0-SNAPSHOT</version> //项目版本 <packaging>pom</packaging> //打包方式, 父项目为pom //子项目定义为jar、war, 默认jar <dependencies>coffeeHome</dependencies> //项目描述 <modules> <module>biz</module> <module>web</module> <module>dal</module> //本项目pom packaging需设置为pom <module>bundle-war</module> //引入子项目绝对路径 <module>common</module> <module>commontest</module> </modules> <properties> //定义变量, 统一管理, 特别在引入一堆包的时候, 例如spring... <spring_version>3.0.6.RELEASE</webx_version> </properties> <dependencyManagement> //集中管理依赖版本, 子pom中只需要添加依赖, 自动向父方向寻找dependencyManagement中的版本 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring_version}</version> <scope>compile</scope> <optional>true</optional> //可选依赖, 传递依赖的时候不引入 <exclusions> //排除依赖, 传递依赖的时候删除 <exclusion> <groupId>org.springframewor</groupId> <artifactId>xxx</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </dependencyManagement> <dependencies> //这里的依赖直接被所有的子项目继承 <dependency> ...... </dependency> </dependencies> <build> <resources> //引入自己的源代码路径 <resource> <directory>src/config/resources</directory> </resource> </resources> <plugins> <plugin> //编译java类时支持泛型 <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> <plugin> //单元测试 <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <testFailureIgnore>true</testFailureIgnore> <testNGArtifactName>com.alibaba.external:test.testng.jdk15 </testNGArtifactName> </configuration> </plugin> <plugin> //单元测试覆盖率 <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.5.1</version> <configuration> <formats> <format>xml</format> <format>html</format> </formats> </configuration> <executions> <execution> <phase>install</phase> <goals> <goal>cobertura</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
2.dependencies 与 dependencyManagement
dependencyManagement 多用于在父工程中引入依赖,并制定version、scope,子工程使用的时候只需要引入依赖,可以自动继承父工程中指定的version、scope
直接通过 dependencies 引入的依赖完全被子工程继承,不需要子工程再引入。
若子工程指定version,子工程直接引入该版本。
若子工程引入依赖且未指定版本,到父工程寻找dependencyManagement 中指定的版本。
若子工程未引入依赖,除非父工程直接dependencies 引入依赖,子工程才会引入依赖。
3.scope 定义依赖范围
compile: 编译、测试、运行有效
test: 测试有效,例如 junit
provided: 编译、测试有效,运行无效,例如 servlet-api
runtime: 编译无效,测试、运行有效 JDBC驱动实现
system: 本地环境上的依赖
4.可选依赖和排除依赖
可选依赖:在dependency 中加入<optional>true</optional>
作用,A project pom 中对依赖B加了optional,则C在依赖A的时候对B的传递依赖失效,不引入B
排除依赖:在dependency 中加入 <exclusions><exclusion> ... </exclusion></exclusions>
作用,引入依赖的时候删除<exclusion>中指定的依赖
可以理解为可选依赖是在构建一个工具类项目pom时使用,对外提供服务的时候不至于使被服务者依赖太多,排除依赖是构建一个应用项目pom是使用,在使用依赖服务的时候删除一些不需要的依赖
查看依赖
依赖列表 mvn dependency:list
依赖树 mvn dependency:tree
依赖分析 mvn dependency:analyze
5.maven 的一些插件和简单命令
cobertura 单元测试覆盖率 mvn cobertura:cobertura
findbugs 静态检查java代码 mvn findbugs:findbugs
mvn jar:jar 打包成jar格式
mvn war:war 打包成war格式
mvn compile 编译源代码
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目中的配置打包
mvn install 将生成的包发布到本地仓库
mvn eclipse:eclipse 生成eclipse项目文件
mvn eclipse:clean 删除eclipse项目文件和classpath文件
创建一个maven工程
mvn archetype:create -DgroupId=com.company.coffee -DartifactId=coffeeHome -Dversion=1.0-SNAPSHOT -Dpackage=com.company.coffee.coffeeHome