maven介绍
maven,依地语意思是 知识的积累
,maven的首要目标就是让开发者在短时间内掌握开发的全过程,它致力于以下几个目标:
构建过程更简单
maven确实隐藏了很多细节。(但是它的运行机制还是要掌握的。)
提供统一的构建系统
maven让一个工程通过 项目对象模型
(project object model )和一系列公共的插件,提供一个统一的构建系统。
提供实战开发的准则
比如,说明、执行、报告单元测试是maven一般构建的一部分,它有一下几个原则:
- 把测试代码放在一个分离的并行的代码树中
- 使用测试用例的命名约定来定位和执行测试
- 测试用例设置他们的环境
maven帮助管理项目工作流(比如版本管理,问题追踪)
maven也认为一个项目应该有标准的目录结构,以便更快理解其他类似结构的项目。
maven安装
maven下载地址,个人推荐二进制版本,解压即用。
maven的运行需要JDK的支持,确保已经配置了 JAVA_HOME
,别忘了配置 M2_HOME
和 PATH
,不再赘述。
注意:maven的版本和JDK的版本不是越高越好,和你所在项目线上环境的maven版本和JDK版本保持一致,不然可能会导致jar冲突等问题
maven的配置详解
MAVEN_OPTS
在环境变量中设置MAVEN_OPTS
,这是jvm运行Maven的选项,比如可以设置成-Xms256m -Xmx512m
settings.xml
分为两种:
- 全局settings.xml:
$M2_HOME/conf/settings.xml
。对本机上的所有项目有效。 - 当前用户settings.xml:
${user.home}/.m2/settings.xml
。对当前用户的所有项目有效。
两者都存在的情况下,会进行一次merge,用户配置优先级更高。在默认的settings.xml配置文件中有所有配置项都有详细说明,可以很快根据自己需求进行配置。
<settings >
<localRepository/> ##本地仓库配置
<interactiveMode/>##是否交互,等待用户输入或者直接使用默认值
<usePluginRegistry/>##
<offline/>##是否尝试联网
<pluginGroups/>##自动加插件名前缀,比如做 mvn dependency:tree 实际上自动加上了org.apache.maven.plugins。
<servers/>## site的目标服务器
<mirrors/>##远程仓库的镜像
<proxies/>## 配置代理
<profiles/>## 个性配置,每个profile有自己的唯一id和激活条件
<activeProfiles/>##永久激活的个性配置
</settings>
关于maven自带的属性,会在下一篇文章讲pom.xml配置时详细讲解。
超级pom.xml
项目的pom文件继承于超级pom文件。
<!-- START SNIPPET: superpom -->
<project>
<modelVersion>4.0.0</modelVersion>
<!-- jar包远程仓库 -->
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!-- 插件包远程仓库 -->
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
<!-- 项目目录结构配置 -->
<build>
<directory>${project.basedir}/target</directory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<scriptSourceDirectory>${project.basedir}/src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
<pluginManagement>
<!-- NOTE: These plugins will be removed from future versions of the super POM -->
<!-- They are kept for the moment as they are very unlikely to conflict with lifecycle mappings (MNG-4453) -->
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<reporting>
<outputDirectory>${project.build.directory}/site</outputDirectory>
</reporting>
<profiles>
<!-- NOTE: The release profile will be removed from future versions of the super POM -->
<profile>
<id>release-profile</id>
<activation>
<property>
<name>performRelease</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<inherited>true</inherited>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<inherited>true</inherited>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<inherited>true</inherited>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<updateReleaseInfo>true</updateReleaseInfo>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
<!-- END SNIPPET: superpom -->