原来一直没有使用maven 小公司,只是听说过这个东西,我没事就喜欢 去学习一些新东西。maven学了几次,但是 没有用上  所以 最后还是忘记了,或者说不知道怎么使用maven,一年半以前公司 改革 ,招了一个技术大牛,引入了一些那时候 感觉 很新颖的技术,maven,springboot  kafka,nginx redis 等,那时候对一个小公司 来说,这些 技术 还是比较 高端了,今天 就说一说 使用maven创建项目的时候 和以后 普通项目的区别:

maven是什么,原来一直以为就是可以不用自己在网上去到处找jar包来 放到lib文件下了。只需要知道 一个jar包的地址 然后就 可以根据pom.xml文件配置 地址 然后就可以下载了,那时候 只知道是能这样干,(然后把自己的web项目拿去运行 一脸吗,懵逼  不知道怎么运行了,后面在说一下如何运行)后来 才发现 maven 其实提供的功能远不止这些。

如何创建一个maven项目:


  1. src/main/java:主要放你项目的源文件,
    src/main/resourecs:项目的配置文件
    src/test/java:测试代码
    src/test/resources:测试配置文件
    target:目标文件,maven打出来的jar包 或者war包 都放在这个目录
    pom.xml:maven的主要配置文件

    创建成了一个maven项目(如果创建 maven项目 不勾选的

    话目录结构不是这样子:)

  2. 在此基础上说一下 maven命令的使用 maven管理项目分为:编译 测试 运行 打包  部署 运行过程 找到 项目 路径地址 打开 cmd窗口:

    编译命令:mvn compile  将源文件生成.class文件

    测试命令:mvn teset
    清理命令:mvn clean  清理target 目录下的所有文件
    打包命令:mvn package  java项目打成jar包 web项目 打成war包

    如果想将自己的项目 打包 到本地仓库之中 ,可以使用 mvn install命令:

    运行 maven web项目:mvn tomact:run

  3. 主要还是详聊一下pom.xml 文件里面的配置(我这边以我自己的一个pom父项目来聊 用到的比较多):

  4. <packaging>pom</packaging> maven项目的打包类型 有 pom jar  war  web项目 打包war包  java项目 打成jar包  默认是jar包
    pom所有父项目 都是pom 而不是 jar或者war ,父项目,有一个重要的属性,那就是modules,通过modules标签将项目的所有子项目引用进来,在build父级项目时,会根据子模块的相互依赖关系整理一个build顺序,然后依次build,表示该父项目中有两个子项目jiahou-hongbao-protobuf,以及jiahou-hongbao

    <modules>
    <module>jiahou-hongbao-protobuf</module>
    <module>jiahou-hongbao</module>
    </modules>
        <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.13</version>
    </dependency>
    </dependencies>
    </dependencyManagement>
    dependencyManagement:从命名看来 依赖管理器,在父项目中 主要用于管理jar包 版本号  如果该项目的子项目 需要用到mysql-connector-java 的话 只需要:
    
    <dependencies>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    </dependency>
    </dependencies>

    不需要在加上版本号,所有的子项目都用8.0.13的版本号  如果需要 用自己的版本 号  则自己在添加对应的版本号。此时不在继承来自父项目的该jar包的版本号。

    dependencies:作用可以理解是 引入声明在dependencies的所有jar包(版本号相同的话 子类也自动引入了jar包)
    
    dependency:依赖注入,需要一个jar包 就 需要 一个dependency 所有的dependency 都 声明在 dependencies
  5. 关于mavne项目中的关于依赖传递有一个A 项目 依赖于B 项目 B 项目 又依赖于B 项目,则A 项目要使用B 项目的时候  则会引入 c项目。其实对于A 项目来说 只是要用到一些B 项目的功能,但是 也会引入C项目,导致本地仓库jar包变多,又假如A 项目 在引入B 项目的时候  AB 两个项目都引入了同一个jar包 但是 jar包版本不同 则可能导致 jar包冲突。如果父项目 依赖了 项目  x项目  但是子项目 又不需要依赖x项目 我们可以排除x项目:

    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <exclusions>
    <exclusion>
    <groupId>x</groupId>
    <artifactId>x</artifactId>
    </exclusion>
    </exclusions>
    </dependency>

    以上 表示 在 引入 mysql jar包的时候 排除 X

  6. 关于<build>标签:

    <finalName>打出来的包的名字</finalName>

    插件配置 如果不用一下配置 则 项目 效果是:

    有时候一个项目 很大的时候(很多依赖jar包) 我们却要实jar包分离  可以可以使用:

    <resources>
    <resource>
    <directory>src/main/resources</directory>
    <excludes>
    <exclude>*</exclude>
    </excludes>
    <filtering>true</filtering>
    </resource>
    </resources>

     

    pluginManagement的配置和plugins的配置是一样的,只是用于继承,方便 子项目模块中 可以直接 使用,不用在重新配置

    <build>
    ...
    <pluginManagement>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.2</version>
    <executions>
    <execution>
    <id>pre-process-classes</id>
    <phase>compile</phase>
    <goals>
    <goal>jar</goal>
    </goals>
    <configuration>
    <classifier>pre-process</classifier>
    </configuration>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </pluginManagement>
    ...
    </build>

    子项目 只需要 :

     <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    </plugin>
    </plugins>

    以上就是maven的一些 标签闲聊,还是有很多 工作中没有遇到的 如果 以上 有什么讲的不对。欢迎留言指正!!!

maven(一 基本操作 命令 标签)的更多相关文章

  1. centos7中bash: maven: 未找到命令... 解决办法

    安装了maven,但在执行mvn -v或maven-versions时提示bash: maven: 未找到命令... 应该是环境变量出错,把MAVEN_HOME的路径换到PATH上就可以了,如下: e ...

  2. IDEA下使用Maven的test命令乱码

    IDEA下使用Maven的test命令乱码的时候,加上 -Dfile.encoding=GBK 就可以解决啦   如下图所示:   或者在Maven的pom.xml文件中增加: <propert ...

  3. maven执行update命令时报org/apache/maven/shared/filtering/MavenFilteringException错误

    原 maven执行update命令时报org/apache/maven/shared/filtering/MavenFilteringException错误 在eclipse中对准项目执行maven- ...

  4. Maven经常使用命令

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/25985021 Maven库: http:// ...

  5. maven的相关命令

    maven的相关命令 mvn archetype:create :创建 Maven 项目 mvn compile :编译源代码(编译到target文件夹中) mvn test-compile :编译测 ...

  6. 【Maven】常用命令

    [Maven]常用命令 转载:https://www.cnblogs.com/yangchongxing/p/10267028.html Maven Jar 搜索:https://mvnreposit ...

  7. Maven执行Reimport命令报错:See logs for details

    Idea版本:2018.1.3 maven版本:3.6.2 Idea配置了本地下载的maven之后,不管是直接执行maven的Reimport命令,还是使用idea的Reimport按钮,都会报这个错 ...

  8. 【MAVEN】maven系列--pom.xml标签详解

    pom文件作为MAVEN中重要的配置文件,对于它的配置是相当重要.文件中包含了开发者需遵循的规则.缺陷管理系统.组织.licenses.项目信息.项目依赖性等.下面将重点介绍一下该文件的基本组成与功能 ...

  9. maven中pom.xml标签介绍

    pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以 ...

随机推荐

  1. Python数据结构——栈的链表实现

    自定义链表实现栈的数据结构,代码如下: class Stack: def __init__(self): self._first = None def push(self,item): self._f ...

  2. 《DSP using MATLAB》Problem 5.15

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  3. MySql中的一些小坑

    1. mysql启动时,若使用mysqld_safe的方式启动服务,需要使用mysqladmin shutdown的方式来停止服务. 若使用mysqld shutdown的方式停止服务,有可能会出现如 ...

  4. c# 复制文件夹

    调用VB.NET方法最便捷 引入 Microsoft.VisualBasic.dll 调用 Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory( ...

  5. MBR, EFI, 硬盘分区表

    文章目录 硬盘MBR详细介绍 结束柱面号(End cylinder)超过1023时怎么处理 grub stage 1 是如何引导grub stage 2 的 MBR和2TB的限制 (MBR/GPT/E ...

  6. hiveserver 占用内存过大的问题

    今天为了求解hiveserver占用内存过大的问题,特地加了hive在apache的邮件列表,讨论半天.特别说的是 里面的人确实很热情啊 ,外国人做事确实很认真,讨论帖发的时候都狠详细. 粘出一些记录 ...

  7. Java开发培训基础知识解析之反射机制

    Java是老牌编程语言,是当前应用最广泛的编程语言之一.想要学习Java你就一定要掌握Java基础知识,而反射对于初学Java的人来说绝对是非常重要的知识点.什么是反射?如何理解反射机制?如何使用反射 ...

  8. 微软Azure通知中心 (Azure Notification Hubs)

    Azure Notification Hubs 提供简单的方法从后台(azure或者on-promise)去发送通知在不同的平台上面(iOS, Android, Windows, Kindle, Ba ...

  9. 图的最短路径——dijkstra算法和Floyd算法

    dijkstra算法 求某一顶点到其它各个顶点的最短路径:已知某一顶点v0,求它顶点到其它顶点的最短路径,该算法按照最短路径递增的顺序产生一点到其余各顶点的所有最短路径. 对于图G={V,{E}};将 ...

  10. First 1

    一,Python介绍 1,python的出生与应用 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打 ...