maven学习之从搭建maven环境到在项目中如何使用maven

来源:互联网 发布:jacs在什么数据库 编辑:程序博客网 时间:2024/05/23 19:30
----------maven环境搭建及简单命令使用
1,maven下载地址:maven.apache.org
到达该页面找到左侧download,然后下载Binary zip archive对应的zip包。
2,配置maven环境变量。
   找到环境变量(这里设置系统变量,用户变量同理,这里略),比如我下载的maven解压在"D:\DevelopmentRoot\apache-maven-3.5.2",点击新建按钮,变量名为"m2_HOME",变量值为"D:\DevelopmentRoot\apache-maven-3.5.2",点击确定按钮。然后找到path并编辑,在末尾填写";%m2_HOME%\bin;",点击确定。打开cmd,输入"mvn -v",如果此时出来maven版本号等相关信息,则说明我们部署maven成功了。
3,maven的目录结构:
   src目录为一级目录;main及test及resources目录为二级目录;在main目录下为java目录(三级目录),同理test目录下也为java目录(三级目录);在java目录下为package目录(四级目录)。

4,按照以上maven目录结构创建相应的maven项目。

可到以下地址下载相应maven项目:http://download.csdn.net/download/qq_35255384/10162473

需要注意的是:Assert.assertEquals方法中的两个参数要相等,如果不相等则会报错,详情可百度查找该方法使用

5,找到pom.xml配置文件(该配置文件可下载struts2jar包,具体在struts2-core-2.3.24.jar包里,需要解压该jar包,然后找到该解压后的地址:struts2-core-2.3.24\META-INF\maven\org.apache.struts\struts2-core下即可看到pom.xml文件,将该文件放置到以上maven项目中,与src平级放置)
6,编写好后,打开cmd,切换到4步骤中创建的maven项目地址,比如我创建项目的地址是:D:\code\maven01,切换到该地址下,输入命令:mvn compile 进行编译(第一次执行时间较长,请耐心等待),执行完后,继续执行命令:mvn test ,这个时候会在maven项目中生成一个target的文件夹,该文件夹与src文件夹平级放置,里面包含一些测试报告及相关编译后等class文件等。继续输入命令:mvn package ,则会在target文件夹里生成一个该maven项目的jar包

------------------clean,install命令使用及maven坐标、打包地址讲解

7,maven常用的构建命令:
   mvn -v 查看maven版本;mvn compile 编译maven项目;mvn test对该项目进行测试,生成相应测试报告等;mvn package 打包
   mvn clean 删除target文件夹(包含该文件夹下所有相关文件) mvn install 安装jar包到本地仓库中

其中 mvn clean使用较简单,这里不详细说明,mvn install的命令表示为某个maven项目打包,比如:我此时想将以上创建的maven01项目打成一个类似于junit的jar包供另一个项目maven02使用,则首先我们在使用命令行打包时切换地址到maven01项目下,假如maven01项目地址:D:\code\maven01,输入cmd后切换到D:\code\maven01地址下,然后输入mvn install命令后则会为maven01打个jar包,那么该jar包会放在哪里呢?

默认情况下,该jar包会放在本地仓库:C:\Users\Administrator\.m2\repository下,如果此时你的maven01项目的pom.xml配置的groupId为:com.imooc.maven01

artifactId为:maven01-model,version为:0.0.1SNAPSHOT。以下截取maven01项目中配置情况:

<groupId>com.imooc.maven01</groupId>
   <!--artifactId表示模块名,这里建议使用项目名-->
   <artifactId>maven01-model</artifactId>
   <version>0.0.1SNAPSHOT</version>

则相应的在打maven01的jar包时,会依次根据groupId、artifactId、version生成相应文件夹,所以最后可以查找到本地仓库放置maven01的jar包地址为:

C:\Users\Administrator\.m2\repository\com\imooc\maven01\maven01-model\0.0.1SNAPSHOT下,如果本地仓库找不到jar包,maven会到中央仓库中进行下载,这也是为什么我们引入junit的jar包时并没有对junit的相关类使用mvn install命令但还是能在本地仓库中找到junit的jar包的原因。其实,从专业角度来说,pom.xml中的groupId、artifactId、version三个标签就构成了一个坐标,通过这个坐标就能找到其在仓库中的具体位置,这在后面章节中会逐步说明。(maven02的项目可参照maven01来创建,其中maven02的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表示模块名,这里建议使用项目名-->
   <artifactId>maven02-model</artifactId>
   <version>0.0.1SNAPSHOT</version>
<!--配置junit的依赖包-->
   <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
        <!--添加maven01项目的jar依赖-->
        <dependency>
            <groupId>com.imooc.maven01</groupId>
            <artifactId>maven01-model</artifactId>
            <version>0.0.1SNAPSHOT</version>
        </dependency>
   </dependencies>
</project>


------------------------maven插件archetype之如何学会自动建立maven目录骨架

两种方式:

方式1:首先cmd后切换到想要建立maven工程的地址,比如我想在D:\code下建一个maven03的maven项目,并自动生成maven骨架,切换到D:\code后,输入:mvn archetype:generate后按回车键,会出现Choose a number or apply filter.............(即让你输入一个数字),这里输入:6然后按回车键,此时出现Choose org.apache.maven.archetypes:.......version:(大概意思是让你输入一个archetype插件的版本号),输入:4然后按回车键(maven此时会帮你下载该版本的archetype插件,所以稍等一会儿)。此时出现Define value for property 'groupId':(让你输入groupId编号,如果不清楚groupId则看前面内容,这里略),输入:com.maven03然后按回车,此时出现:Define value for property 'artifactId':,输入:maven03-model然后按回车键,此时出现:Define value for property 'version' 1.0-SNAPSHOT:,输入:0.0.1SNAPSHOT然后按回车键,出现:package:,输入:com.cn.maven.model,然后按回车键,此时出现Y::,输入y然后按回车键,直到看到builed success!则表示构建成功,此时会在D:\code下生成文件夹:maven03-model,里面包含pom.xml及相关maven目录结构。

方式2:cmd切换到D:\code下,依次输入:mvn archetype:generate -DgroupId=com.maven04 -DartifactId=maven04-demo -Dversion=0.0.1SNAPSHOT -Dpackage=com.maven04  然后按回车键,之后出现Choose a number or apply filter.............(即让你输入一个数字),这里输入:6然后按回车键,此时出现Choose org.apache.maven.archetypes:.......version:(大概意思是让你输入一个archetype插件的版本号),输入:4然后按回车键(maven此时会帮你下载该版本的archetype插件,所以稍等一会儿)。知道看到Build Success字样表明你已创建成功。

----------------------maven坐标命名规范

一般groupId标签用:网址简写+项目名来进行命名。比如:com.imooc.maven04;artifactId标签用:项目名+模块名来进行命名,比如:maven04-model;version标签表示版本号。

----------maven本地仓库及远程仓库、镜像仓库地址及如何修改默认的本地仓库地址

maven本地仓库的默认地址:C:\Users\Administrator\.m2\repository

全球远程仓库地址查找方式:在下载的maven文件夹里,在lib中找到jar包名为:maven-model-builder-3.5.2.jar(根据自己版本而定具体名字),将其解压,找到org\apache\maven\model下,有个pom-4.0.0.xml(超级文本),编辑器打开,找到第一个如下标签:

<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>

其中的url值:https://repo.maven.apache.org/maven2即为全球中央仓库地址。

镜像仓库,可以理解成就是一种仓库,用来存放资源的地方,与本地仓库、远程仓库作用一样,默认镜像仓库是没有被放开的,即默认处于关闭状态,

可在conf文件夹里面的settings.xml文件中找到,大概是152行,如下:

<mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>

其中,id标签为一,mirrorOf可自己定义(也可用通配符*号,表示匹配所有镜像仓库),name表示镜像名,可自己定义,url表示你要去下载的资源地址。

注:镜像仓库一旦开启,所有指向其他仓库的访问都会跳转到镜像仓库来,所以一般慎重使用。

比如,我这里引用国内镜像仓库:

<mirror>
      <id>maven04</id>
      <mirrorOf>central</mirrorOf>
      <name>central in china</name>
      <url>http://maven.net.cn/content/groups/public</url>
    </mirror>

怎样修改默认的本地仓库地址呢?

找到conf文件夹下的settings.xml文件,将里面注释掉的localRepository标签(因为默认是关闭的,选用以上的默认地址,需要手动放开进行修改),

比如我想要将我的本地仓库放在D:\code\repository中,则可以这样标记localRepository标签:

<localRepository>D:/code/repository</localRepository>

此时可以通过mvn compile或其他命令来进行验证,执行命令会在D:/code/repository中下载一些资源。

--------------------------eclipse中安装maven插件及使用maven进行打包

首先下载好maven插件,解压后将该文件直接copy到eclipse的dropins文件夹中,然后重启eclipse即可(这种方法简单粗暴且屡试不爽)。

需要配置eclipse指向下载好的maven插件,按以下步骤进行搜索填写:

打开eclipse--->windows----->preferences---->Maven------->Installations(右侧点击Add按钮,Installation home右侧点击Directory按钮,指向下载的maven插件文件地址,点击确定即可)---->User settings(右侧Global settings表示全局设置,User settings表示当前用户下设置,点击右侧browser按钮,指向下载的maven插件下的conf文件里的settings地址)--->点击确定即可。

安装完毕后,新建maven工程,默认会选择........quickstart版本的archetype自动创建maven骨架的插件,点击下一步,此时会让你输入:groupId,artifactId,最后点击finish即可。要运行maven项目进行打包等操作时,找到pom.xml配置文件,右键Run as找到maven build,会让你选择哪一种命令来操作,在右侧Goals文本框中输入:package,点击Run,直到控制台输入Build Success字样表示打包成功,此时,在工作空间中即可找到该jar包。

-----------maven声明周期了解

完整的项目构建过程:清理、编译、测试、打包、集成测试、验证、部署。

maven声明周期:clean清理项目;default构建项目;site生成站点。

clean清理项目分为:pre-clean执行清理前的工作;clean清理上一次构建生成的所有文件;post-clean执行清理后的文件。

default构建项目(核心):compile,test,package,install

site生成项目站点:pre-site在生成项目站点前要完成的工作;site生成项目站点文档;post-site生成站点后要完成的工作;site-deploy发布生成的站点到服务器上。

------------怎样修改maven默认的jdk版本?

maven默认的jdk版本是jdk1.5,这就会导致我们打包后在JRE System Library中看到jdk为1.5的版本,实际上我们项目中用到的可能是1.7或者1.8或者其他,那么怎么修改呢?

找到maven文件中conf文件下的settings.xml文件,找到<profiles>标签,在里面添加:

<profile>
      <id>jdk-1.7</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.7</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
      </properties>
    </profile>

之后在新建maven项目,就会看到jdk为1.7了,当然如果想默认是其他jdk版本,只要修改该参数即可。

------------pom.xml解析

<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/xsd/maven-4.0.0.xsd">
  <!-- 指定当前pom的版本 -->
  <modelVersion>4.0.0</modelVersion>

  <groupId>反写的公司网址+项目名</groupId>
  <artifactId>项目名+模块名</artifactId>
  <!-- 一般版本号为三位数字,第一个数字表示大版本号;第二个数字表示分支版本号;第三个数字版本号表示小版本号。
  版本后缀含义:snapshot快照,alpha内部测试,beta公测,Release稳定版本,GA正式发布 -->
  <version>当前项目版本号</version>
  <packaging>打包方式,默认为jar,还有war,zip,pom等格式</packaging>
<!-- 项目描述名 -->
  <name>maven1-model</name>
  <!-- 项目地址 -->
  <url>http://maven.apache.org</url>
  <description>项目描述信息</description>
  <developers>开发者信息</developers>
  <licenses>许可证信息</licenses>
  <organization>组织信息</organization>
  <dependencies>
      <dependency>
          <groupId></groupId>
          <artifactId></artifactId>
          <version></version>
          <type></type>
          <!-- scope标签表示依赖范围,有6个值,分别为:compile,provided,runtime,test,system,import
          compile:默认的范围,编译、测试、运行都有效
          provided:在编译和测试时有效
          runtime:在测试和运行时有效
          test:只在测试范围有效
          system:与本机系统相关联,可移植性差
          import:导入的范围,它只使用在dependencyManager标签中,表示从其他的pom中导入dependency的配置
           -->
          <scope></scope>
          <!-- 设置依赖是否可选   默认false -->
          <optional></optional>
          <!-- 排除依赖传递列表 -->
          <exclusions>
              <exclusion></exclusion>
          </exclusions>
      </dependency>
  </dependencies>
  <!-- 依赖的管理 -->
  <dependencyManagement>
      <dependencies>
          <dependency>
              <groupId></groupId>
              <-------------->
          </dependency>
      </dependencies>
  </dependencyManagement>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <!--  -->
  <parent></parent>
  <modules>
      <module></module>
  </modules>
  <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>
          </plugin>
      </plugins>
  </build>
</project>
关于maven的依赖传递可参照我的另一篇文章:http://blog.csdn.net/qq_35255384/article/details/78857619

maven的依赖冲突遵循两个原则:短路优先及就近原则。

短路优先:比如B依赖A,C依赖B,按照依赖传递性,则有C-->B-->A的关系,

如果此时A引入spring的jar包为1.2版本,B引入spring的jar包为1.5版本,则C最终引入spring的jar包为1.5版本

就近原则:比如C依赖A,同时C依赖B,但C的pom.xml配置中先写的是A的坐标,A引入了jdbc的jar包版本为2.3,B引入了jdbc的jar包版本为2.8,则C最终引入的是2.3版本。

关于maven的聚合和集成可参照我的另一篇文章:http://blog.csdn.net/qq_35255384/article/details/78858211

------------------------------------如何用maven创建web项目以及如何使用服务器插件运行web项目

首先新建maven项目,选择artifact Id为web-app结尾(表示新建的是web项目)的archetype版本,GroupId填写:com.org.web-app;Artifact Id填写:webDemo,点击finish。

新建完web项目后jsp会报错,这是因为缺少servlet-api.jar包,进入maven中央仓库:http://mvnrepository.com/ ,搜索servlet-api.jar,然后将该jar包坐标填写到pom.xml中需要注意的是:该jar包的依赖范围为:provided(表示只在打包测试时用到,正式发布不用,因为容器自带,引入可能导致冲突)。在Java Resource下补全maven项目结构:依次新建文件夹:src/main/java及src/test/java两个文件夹。然后右键项目-->build path-->在source中查看文件的输出位置=是否指向target/classes,如果不是则需要进行修改。点击Project Facets查看Dynamic Web Module是否勾选(没勾选需要选中,表示此项目为Web动态项目)。最后点击OK。

怎样用jetty/tomcat插件来运行该项目呢?

首先在maven中央仓库中搜索:jetty-maven,找到jetty插件的坐标,填写到pom.xml中(tomcat同理),完整的pom.xml如下:

<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.org.web-app</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>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- 添加servlet-api.jar,依赖范围仅限于打包和测试运行发布则不需要 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.0</version>
        <scope>provided</scope>       
    </dependency>       
  </dependencies>
  <build>
      <plugins>
          <plugin>
          <!-- 添加jetty插件
              <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.4.8.v20171121</version>-->
        <!-- 使用tomcat插件运行 -->    
            <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>       
            <executions>
                <execution>
                    <!-- 在打包成功后使用jetty:run来运行jetty -->
                    <phase>package</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
          </plugin>
      </plugins>
    <finalName>webDemo</finalName>
  </build>
</project>

最后点击项目右键--->run as Maven build--->输入package直到出现start字样表示成功启动服务(第一次启动下载东西较多,会慢点)。

jetty访问地址:http://localhost:8080/

tomcat访问地址:http://localhost:8080/webDemo/

需要注意的是,如果pom.xml中没有加入<executions>标签内容,则运行项目时输入:jetty:run或者tomcat:run即可运行。

---------------------mvn配置exec插件并运行java指定文件的main方法可参照以下地址:

https://segmentfault.com/a/1190000005043251



阅读全文
0 0