• maven


    maven

    maven

    maven实战:许晓斌

    1,maven的初步

     1.1 安装

    下载maven的3.0.4版本

    设置环境变量中的path

     1.2 本地仓库安装

    1、修改maven目录下的conf中的setting.xml

    参见: 3.1 本地仓库

     1.3新建一个简单的项目

    主要创建文件pom.xml

     1.4 创建代码和测试代码

    源代码应该放置到src/main/java中

    源代码的资源文件应该放置在src/main/resources文件夹中

    测试代码应该放置到src/test/java中

    测试代码的资源文件应该放置在src/test/resources文件夹中

     1.5 运行mvn

    mvn clean -->表示运行清理操作(会默认把target文件夹中的数据清理)

    mvn clean compile-->表示先运行清理之后运行编译,会见代码编译到target文件夹中

    mvn clean test-->运行清理和测试

    mvn clean package-->运行清理和打包

    mvn clean install-->运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用

    mvn clean deploy-->运行清理和发布(发布到私服上面)

     1.6 maven的生成方式

    ·由于maven有一些固定的生成模式,所以使用

    mvn archetype generate可以自动完成这个骨架的建立

    ·使用eclipse开发maven项目

       默认STS和myeclipse都自带了maven的支持

       如果是eclipse需要安装m2eclipse

    2,依赖

     2.1 依赖包的查询

    1、所有的依赖都是通过坐标来进行存储的(GAV-->groupId、artifactId、version)

    2、有一些网上的仓库提供了坐标的查询(http://mvnrepository.com)

    3、通过<dependencies>设置依赖

    maven是如何搜索依赖的?首先会在本地仓库查询如果本地仓库没有,就去中央仓库查询

     2.2 依赖的传递性

    1、依赖是会被传递

     A-->C  B-->A ==> B-->C(这种依赖是基于compile这个范围进行传递)

    对于依赖的传递而言,主要是针对compile作用域传递

      传递的冲突问题

    1、a-->b1.0  c-->b1.1  d-->a和c,这个时候在d的pom中,哪一个依赖先写就使用先写依赖的版本

    如果d--><d>a</d><d>c</d>-->依赖版本是b1.0

    2、a-->b1.0 c-->b1.1 d-->a和c-->b1.0  f-->d,c,如果路径的长短不一致就选择最小路径

        f-->b1.1

    3、如果希望精确的控制依赖包,可以使用依赖的排除功能进行控制

     2.3 依赖的范围

    1、test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖

    2、compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去

    3、provided依赖:在编译和测试的过程有效,最后生成war包时不会加入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突

    4、runtime在运行的时候依赖,在编译的时候不依赖

    默认的依赖范围是compile

     2.4 聚合和继承

    在一个pom.xml中执行打包,其他多个包都会执行打包 聚合

    新建一个maven工程 ,只需要一个pom.xml文件

    默认的中央工厂在maven-model-builderxxx.jar的pom.xml中

    一个id为 central的配置下

    可以在自己工程中的pom.xml也写个central覆盖他 重写个url

    变量,如jar的版本变量

    在父pom.xml的dependencyManagement 中配置GAV

    在子pom.xml中继承时只需写上GA 不用指明版本,通过继承得到版本

    在子pom.xml中继承配置

    公共配置都可以移到parent pom.xml

    如子pom.xml的groupId version scope properties都可移到到父pom.xml

    maven常用属性

    ${project.groupId}

    ${project.version}

     2.5版本管理

    总版本号,分支版本号,小版本号-里程碑版本

    总版本号的变动一般表示框架的变动

    分支版本号:一般表示增加了一些功能

    小版本号:在分支版本上进行bug的修复

    里程碑版本:SNAPSHOT快照-->alpha内部测试版本-->beta-->release发布版本-->GA投入市场

    user0.0.1-SNAPSHOT-->user0.0.1-release-->user1.0.0SNAPSHOT

    --> user0.1.0-SNAPSHOT-->user0.1.0-release

    最终合并版本

    3仓库

     3.1 本地仓库

    install

    参见: 1.2 本地仓库安装

     3.2 中央仓库

     3.3 私有仓库

    deplooy发布到私有库

    局域网内部的仓库

      1,nexus安装

    nexus有2中版本 jetty war

    1,下载nexus -xxx-bundle.tar解压

    2,配置bin环境变量

    3,执行nexus install安装服务

    4修改nexus bin/jsw/conf/wrapper.conf

    5、nexus start启动服务

    nexus start/stop/status

    jetty默认端口8081

    http://localhost:8081/nexus/

    admin/admin123

    JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home'

    export JAVA_HOME

    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

    export CLASSPATH

    export PATH

    MAVEN_HOME=/usr/local/apache-maven-3.5.0

    PATH=$PATH:$MAVEN_HOME/bin

    export MAVEN_HOME

    export PATH

    NEXUS_HOME=/usr/local/nexus-2.14.4-03-bundle/nexus-2.14.4-03/bin

    PATH=$PATH:$NEXUS_HOME

    export PATH

      2,仓库讲解

    1,hosted仓库,内部项目的发布仓库

    第3方包如oracle

    2,proxy仓库,从远程中央仓库中寻找数据的仓库,仓库地址可以修改

    3、group仓库。组仓库用来方便开发人员进行设置的仓库

    组可以选择多个仓库

      3,私有库设置

    在自己的工程pom.xml中设置仓库配置 只有自己工程可用

    可以在本地库的一个settings.xml maven/settings.xml设置profile, url没意义因为镜像

    这里属于设置releases snapshots

     

    1,更新私有库索引

    或者直接下载索引,将其拷贝到中央仓库的索引存储中

    2、设置镜像(设置setting.xml)

    3、在settings.xml配置仓库,此时本机中的所有maven项目都会去私有仓库中查询依赖

    激活配置

      4,项目发布

    在页面上设置允许发布

     

    1,工程pom.xml的distributionManagement中配置发布

    2、设置访问的权限

      5,创建项目工厂和设置权限

    1、创建两个工厂:release和policy的

    2、配置权限

     

    3、创建角色并且分配权限

    4、创建用户

    5、创建发布的工厂

       

    4,生命周期和插件

     生命周期

      1,三套生命周期

    1、clean

       pre-clean  执行一些需要在clean之前完成的工作

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

       post-clean  执行一些需要在clean之后立刻完成的工作

    2、compile

      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     将最终的包复制到远程的仓库,以让其它开发人员与项目共享。 

    3、site

      pre-site     执行一些需要在生成站点文档之前完成的工作

      site    生成项目的站点文档

      post-site     执行一些需要在生成站点文档之后完成的工作,并且为部署做准备

      site-deploy     将生成的站点文档部署到特定的服务器上

     插件

    插件是maven的核心,所有执行的操作都是基于插件来完成的

    为了让一个插件中可以实现众多的类似功能,maven为插件设定了目标,一个插件中有可能有多个目标

    其实生命周期中的重要的每个阶段都是由插件的一个具体目标来执行的

    发布web工程

    1,创建maven web工程

    pom.xml配置

     

     创建一个servlet

     1 package com.lxl.user.servlet;
     2 
     3 import java.io.IOException;
     4 import javax.servlet.ServletException;
     5 import javax.servlet.http.HttpServlet;
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 
     9 /**
    10  * Servlet implementation class HelloServlet
    11  */
    12 public class HelloServlet extends HttpServlet {
    13     private static final long serialVersionUID = 1L;
    14 
    15     /**
    16      * Default constructor. 
    17      */
    18     public HelloServlet() {
    19         // TODO Auto-generated constructor stub
    20     }
    21 
    22     /**
    23      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    24      */
    25     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    26         request.setAttribute("hello", "lxl");
    27         request.getRequestDispatcher("index.jsp").forward(request, response);
    28     }
    29 
    30     /**
    31      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    32      */
    33     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    34         // TODO Auto-generated method stub
    35         doGet(request, response);
    36     }
    37 
    38 }
    servlet
     1 <!DOCTYPE web-app PUBLIC
     2  "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     3  "http://java.sun.com/dtd/web-app_2_3.dtd" >
     4 
     5 <web-app>
     6   <display-name>Archetype Created Web Application</display-name>
     7   <servlet>
     8       <servlet-name>HelloServlet</servlet-name>
     9       <display-name>HelloServlet</display-name>
    10       <description></description>
    11       <servlet-class>com.lxl.user.servlet.HelloServlet</servlet-class>
    12   </servlet>
    13   <servlet-mapping>
    14       <servlet-name>HelloServlet</servlet-name>
    15       <url-pattern>/HelloServlet</url-pattern>
    16   </servlet-mapping>
    17 </web-app>
    web.xml
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
     <%@page isELIgnored="false" %>
        
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>hello ${hello}</h1>
    </body>
    </html>
    jsp

    发布 

    1,可以配置jetty插件发布

    输入jetty:run发布

    访问地址 http://localhost:8787/kk/HelloServlet

    2,使用ecplice tomcat 发布

    访问地址:http://localhost:8080/user-web/HelloServlet

  • 相关阅读:
    sprin AOP
    springDI注解
    Spring学习
    cookie、session、token三者之间的关系
    解决报错:Cannot find module 'webpack-cli/bin/config-yargs'
    Vue全家桶-前端工程化
    Vue全家桶-前端路由
    Vue
    Git
    Ajax
  • 原文地址:https://www.cnblogs.com/jiaozi-li/p/7965986.html
Copyright © 2020-2023  润新知