zoukankan      html  css  js  c++  java
  • maven的配置和使用

    Maven 简介

    1.1 Maven 是什么

          翻译为“专家”,“内行”

          Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。

    1.2 为什么使用Maven

          IDE?Eclipse?

          手工操作较多,编译、测试、部署等工作都是独立的,很难一步完成

         每个人的IDE配置都不同,很容易出现本地代码换个地方编译就出错

         Ant?

         没有一个约定的目录结构

         必须明确让ant做什么,什么时候做,然后编译,打包

          没有生命周期,必须定义目标及其实现的任务序列

          没有集成依赖管理

         Maven?

         拥有约定,知道你的代码在哪里,放到哪里去

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

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

          拥有依赖管理,仓库管理

    1.2.1 什么是本地仓库

           本地仓库:Maven在本地存储构件的地方。

           在第一次执行maven命令的时候创建本地仓库。

           maven本地仓库的默认位置:在用户的目录下的.m2/repository/的仓库目录,这就是Maven仓库的默认位置,可以更改默认设置。

    1.2.2 什么是中央仓库

            maven安装好之后,远程仓库默认是中央仓库:http://repo1.maven.org/maven2

    1.3 官网地址和系统要求

           官网地址:http://maven.apache.org/

           下载地址:http://maven.apache.org/download.cgi

    1.3.1 maven官方压缩包的目录结构

    1.     bin:含有mvn运行的脚本

    2.     boot:含有plexus-classworlds类加载器框架

    3.     conf:含有settings.xml配置文件

    4.     lib:含有Maven运行时所需要的java类库

    5.     LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍

    2. 配置Maven运行环境

           切记:将maven解压到一个没有空格没有中文的目录中

    2.1 配置Maven环境变量

       M2_HOME    D:apache-maven-3.3.3

            并且将此变量设置到Path中,紧跟着%JAVA_HOME%in;%M2_HOME%in

    2.2 配置conf/settings.xml

    2.2.1 本地仓库

    <!-- localRepository

       | The path to the local repository maven will use to store artifacts.

       |

       | Default: ${user.home}/.m2/repository -->

      <localRepository>/path/to/local/repo</localRepository>

    2.2.2 JDK版本配置

    将下面的内容放到<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>

    2.2.3 mirror 镜像配置(使用阿里云镜像)

    maven下载组件的时候从此处下载阿里云

    需要将该内容放到<mirrors>标签中

    <mirror>

             <id>alimaven</id>

             <name>aliyun maven</name>

             <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

             <mirrorOf>central</mirrorOf>

    </mirror>

    执行命令:mvn -v查看是否安装maven成功

    3. Maven 项目的liftcycle

    何为生命周期?

    Maven生命周期就是为了对所有的构建过程进行抽象和统一

    包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤

    每一个步骤的任务都是maven的相关插件来完成的。

    4. 使用命令行操作Mavan

        mvn archetype:generate -DgroupId=com.bjsxt.demo -DartifactId=mvnPro

    4.1 generate 创建maven项目

    4.2 compile 编译maven项目

    4.3 test 测试maven项目

    4.4 install 或package 安装或打包maven项目

    4.5 clean 清空maven项目编译的文件

    5. Eclipse 集成Maven,演示时使用下载的Maven进行操作

    window->preferences->maven->installations->add

    window->preferences->maven->installations->user settings

    6. 演示如何创建Maven Project

    6.1 坐标概念

    在平面几何中坐标(x,y)可以标识平面中唯一的一点

    Maven坐标主要组成

    groupId:定义当前Maven项目隶属项目组

    artifactId:定义实际项目中的一个模块,模块的名称

    version:定义当前项目的当前版本

    packaging:定义该项目的打包方式

    Maven为什么使用坐标?

    Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范

    拥有了统一规范,就可以把查找工作交给机器

    6.2 packaging 3种结构(jar,war,pom)

    jar是默认类型,项目打包为jar包

    war:项目打包为war包      eclipse中项目右键javaeetools-->generate deploy descriptor stub

    pom:描述文件,一般情况下,该类项目包含若干子模块

    6.3 Maven 项目目录结构

    遵从Maven约定

    1.     src/main/java —— 存放项目的.java文件

    2.     src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件

    3.     src/test/java —— 存放所有测试.java文件,如JUnit测试类

    4.     src/test/resources —— 测试资源文件

    5.     target —— 项目输出位置

    pom.xml

    7. 演示Maven项目依赖和Ant导jar包.突显Maven项目的优点.(略。。。)

    <project default="run" basedir="."> 

        <property name="lib.dir" location="lib" /> 

        <property name="src" location="src" /> 

        <property name="classpath" location="build" /> 

        <property name="dist" location="dist" /> 

        <property name="webserver_jar" value="webserver.jar" /> 

           <!--定义项目编译的时候依赖的lib包的路径--> 

            <path id="project.class.path"> 

            <pathelement path="${classpath}" /> 

            <fileset dir="${lib.dir}"> 

                <include name="**/*.jar" /> 

            </fileset> 

        </path> 

        <target name="init">

            <mkdir dir="${src}" /> 

            <mkdir dir="${classpath}" /> 

            <mkdir dir="${lib.dir}" /> 

            <mkdir dir="${dist}" /> 

            <copy file="${webserver_jar}" todir="${lib.dir}" /> 

            <copy file="JettySample.java" todir="${src}" /> 

            <copy file="${webserver_jar}" todir="${dist}" /> 

        </target> 

        <target name="compile" depends="init"> 

          <!--target="1.4" 表示编译器用1.4的方式编译,当然也可以采用1.5,classpath 中的refid这表示依赖于那些jar包编译--> 

            <javac fork="true" target="1.4" srcdir="src" destdir="${classpath}" debug="true" > 

                <classpath refid="project.class.path" /> 

            </javac> 

          </target>

           <target name="jar" depends="compile"> 

            <jar destfile="${dist}/${webserver_jar}" update="true" basedir="${classpath}"> 

            <!--定义jar包运行的时候,实现要寻找的含有main方法的主类--> 

                <manifest> 

                    <attribute name="Main-class" value="JettySample" /> 

                </manifest> 

            </jar> 

        </target> 

        <target name="run" depends="jar,clean"> 

            <java jar="${dist}/${webserver_jar}" fork="true" /> 

        </target> 

          

        <target name="clean"> 

            <delete dir="${classpath}"/> 

            <delete dir="${src}"/> 

            <delete dir="${lib.dir}"/> 

        </target> 

    </project>

    eclipse中使用maven:

    finish

    8. 讲解Maven 项目的关系

    8.1 依赖

    8.2 继承

    8.3 聚合

    9. 讲解War 类型Maven项目

    9.1 使用simple project 进行创建,不要使用Archetype

    9.2 创建文件夹META-INF , WEB-INF , web.xml

             选中项目击右键-> java EE Tools -> Generate Deployment Descriptor Stub

    9.3 讲解war项目运行时必须依赖的几个jar

             servlet-api   jsp-api

           <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->

           <dependency>

               <groupId>javax.servlet</groupId>

               <artifactId>javax.servlet-api</artifactId>

               <version>3.0.1</version>

               <scope>provided</scope>

           </dependency>

           <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->

           <dependency>

               <groupId>javax.servlet.jsp</groupId>

               <artifactId>javax.servlet.jsp-api</artifactId>

               <version>2.2.1</version>

               <scope>provided</scope>

           </dependency>

           <!-- https://mvnrepository.com/artifact/junit/junit -->

           <dependency>

               <groupId>junit</groupId>

               <artifactId>junit</artifactId>

               <version>4.11</version>

               <scope>test</scope>

           </dependency>

    9.3.1<dependency> 标签依赖servlet-api时需要讲解<scope>

    9.3.1.1 <scope>四个属性都需要说一下,重点说provided

    - compile :默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包。

    - provided:依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。

    - runtime: 在执行时,需要使用

    - test:    用于test任务时使用

    - system: 需要外在提供相应得元素。通过systemPath来取得

    - systemPath: 仅用于范围为system。提供相应的路径

    - optional:   标注可选,当项目自身也是依赖时。用于连续依赖时使用

    9.4 运行项目

    9.4.1 此处需要说清楚,maven项目可以在本地tomcat中运行(需要演示)

    9.4.2 添加tomcat插件,配置插件内容,并运行

    项目中pom.xml指定:

    <build>

           <finalName>${project.artifactId}</finalName>

           <plugins>

               <!-- 资源文件拷贝插件 -->

               <plugin>

                  <groupId>org.apache.maven.plugins</groupId>

                  <artifactId>maven-resources-plugin</artifactId>

                  <version>2.7</version>

                  <configuration>

                      <encoding>UTF-8</encoding>

                  </configuration>

               </plugin>

               <!-- java编译插件 -->

               <plugin>

                  <groupId>org.apache.maven.plugins</groupId>

                  <artifactId>maven-compiler-plugin</artifactId>

                  <version>3.2</version>

                  <configuration>

                      <source>1.7</source>

                      <target>1.7</target>

                      <encoding>UTF-8</encoding>

                  </configuration>

               </plugin>

     

               <plugin>

                  <groupId>org.apache.tomcat.maven</groupId>

                      <artifactId>tomcat7-maven-plugin</artifactId>

                      <version>2.2</version>

                  <configuration>

                      <!-- 指定tomcat插件的端口号 -->

                      <port>8080</port>

                      <!-- http://localhost:8080/proName/index.jsp -->

                      <!-- http://localhost:8080/index.jsp -->

                      <!-- path就是指定8080/到index.jsp之间的内容 -->

                      <path>/myapp</path>

                  </configuration>

               </plugin>

           </plugins>

        </build>

    9.4.3 此处只须有一个jsp页面即可.演示war项目在tomcat中运行效果

            选中项目击右键->Run as -> Maven build … -> clean tomcat7:run -DskipTests

    clean tomcat7:run -DskipTests

    clean 清空上次编译的结果

    tomcat7:run 在tomcat7插件上运行项目

    -DskipTests 跳过自动运行的测试

  • 相关阅读:
    linux下通过命令行重启服务,查看id,更改tv密码
    windows渗透相关、hideadmin工具隐藏用户账号、添加隐藏用户
    windows服务隐藏 以及进程隐藏
    nat32 winh命令远程执行难点
    anydesk命令行使用
    html页面,能用鼠标滚轮滑动,但是不能触屏滑动
    Java 全局统一异常捕获
    git 常用操作
    vue v-for强制刷新
    flutter-TextField垂直居中
  • 原文地址:https://www.cnblogs.com/qingfengzhuimeng/p/7455679.html
Copyright © 2011-2022 走看看