Maven学习笔记

来源:互联网 发布:太阳帆轨迹优化 编辑:程序博客网 时间:2024/05/16 23:41

《项目管理利器——maven 》学习笔记

Maven的安装

Maven下载地址
选择 apache-maven-3.3.9-bin.zip
下载后解压。
配置环境变量:
1. 新建环境变量M2_HOME,值为maven解压的地址,例如:D:\maven\apache-maven-3.3.9
2. 在Path变量的值后面添加;%M2_HOME%\bin;
验证配置成功:win+r cmd 输入mvn -v 如果能出现相关信息则成功。


maven项目目录结构:

src-main    -java        -package(自定义的包)-test    -java        -package-resources(存放一些资源文件)

手工编写第一个maven项目:

创建文件夹及编写文件

maven01(project name)    -src        -main            -java                -com/maven/imooc/model/HelloWorld.java        -test            -java                -com/maven/imooc/model/HelloWorldTest.java    -pom.xml

HelloWorld.java

package com.imooc.maven01.model;public class HelloWorld {    public String sayHello() {        return "Hello World!";    }}

HelloWorldTest.java

package com.imooc.maven01.model;import org.junit.*;import org.junit.Assert.*;public class HelloWorldTest {    @Test    public void testHello() {        Assert.assertEquals("Hello World!", new HelloWorld().sayHello());    }}

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <!-- 包名 -->    <groupId>com.imooc.maven01</groupId>    <!-- 模块名 建议使用项目名 -->    <artifactId>maven01-model</artifactId>    <!-- 版本 -->    <version>0.0.1-SNAPSHOT</version>    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.10</version>        </dependency>    </dependencies></project>

在cmd中项目目录下运行mvn compile 看到BUILD SUCCESS即运行成功 (maven下载慢的话可以看这篇博客解决:传送门
然后运行mvn test 看到BUILD SUCCESS即运行成功
会在项目根目录下生成文件夹target
运行mvn package


maven常用构建命令

  1. mvn -v 查看maven版本。
  2. mvn compile 编译。
  3. mvn test 测试。
  4. mvn package 打包。
  5. mvn clean 清除maven生成的target目录。
  6. mvn install 将生成的jar安装到本地仓库中。

构建第二个maven项目

Speak.java

package com.imooc.maven02.util;import com.imooc.maven01.model.HelloWorld;public class Speak {    public String sayHi() {        return new HelloWorld().sayHello();    }}

SpeakTest.java

package com.imooc.maven02.util;import org.junit.*;import org.junit.Assert.*;public class SpeakTest {    @Test    public void testSayHi() {        Assert.assertEquals("Hello World!", new Speak().sayHi());    }}

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.imooc.maven02</groupId>    <artifactId>maven02-model02</artifactId>    <version>0.0.1-SNAPSHOT</version>    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.10</version>        </dependency>        <dependency>            <groupId>com.imooc.maven01</groupId>            <artifactId>maven01-model</artifactId>            <version>0.0.1-SNAPSHOT</version>        </dependency>    </dependencies></project>

在maven01项目目录下执行mvn install 将该项目发布到本地仓库中
然后在maven02项目下执行mvn compile。
pom.xml中的依赖会在本地仓库中查找,如果没有就去网上仓库中心下载到本地仓库。


maven自动创建目录

在项目根目录下打开cmd窗口(shift+右键—>cmd)
1. 输入archetype:generate,然后按照提示进行选择(会卡在奇怪的地方,运行mvn archetype:generate -DarchetypeCatalog=internal可以解决)
出现choose a number or apply filter,貌似前面是一些模板,直接回车。
2. archetype:generate -DgourpId=组织名,公司网址的反写+项目名称
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所在的包名
mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=com.imooc.maven04 -DartifactId=maven04-demo -Dversion=1.0.0-SNAPSHOT -Dpackage=com.imooc.maven04.demo -DarchetypeCatalog=internal


Maven中的坐标和仓库

构造通过坐标作为其唯一标识,如

<groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version>

更改本地仓库位置:
打开…\apache-maven-3.3.9\conf\settings.xml
找到<settings>标签,中间添加<localRepository>要存放本地仓库的位置(例如D:/repo)</localRepository>


用Eclipse创建Maven项目

在Eclipse安装Maven(虽然Eclipse自带maven插件的。

右键new—>maven project,选择quickstart
运行:在pom.xml右键run as—>Maven build…
Goals处输入:compile 点击run


Maven生命周期

Maven定义了三套生命周期,三套生命周期之间相互独立

  • clean生命周期
pre-clean:执行清理前的工作;clean:清理上一次构建生成的所有文件;post-clean:执行清理后的工作
  • default生命周期
validategenerate-sourcesprocess-sourcesgenerate-resourcesprocess-resources 复制并处理资源文件,至目标目录,准备打包。compile 编译项目的源代码。process-classesgenerate-test-sources process-test-sources generate-test-resourcesprocess-test-resources 复制并处理资源文件,至目标测试目录。test-compile 编译测试源代码。process-test-classestest 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。prepare-packagepackage 接受编译好的代码,打包成可发布的格式,如 JAR 。pre-integration-testintegration-testpost-integration-testverifyinstall 将包安装至本地仓库,以让其它项目依赖。deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
  • site生命周期
pre-site 执行一些需要在生成站点文档之前完成的工作site    生成项目的站点文档post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备site-deploy 将生成的站点文档部署到特定的服务器上

运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。

Maven插件

Maven的核心分发包只有不到3MB的大小,Maven会在需要的时候下载并使用插件,对于插件本身,为了能够复用代码,它往往能够完成多个任务。Maven的生命周期与插件相互绑定,用以完成实际的构建任务。具体而言是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。

<build>    <plugins>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-source-plugin</artifactId>            <version>2.4</version>            <executions>                <execution>                    <phase>package</phase> <!--绑定到的目标阶段-->                    <goals>                        <goal>jar-no-fork</goal> <!--目标方式,无分支-->                    </goals>                </execution>            </executions>            <configuration>                <outputDirectory>/absolute/path/to/the/output/directory</outputDirectory> <!--输出路径-->                <finalName>filename-of-generated-jar-file</finalName>                <attach>false</attach>            </configuration>        </plugin>    </plugins></build>

Maven中pom.xml的解析

1.根元素 project2.modelVersion 固定版本4.0.0 指定了当前pom的版本3.坐标 <groupId>,<artifactId>,<version>,<packageing>    groupId 反写的公司网址+项目名    artifactId 项目名+模块名    version 版本号 第一个0表示大版本号,第二个0表示大版本号,第三个0表示大版本号。如:0.0.1snapshot    (snapshot 快照/ alpha 内部测试/ beta 公测/ Release稳定/ GA正式发布)    packaging 打包方式 默认是jar4.name :项目描述名    url:项目的地址    description:项目描述    developers:开发人员列表    licenses:许可证    organization:组织信息5.dependencies列表<scope>依赖范围: compile:默认范围,编译测试运行都有效 provided:在编译和测试时有效 runtime:在测试和运行时有效 test:只在测试时有效,典型的是Junit system:在编译和测试时有效,与本机系统关联,可移植性差 import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置<optional>:设置依赖是否可选 默认FALSE<exclusions>:排除依赖传递列表,例如A依赖B,B依赖C,那么在项目A中会导入B和C,但是只想导入B,则可以在这里添加C的坐标,使得C不被导入6.dependencyManagement依赖管理,仅仅启到定义的作用,用于定义parent,子模块继承。7.build 构建行为提供相应的支持plugins插件列表8.<parent><modules> 可以指定多个模块一起编译    <module></module>    <module></module></modules>

Maven依赖冲突

不同版本的构件
1.短路优先
2.先声明先优先,如果路径长度相同,则谁先声明,先解析谁


使用maven构建web项目

新建Maven项目,在Filter处选择webapp
配置pom.xml加入Servlet
配置jetty或者Tomcat服务器

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.imooc.webdemo</groupId>    <artifactId>webdemo</artifactId>    <packaging>war</packaging>    <version>0.0.1-SNAPSHOT</version>    <name>webdemo Maven Webapp</name>    <url>http://maven.apache.org</url>    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.10</version>            <scope>test</scope>        </dependency>        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <version>3.0.1</version>            <scope>provided</scope>        </dependency>    </dependencies>    <build>        <finalName>webdemo</finalName>        <plugins>            <plugin>                <!-- <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId>                     <version>9.4.1.v20170120</version> -->                <groupId>org.apache.tomcat.maven</groupId>                <artifactId>tomcat7-maven-plugin</artifactId>                <version>2.2</version>                <executions>                    <execution>                        <!-- 在打包成功后运行服务器 -->                        <phase>package</phase>                        <goals>                            <goal>run</goal>                        </goals>                    </execution>                </executions>            </plugin>        </plugins>    </build></project>

学习感悟:简单的了解了Maven的用途和使用方法。体会到了用Maven来构建项目的方便之处。

0 0