zoukankan      html  css  js  c++  java
  • MAVEN

    一、 Maven简介

    目前无论使用IDEA还是Eclipse等其他IDE,使用里面ANT工具。ANT工具帮助我们进行编译,打包运行等工作。Apache基于ANT进行了升级,研发出了全新的自动化构建工具Maven。(知道:ANT有的功能MAVEN都有,只是使用起来更加方便了,功能更加强大了。)
    以后创建的都是Maven项目,无论是普通java se项目还是java ee项目都是maven项目。
    Maven工具基于POM(Project Object Model,项目对象模型)模式实现的。在Maven中每个项目都相当于是一个对象,对象(项目)和对象(项目)之间是有关系的。关系包含了:依赖、继承、聚合,实现Maven项目可以更加方便的实现导jar包、拆分项目等效果。

    二、 Maven工具关于导jar(依赖)的实现原理

    在Maven工具所谓的导入jar实际上就是关系中的“依赖”,所有需要导入的jar,都是在maven工具的pom.xml中进行实现的(配置<dependency>)。而是Maven工具会根据pom.xml中的配置进行自动下载对应的jar包。从中央仓库进行下载,下载到本地仓库中进行使用。下载时是根据坐标进行确认需要下载的jar包。
    中央仓库:互联网上的服务器。服务器中包含所有jar包(jar包公司只要上传过)。不是必须使用哪个。默认是maven自己的网络服务器,但是由于速度较慢,我们一般都配置成国内的中央仓库(配置成阿里的)
    本地仓库:本机中文件夹。文件夹包含了自己下载的jar。文件夹结构为groupid分级的文件夹/artifactid文件夹/version文件夹/包含jar包。
    坐标:坐标包含了三个点,只有有一个点不一样就是不同的jar
    Group Id:公司名。多用公司网址倒写。感觉和包写法一样。
    Artifact Id:项目名。
    Version:版本。
    平时如果希望查询坐标,多去下面这个网站进行查询。
    https://mvnrepository.com
    http://maven.aliyun.com

    三、 Maven总体配置

    默认本地仓库: C:/用户/登录用户文件夹/.m2/repository
    在C:/用户/用户文件夹/下创建.m2文件,去01软件中把settings.xml放入到.m2文件夹中。
    1 settings.xml中配置项
    1.1 配置本地仓库地址
    此步骤不是必须配置,如果在公司中公司提供了本地仓库内容此步骤必须配置。
    如果不配置默认安装在C:/用户/用户文件夹/.m2中
    <localRepository>D:/repository</localRepository>
    1.2 配置中央仓库
    在<mirrors>下添加

    <mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
    </mirror>

    1.3 配置JDK版本
    在<profiles>下添加

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

    四、 Maven项目结构

    java文件夹和resource文件夹中内容(如果是web项目)最终也会被编译到WEB-INF/classes中。放到resource中配置文件和之前使用ant项目时,把配置文件放入到src的效果是完全一样的。
    --demo 项目名
    --.idea 项目的配置,自动生成的,不需要关注。
    --src
    -- main 实际开发内容
    --java 写包和java代码,此文件默认只编译.java文件
    --resource 所有配置文件。最终编译把配置文件放入到classpath中。
    -- test 测试时使用,自己写测试类或junit工具等
    --java 打包时不会保存到jar或war包中
    pom.xml 整个maven项目所有配置内容。

    五、 POM模型

    1 依赖关系

    通俗理解:导jar包。可以导入中央仓库的jar,也可以导入当前开发中其他项目打包后的jar包。
    在pom.xml中<dependencies>中通过<dependency>结合坐标进行导入。

    <dependencies>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.1.10.RELEASE</version>
    </dependency>
    </dependencies>

    1.1 依赖的传递性
    如果A依赖了B,那么C依赖A时会自动把A和B都导入进来。
    创建A项目后,选择IDEA最右侧Maven面板lifecycle,双击install后就会把项目安装到本地仓库中,其他项目就可以通过坐标引用此项目。
    1.2 取消依赖传递性

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.1.11.RELEASE</version>
    <exclusions>
    <exclusion>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    </exclusion>
    </exclusions>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.1.10.RELEASE</version>
    </dependency>

    2 继承关系

    设定F项目继承E项目,在F项目中配置parent标签。在E项目POM.xml中配置的内容就被F项目继承了。相当于在F项目也配置一遍(不是所有内容都能继承的)。

    <parent>
    <groupId>com.bjsxt</groupId>
    <artifactId>e</artifactId>
    <version>1.0-SNAPSHOT</version>
    </parent>

    2.1 dependencyManagement
    dependencyManagement声明依赖关系。作用:统一版本管理。一般情况下都结合properties使用。
    <properties>里面标签名自定义

    <properties>
    <mybatis-version>3.5.3</mybatis-version>
    <mysql-driver-version>5.1.48</mysql-driver-version>
    </properties>
    
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${mybatis-version}</version>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql-driver-version}</version>
    </dependency>
    </dependencies>
    </dependencyManagement>

    3 聚合关系

    前提:继承。
    聚合包含了继承的特性。
    聚合时多个项目的本质还是一个项目。这些项目被一个大的父项目包含。且这时父项目类型为pom类型。同时在父项目的pom.xml中出现<modules>表示包含的所有子模块。
    即使在idea中,也可以使用聚合在一个窗口创建多个项目。
    3.1 删除模块步骤
    右键模块--> remove module

    右键项目 --> delete

    在父项目中pom.xml中<modules>中删除模块名

    3.2 新建之前删除过的同名项目步骤
    菜单 settings --> 取消复选框的勾选。否则新建项目pom.xml中配置内容无效。

    六、 Maven 中项目类型

    在pom.xml中通过<packaging>进行设置项目的类型。默认为jar类型。
    packaging的可取值:
    jar 默认值
    pom 聚合项目时,父项目类型。没有实际意义。
    war web项目。没有学习spring boot 之前,创建web项目时需要手动修改packaging类型为war类型(今天)。
    packaging直接影响项目最后install时项目的打包类型。

    七、 创建war类型Maven项目

    1 创建maven项目

    正常创建一个maven项目
    在pom.xml配置文件中增加标签: <packaging>war</packaging>。 标签代表当前的应用是一个war工程。

    2 创建webapp文件夹

    在src/main下新建webapp文件夹
    在webapp下新建WEB-INF文件夹
    在WEB-INF下新建web.xml

    3 配置web模块

    如果不配置会导致无法新建jsp文件
    菜单 --> project struct -->

    4 配置pom.xml

    配置<packagin>为war
    导入web的依赖
    配置tomcat插件

    <packaging>war</packaging>
    <groupId>com.bjsxt</groupId>
    <artifactId>myweb</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    </dependency>
    </dependencies>
    
    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
    <!-- 发布后叫做ROOT -->
    <path>/</path>
    <port>80</port>
    </configuration>
    </plugin>
    </plugins>
    </build>

    5 运行

    八、 scope属性可取值

    compile:默认值,表示该依赖在编译和运行时都生效。
    provided:只在编译期生效。依赖和插件冲突时使用。
    runtime:只在运行时生效
    test:只在测试的时候生效。依赖junit时使用。
    system:和provided类似,表示该jar需要引用外部额外jar。
    import:替代父项目时scope取值。通常在springboot和springcloud技术中使用。

    九、 Maven项目名规范

    maven的项目不要使用-(减号),而使用_ 下划线
    例如:work_parent

    十、 SSM项目拆分演示

    使用Maven可以把以前项目的颗粒度变粗。以前的一个包,在Maven中很方便的变成一个项目。这些都是利用Maven的POM特性。
    把以前的一个项目按照包拆分成下面四个项目。
    pojo
    mapper
    service
    controller
    利用聚合项目演示,拆分过程略。
    附:资源拷贝插件

    <build>
    <resources>
    <resource>
    <directory>src/main/java</directory>
    <includes>
    <include>**/*.xml</include>
    </includes>
    </resource>
    <resource>
    <directory>src/main/resources</directory>
    <includes>
    <include>**/*.xml</include>
    <include>**/*.properties</include>
    </includes>
    </resource>
    </resources>
    </build>

    十一、 热部署

    热部署是Maven中tomcat插件实现的功能。可以实现一键把项目部署到服务器的tomcat中。部署的前提要求知道tomcat/webapps下manager项目访问的用户名和密码,tomcat默认是没有,所以进行配置。

    1 配置tomcat中manager项目的用户名和密码步骤

    在tomcat/confg/tomcat-users.xml中<tomcat-users>里面添加

    <role rolename="admin-gui"/>
    <role rolename="admin-script"/>
    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <user username="tomcat" password="tomcat" roles="admin-gui,admin-script,manager-gui,manager-script"/>

    重启tomcat后通过浏览器地址栏访问ROOT项目
    http://ip:8080/
    弹出登录框输入,用户名tomcat,密码tomcat,进入manager项目就说明配置成功了

    2 配置tomcat插件

    在项目的pom.xml中tomcat插件部分额外添加属性。
    对于部署项目时
    <port>无意义的。
    <path>部署项目名
    <url>最后的控制器是text

    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <configuration>
    <port>8081</port>
    <!-- 发布到tomcat名称 -->
    <path>/abc</path>
    <username>tomcat</username>
    <password>tomcat</password>
    <url>http://192.168.8.128:8080/manager/text</url>
    </configuration>
    </plugin>
    </plugins>
    </build>

    点击IDEA右侧MAVEN --> plugins --> tomcat7
    判断配置时path设置的项目名是否在tomcat/webapps存在。
    如果不存在tomcat7:deploy
    如果存在tomcat7:redeploy

  • 相关阅读:
    SQL SERVER 导出到Oracle 问题与技巧
    oracle Array类型作为参数传入函数(存储过程) 大字符串参数解决方案
    Oracle 时间处理(加减)
    批处理(命令行)安装数据库
    导致Asp.Net站点重启的10个原因 ,记录重启原因
    关于vs2010 起始页
    SQL Server 导数据 Oracle
    MYSQL正确删除binlog的方法
    yum 安装supervisor
    redis集群配置与管理
  • 原文地址:https://www.cnblogs.com/huxiaoyang/p/13362899.html
Copyright © 2011-2022 走看看