maven的定义:项目生命周期的管理,基于plugin的开源工具。
- maven的生命周期
- 各个周期的定义:如compile、test、deploy等
- 每个生命周期指定一个或多个plugin
- 各个周期的定义:如compile、test、deploy等
- POM
- 项目基本信息
- groupId、artifactid、version、packaging
- 项目基本信息
- dependencies、dependencyManagement
- dependencyManagement管理项目的依赖指定,特别是多个子项目的共同依赖的管理
- dependencies:具体依赖的管理
- parent
- 父pom的依赖说明
- modules
- 多模块工程中用于各个子模块的说明。
- properties
- name-value值对的特殊说明,常用于多处地方同时使用时,在一个地方指定,便于修改和查看。
- groupId、artifactid、version、packaging
- 构建settings设置
- build标签
- 构建时属性的指定
- 可以指定:
- goal:构建生命周期
- resources:路径指定或包含的文件指定,需要特殊说明时使用
- test-resources:测试类文件或路径指定,需要特殊说明时使用
- filters:过滤器,用于特殊的配置文件等的说明。
- plugins:插件配置。用于指定该build使用的plugin,否则使用默认。各个插件配置时除了指定groupid、artifactid、version外,还需要指定特殊的参数,可以见maven官网的插件列表,进行使用。packaging等的说明。
- 对execution的特殊说明:
-
<executions> <!-- 配置插件在哪个阶段使用 --> <execution> <id>echodir</id> <goals> <goal>run</goal> </goals> <phase>verify</phase> <inherited>false</inherited> <configuration> <tasks> <echo>Build Dir: ${project.build.directory}</echo> </tasks> </configuration> </execution> </executions>
- extension:扩展插件。
- reporting标签
- 生成报告配置项,用于site阶段生成各个报表的配置
-
<reporting> <plugins> <plugin> <outputDirectory>${basedir}/target/site</outputDirectory> <artifactId>maven-project-info-reports-plugin</artifactId> <reportSets> <reportSet></reportSet> </reportSets> </plugin> </plugins> </reporting>
多个report使用reportSets:
-
<reporting> <plugins> <plugin> ... <reportSets> <reportSet> <id>sunlink</id> <reports> <report>javadoc</report> </reports> <inherited>true</inherited> <configuration> <links> <link>http://java.sun.com/j2se/1.5.0/docs/api/</link> </links> </configuration> </reportSet> </reportSets> </plugin> </plugins> </reporting>
-
- 生成报告配置项,用于site阶段生成各个报表的配置
- build标签
- project meta data
- name
- description
- url
- inceptionYear
- licenses
- organization
- developers
- contributions
- 环境设置
- issueManagement
- ciManagement
- mailingList
- scm
- prerequisites
- repositories
- pluginRepositories
- distributionManagement:发布设置
-
<distributionManagement> <repository> <id>proficio-repository</id> <name>Proficio Repository</name> <url>file://${basedir}/target/deploy</url> </repository> </distributionManagement>
-
- profiles:类似于settings.xml中的profiles,增加了几个元素,如下的样式:
<profiles> <profile> <id>test</id> <activation>...</activation> <build>...</build> <modules>...</modules> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <dependencies>...</dependencies> <reporting>...</reporting> <dependencyManagement>...</dependencyManagement> <distributionManagement>...</distributionManagement> </profile> </profiles>
- 项目基本信息
- settings.xml
- 示例:
-
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository/> <!-- 指定本地仓库位置 --> <interactiveMode/> <!-- 指定 maven 的运行模式是否为交互模式 --> <usePluginRegistry/> <!-- 目前少用,指定插件配置文件 --> <offline/> <!-- 指定是否为离线模式,在不需要网络交互的时候使用 --> <pluginGroups/> <!-- 指定插件所在的路径,maven 将通过该路径查找插件 --> <servers/> <!-- 指定服务器的用户名、密码等,用于上传,下载文件等 --> <mirrors/> <!-- 指定 maven 主仓库的镜像 --> <proxies/> <!-- 网络代理配置,用于有代理的网络 --> <profiles/> <!-- pom.xml 中的 profile 能够用于公共配置的部分 --> <activeProfiles/> </settings>
示例:<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <servers> <server> <!-- 设置发布 jar 包时的用户名及密码 --> <id>deploymentRepo</id> <username>deployment</username> <password>deployment123</password> </server> </servers> ... <mirrors> <mirror> <!-- 设置 maven 的远程仓库为 nexus --> <id>nexus</id> <mirrorOf>*</mirrorOf> <name>Local Repository</name> <url>http://192.168.1.60:8081/nexus/content/groups/public</url> </mirror> </mirrors> ... <profiles> ... <profile> <!-- 设置 nexus 的路径等 --> <id>nexus</id> <repositories> <repository> <id>central</id> <name>local private nexus</name> <url>http://localhost:8081/nexus/content/groups/public</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <name>local private nexus</name> <url>http://localhost:8081/nexus/content/groups/public</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> ... </profiles> ... <activeProfiles> <!-- 激活 nexus --> <activeProfile>nexus</activeProfile> </activeProfiles> ... </settings>
-
- 示例: