加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Maven 配置文件 生命周期 常用命令详解

发布时间:2020-05-25 07:50:32 所属栏目:Java 来源:互联网
导读:当前,JVM生态圈主要的三大构建工具:ApacheAnt(带着Ivy)MavenGradle对于初学者,Ant是最清晰的,只要读懂Xml配置文件你就能够理解它干了什么,但是ant文件很容易变的更加复杂。Maven有自己的工程目录规则和内

当前,JVM生态圈主要的三大构建工具:

  • Apache Ant(带着Ivy)
  • Maven
  • Gradle

对于初学者,Ant是最清晰的,只要读懂Xml配置文件你就能够理解它干了什么,但是ant文件很容易变的更加复杂。Maven有自己的工程目录规则和内置的构建生成周期,从而使构建文件更加简单。gradle有很多开箱即用的插件,语法更加短小精悍,易于理解。

在讲解maven之前这里我们先简单比较下Maven和Ant。下面是一个简单的Ant例子。这个例子可以看出我们需要明确的告诉Ant。我们想让他做什么。有一个包含javac任务的编译目标来讲src/main/java的源码编译至target、class目录。需要明确的告诉ant源码在哪里,结果字节码存储在哪里。如何将这些字节码打包成jar文件。

<?xml version="1.0" encoding="UTF-8"?>
<project name="test_HelloWorld" basedir="." default="">
<property name="test" location="test"/>
  <target name="init">
       <mkdir dir="${test}/classess/com/test"/> 
   </target>
 <target name="compile" depends="init">
     <javac srcdir="${test}" destdir="${test}/classess/com/test"/> 
 </target>
 <target name="dist" depends="compile">
     <mkdir dir="${test}/classess/com/test/lib"/>
     <jar jarfile="${test}/classess/com/test/lib/test.jar" basedir="${test}/classess/com/test"/>
 </target>
 <target name="run" depends="compile">
   <java classname="HelloWorld" classpath="${test}/classess/com/test"/>
 </target>
 <target name="clean">
   <delete dir="${test}/classess"/>
 </target>
</project>

在Maven中你只需要创建一个简单的pom.xml。将你的源码放在指定目录下。然后运行mvn install 。就能完成和ant同样的事情。从命令行运行mvn install会处理资源文件,编译源代码,运行单元测试,创建一个jar。然后把这个jar安装到本地仓库为其他项目提供重用性。不用做任何修改,运行mvn site然后在target/site目录找到一个Index.html。这个文件链接了javaDoc和一些关于源代码的报告。

为什么maven运行一个命令就能实现ant定义的一大堆的事情?
看下面我总结的两者优缺点就明白了。

Ant

  1. Ant没有正式的约定如一个一般项目的目录结构。你必须明确告诉Ant哪里去找源代码,哪里放置输出。
  2. Ant是程序化,需要明确告诉的告诉Ant做什么,什么时候做。你必须告诉它去编译,然后复制,然后压缩
  3. Ant没有生命周期,你必须定义目标和目标之间的依赖,你必须手工为每个目标附上一个任务序列

Maven

  • maven拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里,把字节码放到target/class,然后target生成一个jar文件
  • maven是声明式的。你需要做的只是创建一个pom.xml 文件然后将源代码放到默认目录。Maven会帮你处理其他事情
  • maven有一个生命周期,当你运行mvn install的时候被调用,这条命令告诉maven执行一系列的有序步骤。直到到达你指定的生命周期

接下来我们从以下三个方面讲解Maven

  • maven的pom.xml和Settings.xml解析
  • maven命令
  • maven的生命周期

maven的Settings.xml解析

对Maven本身行为的定制

<?xml version="1.0" encoding="UTF-8"?> 
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0   http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<localRepository/> 
<interactiveMode/> 
<offline/> 
<servers/> 
<mirrors/> 
<proxies/> 
<profiles/> 
<activeProfiles/> 
<pluginGroups/> 
</settings> 
  • localRepository,给出本地库的路径,默认值为${user.home}/.m2/repository。该路径在build服务器上非常重要,项目构建过程中可以直接引用本地库中的通用类库。
  • interactiveMode,Maven执行过程中是否需要接受用户输入,默认值为true。
  • usePluginRegistry,是否使用plugin-registry.xml文件管理Maven插件的版本,默认为false。该文件为用户提供了选择,即使用指定版本的Maven插件,而非最新版本的Maven插件。该文件是从Maven 2开始出现的,但是事实上更常用的是在POM中配置Maven插件的版本等参数,所以usePluginRegistry参数往往为false。另外,与settings.xml文件类似,plugin-registry.xml文件也有全局和用户之分。
  • offline,是否支持离线构建系统,默认值为false。如果build服务器由于网络或者安全等原因不能连接远程库,则该参数设置为true。
  • pluginGroups,给出Maven插件所在的groupId,一个可能的groupId使用一个<pluginGroup>给出。该参数只是为了简化执行Maven时的参数,如为了执行如下命令:
mvn org.mortbay.jetty:jetty-maven-plugin:run 

如果在settings.xml文件中配置了如下<pluginGroup>:

 <pluginGroups> 
  <pluginGroup>org.mortbay.jetty</pluginGroup> 
 </pluginGroups > 

则可以直接执行如下命令:

 mvn jetty:run 

servers,给出用以下载或部署类库的服务器信息
mirrors,给出指定类库的镜像服务器信息
proxies,给出代理服务器信息
profiles,给出可用的profile,这里的profile类似于POM中的profile,但是只包含activation,repositories,pluginRepositories和properties等与project无关的信息。
activeProfiles,默认采用的profile,可以有多个profile。

mirrors

<mirror>
 <id>mirrorId</id>
 <mirrorOf>repositoryId</mirrorOf>
 <name>Human Readable Name for this Mirror.</name>
 <url>http://my.repository.com/repo/path</url>
</mirror>
  1. 镜像库的id,用以唯一标识该镜像库,默认default
  2. 镜像库的url,即该镜像库访问位置
  3. 镜像库的name,镜像库的名字
  4. 最后,也是最重要的,是要镜像的远程库。例如,如果要镜像Maven的central库,则设置<mirrorOf>central</mirrorOf>

对于mirrorOf参数,如果该镜像库的目标远程库不止一个,则可以使用 * 表示任意远程库;
external:*表示任何不在localhost和文件系统中的远程库;
r1,r2表示r1库或者r2库;
*,!r1表示除了r1库之外的任何远程库。

此外,定义镜像库还可以提供 layout(默认default),mirrorOfLayouts(默认default,legacy)。

Servers

远程库通常在POM中定义,但是远程库所在的服务器信息,如访问用户名、密码等,往往因为不适合与POM一起发布,所以需要在settings.xml文件中设置。

<server>
 <id>deploymentRepo</id>
 <username>repouser</username>
 <password>repopwd</password>
 <id>siteServer</id>
 <privateKey>/path/to/private/key</privateKey>
 <passphrase>optional; leave empty if not used.</passphrase>
</server>

id,服务器的ID,Maven在连接一个库或者镜像的时候,通过id匹配要连接的服务器;

username,password,连接服务器所需的认证信息;

privateKey,passphrase,连接服务器所需的认证信息。privateKey默认位于${user.home}/.ssh/id_dsa;
filePermissions,directoryPermissions,库中的文件访问权限和目录访问权限。该值的格式采用3位数字,兼容UNIX/Linux下格式;

configuration,访问服务器辅助要传递的参数,通常不必要;

Proxies

<proxy>
 <id>optional</id>
 <active>true</active>
 <protocol>http</protocol>
 <username>proxyuser</username>
 <password>proxypass</password>
 <host>proxy.host.net</host>
 <port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
  1. id,代理的ID,默认default
  2. active,是否激活该代理,默认true
  3. protocol,代理服务器的协议,默认http
  4. username,password,代理服务器用户名,密码
  5. host,代理服务器的主机
  6. port,代理服务器的端口,默认8080
  7. nonProxyHosts,不使用代理服务器的域名,多个域名使用|分割

Pom.xml解析

Maven的pom.xml文件简称POM (Project Object Model),是Maven项目的配置和管理核心。
pom.xml文件包含大量配置信息,这些信息大致可以分为5类。

1.POM的模型版本

<modelVersion>4.0.0</modelVersion>  //说明:在Maven2和Maven3中,只支持4.0.0版本。

2.基本配置

<groupId>...</groupId> 
<artifactId>...</artifactId> 
<version>...</version> 
<packaging>...</packaging> 
<dependencies>...</dependencies> 
<parent>...</parent> 
<dependencyManagement>...</dependencyManagement> 
<modules>...</modules> 
<properties>...</properties> 

3.Build配置

<build>...</build> 
<reporting>...</reporting>

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读