maven的生命周期以及settings文件

一、基本概念

1.Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具

2.Maven中使用约定,约定java源代码代码必须放在哪个目录下,编译好的java代码又必须放到哪个目录下,这些目录都有明确的约定

3.Maven的每一个动作都拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程

4.只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情

5.使用Maven可以进行项目高度自动化构建,依赖管理(这是使用Maven最大的好处),仓库管理

6.根据Maven坐标定义每个构建在仓库中唯一存储路径,大致为:groupId/artifactId/version/artifactId-version.packaging

二、maven插件

1. 概念
1)Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成

2)例如编译源代码是由maven-compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标。例如maven-compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,testCompile目标用来编译位于src/test/java/目录下的测试源码
2. Maven插件目标的调用方式
1)将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已

    (1)例如Maven默认将maven-compiler-plugin的compile目标与compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标

2)直接在命令行指定要执行的插件目标

    (1)例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关 
3. Maven官方插件列表
1)第一个列表的GroupId为org.apache.maven.plugins,这里的插件最为成熟,具体地址为:http://maven.apache.org/plugins/index.html

2)第二个列表的GroupId为org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:http://mojo.codehaus.org/plugins.html 
4. 常用maven插件
1)maven-archetype-plugin        Archtype指项目的骨架,Maven初学者最开始执行的Maven命令可能就是mvn archetype:generate,这实际上就是让maven-archetype-plugin生成一个很简单的项目骨架,帮助开发者快速上手

2)maven-assembly-plugin         制作项目分发包,该分发包可能包含了项目的可执行文件、源代码、readme、平台脚本等等

3)maven-dependency-plugin       帮助分析项目依赖

4)maven-release-plugin          帮助自动化项目版本发布,它依赖于POM中的SCM信息       

5)maven-resources-plugin        为了使项目结构更为清晰,Maven区别对待Java代码文件和资源文件,maven-compiler-plugin用来编译Java代码,maven-resources-plugin则用来处理资源文件

6)jetty-maven-plugin            为了帮助开发者节省时间,jetty-maven-plugin应运而生,它完全兼容 Maven项目的目录结构,能够周期性地检查源文件,一旦发现变更后自动更新到内置的Jetty Web容器中

7)tomcat-maven-plugin           利用tomcat-maven-plugin插件将项目自动打包并部署到tomcat中      

三、项目构建过程

1. 项目构建过程:
【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】,这六个步骤就是一个项目的完整构建过程
2. maven的生命周期

Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,初学者容易将Maven的生命周期看成一个整体,其实不然。这三套生命周期分别是

1)clean :在进行真正的构建之前进行一些清理工作
 (1)pre-clean  执行一些需要在clean之前完成的工作

 (2)clean  	移除所有上一次构建生成的文件

 (3)post-clean  执行一些需要在clean之后立刻完成的工作
2) default :构建的核心部分,编译,测试,打包,部署等等
validate                        验证工程是否正确,所有需要的资源是否可用
generate-sources
process-sources
generate-resources
process-resources             	复制并处理资源文件,至目标目录,准备打包。
compile                       	编译项目的源代码
process-classes
generate-test-sources
process-test-sources
generate-test-resources
process-test-resources      	复制并处理资源文件,至目标测试目录。
test-compile                    编译测试源代码
process-test-classes
test                            使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署
prepare-package
package                         接受编译好的代码,打包成可发布的格式,如 JAR
pre-integration-test
integration-test
post-integration-test
verify                          运行所有检查,验证包是否有效且达到质量标准
install                         将包安装至本地仓库,以让其它项目依赖
deploy                          将最终的包复制到远程的仓库,以让其它开发人员与项目共享

注意:运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。
   	  此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要
3)site :生成项目报告,站点,发布站点
 (1)pre-site:生成项目站点之前需要完成的工作

 (2)site:生成项目站点文档

 (3)post-site:生成项目站点之后需要完成的工作

 (4)site-deploy:将项目站点发布到服务器
3.常用命令
1)创建Maven的普通java项目:  	mvn archetype:create -DgroupId=packageName -DartifactId=projectName 

2)创建Maven的Web项目:       	mvn archetype:create -DgroupId=packageName -DartifactId=webappName -DarchetypeArtifactId=maven-archetype-webapp 

3)编译源代码:           		mvn compile

4)编译测试代码:          		mvn test-compile   

5)运行测试:                  	mvn test 

6)打包:              			mvn package

7)在本地Repository中安装jar:	mvn install

8)清除产生的项目:          	mvn clean

9)生成eclipse项目:          	mvn eclipse:eclipse

10)组合使用goal命令,如只打包不测试:mvn -Dtest package 

11)只打jar包:               	mvn jar:jar 

12)发布项目到                  mvn deploy     

13)启动tomcat容器          	mvn tomcat7:run   
4. Maven项目的目录约定
MavenProjectRoot(项目根目录)
   |----src
   |     |----main
   |     |         |----java ——存放项目的.java文件
   |     |         |----resources ——存放项目资源文件,如spring, hibernate配置文件(web项目就会在下面有webapp目录)
   |     |----test
   |     |         |----java ——存放所有测试.java文件,如JUnit测试类
   |     |         |----resources ——存放项目资源文件,如spring, hibernate配置文件
   |----target ——项目输出位置
   |----pom.xml ----用于标识该项目是一个Maven项目  

四、settings.xml文件配置

1. settings.xml存在于两个地方:
1) 安装的地方:$M2_HOME/conf/settings.xml

2) 用户的目录:${user.home}/.m2/settings.xml

前者又被叫做全局配置,后者被称为用户配置。如果两者都存在,它们的内容将被合并,并且用户范围的settings.xml优先
如果偶尔需要创建用户范围的settings,可以简单的copy Maven安装路径下的settings到目录${user.home}/.m2
2. 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">

        <localRepository/>     	这个值是构建系统的本地仓库的路径。默认的值是${user.home}/.m2/repository
        <interactiveMode/>    	如果Maven要试图与用户交互来得到输入就设置为true,否则就设置为false,默认为true
        <usePluginRegistry/> 	如果Maven使用${user.home}/.m2/plugin-registry.xml来管理plugin的版本,就设置为true,默认为false
        <offline/>              如果构建系统要在离线模式下工作,设置为true,默认为false。如果构建服务器因为网络故障或者安全问题不能与远程仓库相连,那么这个设置是非常有用的
        <pluginGroups/>       	插件组
        <servers/>              服务器
        <mirrors/>              镜像
        <proxies/>              代理
        <profiles/>             配置文件
        <activeProfiles/>       激活配置

</settings>
3. 重要元素说明
1)pluginGroup
(1) <pluginGroups>
               <pluginGroup>org.mortbay.jetty</pluginGroup>
      </pluginGroups>

(2)这个元素包含了一系列pluginGroup元素,每个又包含了一个groupId

(3)当一个plugin被使用,而它的groupId没有被提供的时候,这个列表将被搜索。这个列表自动的包含了org.apache.maven.plugins和org.codehaus.mojo

(4)例如,有了上面的配置,Maven命令行可以使用简单的命令执行org.morbay.jetty:jetty-maven-plugin:run,如:mvn jetty run
2)servers
(1) <servers>
        <server>
            <id>server001</id>            				这是Server的ID(不是登录进来的user),与Maven想要连接上的repository/mirror中的id元素相匹配
            <username>my_login</username>        		username,password:这两个元素成对出现,表示连接这个server需要验证username和password
            <password>my_password</password>
            <privateKey>${user.home}/.ssh/id_dsa</privateKey>
            <passphrase>some_passphrase</passphrase>
            <filePermissions>664</filePermissions>
            <directoryPermissions>775</directoryPermissions>
            <configuration></configuration>
        </server>
    </servers>
3)mirrors(加快网速,给远程仓库制造一个镜像)
(1) <mirrors>   
        <mirror>
            <id>planetmirror.com</id>        id,name:唯一的镜像标识和用户友好的镜像名称。id被用来区分mirror元素,并且当连接时候被用来获得相应的证书
            <name>PlanetMirror Australia</name>
            <url>http://downloads.planetmirror.com/pub/maven2</url>       url:镜像基本的URL,构建系统敬将使用这个URL来连接仓库,而不是原来的仓库URL
            <mirrorOf>central</mirrorOf>        是要替代的仓库的id
        </mirror>
    </mirrors>
4)proxies
(1) <proxies>
        <proxy>
            <id>myproxy</id>        				id:proxy的唯一标识,用来区别proxy元素
            <active>true</active>        			active:当proxy被激活的时候为true
            <protocol>http</protocol>    			protocol,host,port:代理地址protocol://host:port的分散形式
            <host>proxy.somewhere.com</host>
            <port>8080</port>
            <username>proxyuser</username>    		username,password:两个元素成对出现,提供连接proxy服务器时的认证
            <password>somepassword</password>
            <nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>    这里列出了不需要使用代理的hosts
        </proxy>
    </proxies>
5) profiles
(1) <profiles>
        <profile>
            <id>test</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <jdk>1.5</jdk>
                <os>
                    <name>Windows XP</name>
                    <family>Windows</family>
                    <arch>x86</arch>
                    <version>5.1.2600</version>
                </os>
                <property>
                    <name>mavenVersion</name>
                    <value>2.0.3</value>
                </property>
                <file>
                    <exists>${basedir}/file2.properties</exists>
                    <missing>${basedir}/file1.properties</missing>
                </file>
            </activation>
            ...
        </profile>
    </profiles>
    
(2) settings.xml中的profile是pom.xml中的profile的简洁形式

(3) 它包含了激活(activation),仓库(repositories),插件仓库(pluginRepositories)和属性(properties)元素

(4) profile元素仅包含这四个元素是因为他们涉及到整个的构建系统,而不是个别的POM配置

(5) 如果settings中的profile被激活,那么它的值将重载POM或者profiles.xml中的任何相等ID的profiles

(6) 如果所有指定的条件都达到了,那么,activation就被触发,而且不需要一次性全部达到

(7) properties

    <profiles>
        <profile>
                ...
                <properties>
                    <user.install>${user.home}/our-project</user.install>
                 </properties>
                 ...
        </profile>
    </profiles>      //  如果这个profile被激活,那么属性${user.install}就可以被访问了

(8) repositories

    <repositories>
        <repository>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <id>central</id>
            <name>libs-release</name>
            <url>http://113.105.74.141:8081/artifactory/libs-release</url>
        </repository>
        <repository>
            <snapshots />
            <id>snapshots</id>
            <name>libs-snapshot</name>
            <url>http://113.105.74.141:8081/artifactory/libs-snapshot</url>
        </repository>
    </repositories>

(9) plugin repositories

    <pluginRepositories>
        <pluginRepository>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <id>central</id>
            <name>plugins-release</name>
            <url>http://repo1.maven.org/maven2</url>
        </pluginRepository>
        <pluginRepository>
            <snapshots />
            <id>snapshots</id>
            <name>plugins-snapshot</name>
            <url>http://113.105.74.141:8081/artifactory/plugins-snapshot</url>
        </pluginRepository>
    </pluginRepositories>
6) activeProfiles
(1) <activeProfiles>
        <activeProfile>env-test</activeProfile>
    </activeProfiles>

(2) 任何profile id被定义到activeProfile的profile将被激活,不管其他的环境设置怎么样。如果没有匹配的profile被找到,那么就什么事情也不做

参考网址

Maven2的配置文件settings.xml

Maven的生命周期

孤傲苍狼的maven系列博客

maven常用插件解析

注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。
ps : 有错误的还望各位大佬指正,小弟不胜感激

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Maven中配置JDK 11,您需要编辑Mavensettings.xml文件。以下是配置步骤: 1. 打开Mavensettings.xml文件。该文件通常位于Maven安装目录下的conf文件夹中。 2. 在文件中找到以下代码块: ``` <profiles> <profile> <id>default</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> </profile> </profiles> ``` 3. 将上述代码块替换为以下代码块: ``` <profiles> <profile> <id>default</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> </profile> </profiles> ``` 4. 保存并关闭文件。 现在,您已经成功地将Maven配置为使用JDK 11。 ### 回答2: Maven是一个流行的Java项目构建和管理工具,用于自动化构建,依赖管理和项目生命周期。在使用Maven进行项目管理时,我们需要确保它与正确的JDK版本配合使用。为了将Maven配置为使用JDK 11,需要对其settings.xml文件进行修改。 下面是一些步骤来配置Maven使用JDK 11: 1. 首先,需要确保已经安装了JDK 11。如果没有安装,可以从Oracle官网下载并安装最新版本的JDK。 2. 接下来,找到Maven的安装目录。在Maven的bin文件夹中,有一个名为settings.xml的文件。请备份该文件,以便出现问题时可以恢复它。 3. 使用编辑器(如Notepad ++)打开该文件。然后,在其中找到以下代码块: <profiles> <profile> <repositories> <repository> <id>central</id> <url>https://repo.maven.apache.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>https://repo.maven.apache.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> <id>central</id> </profile> </profiles> 4. 在这个profile里面,添加一个名称为“jdk11”的新profile: <profiles> <profile> <id>jdk11</id> <activation> <jdk>11</jdk> </activation> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <maven.compiler.compilerVersion>11</maven.compiler.compilerVersion> </properties> </profile> </profiles> 5. 上面的代码块设置了Maven使用JDK 11,并将编译器源和目标设置为11。这个步骤完成后,保存文件并关闭编辑器。 6. 最后,测试Maven是否成功配置为使用JDK 11。打开命令行,输入以下命令,如果输出内容与以下内容相似即表示配置成功: $ mvn --version Apache Maven 3.6.0 Maven home: /usr/share/maven Java version: 11.0.2, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-11-openjdk-amd64 Default locale: en_US, platform encoding: ANSI_X3.4-1968 OS name: "linux", version: "4.4.0-131-generic", arch: "amd64", family: "unix" 在这个例子中,Java版本显示为“11.0.2”,因此配置已生效。 综上所述,以上步骤描述了如何配置Maven使用JDK 11。配置完成后,我们可以通过Maven构建和管理Java项目,并确保使用正确的JDK版本。 ### 回答3: Maven是一个非常流行的Java构建工具,它可以自动化管理项目的依赖关系、编译、测试和打包等过程。配置Maven时需确保正确配置JDK,以确保项目能够成功构建和运行。本文将介绍如何在Maven中配置JDK11 setting文件。 1. 安装JDK11 在开始配置Maven之前,需要确保已经安装了JDK11。 2. 设置JDK11的路径 在配置Maven之前,应该先找到JDK11的安装路径。在Windows操作系统中,可以通过以下步骤找到JDK11的安装路径: 打开控制面板 -> 系统和安全 -> 系统 -> 高级系统设置 -> 环境变量 -> 在系统变量中找到“Path”,编辑并在最后加入JDK11的安装路径(例如:C:\Program Files\Java\jdk-11.0.1\bin)。 3. 配置Mavensettings.xml文件 找到Mavensettings.xml文件。如果是在IDE(如Eclipse或IntelliJ IDEA)中使用Maven,则在Maven项目中的“Maven Repositories”选项卡中可以看到settings.xml文件。打开该文件并找到<profiles>标签。在该标签中添加以下代码: <profile> <id>jdk-11</id> <activation> <activeByDefault>true</activeByDefault> <jdk>11</jdk> </activation> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <maven.compiler.release>11</maven.compiler.release> </properties> </profile> 其中,<id>为配置名称,可自定义;<jdk>为JDK版本号,此处为11;<maven.compiler.source>、<maven.compiler.target>和<maven.compiler.release>表示编译时使用的JDK版本号,也应为11。 4. 检查配置是否成功 在配置完成后,应该检查Maven是否成功使用JDK11。打开命令行窗口并输入以下命令以检查Maven的版本和Java的版本是否一致: mvn -version 如果显示的Java版本与JDK11一致,则配置成功。否则需要检查配置是否错误或者重启IDE以使配置生效。 通过以上步骤可以成功配置Maven的JDK11 setting文件,满足项目构建和运行需要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值