使用命令行管理maven项目

时间:2022-06-22 05:06:59

创建maven java项目

自己创建一个文件夹,进入cmd,(shift+鼠标右键)这样创建的maven[java]项目就在该文件夹下了。

打开cmd第一种方式

使用命令行管理maven项目

打开cmd第二种方式

使用命令行管理maven项目

使用命令行管理maven项目

命令:mvn archetype:generate -DgroupId=com.td.maven.quickstart -DartifactId=simple -DarchetypeArtifactId=maven-archetype-quickstart

使用命令行管理maven项目

mvn:核心命令

    archetype:generate:创建项目,现在maven版本使用generate命令了,老版本使用

create命令。

   -DgroupId=com.td.maven.quickstart :创建该maven项目时的groupId是什么,该作用在上面已经解释了。一般使用包名的写法。因为包名是用公司的域名的反写,独一无二

   -DartifactId=simple:创建该maven项目时的artifactId是什么,就是项目名称

   -DarchetypeArtifactId=maven-archetype-quickstart:表示创建的是[maven]java项目

   运行的前提:需要联网,必须上网下载一个小文件

maven java项目结构

使用命令行管理maven项目

使用命令行管理maven项目

图中有一个target目录,是因为将该java项目进行了编译,src/main/java下的源代码就会编译成.class文件放入target目录中,target就是输出目录。

创建 maven web 项目

  命令:mvn archetype:generate -DgroupId=com.td.maven.quickstart -DartifactId=myWebApp -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot

  其他都差不多,创建maven web项目的话 -DarchetypeArtifactId=maven-archetype-webapp 比创建java项目多了一个 -Dversion=0.01-snapshot, 在创建java项目的时候也可以加上这个,如果不写,会默认帮我们加上1.0-snapshot。

maven web项目结构

使用命令行管理maven项目

命令操作maven java或web项目

编译:mvn compile  --src/main/java目录java源码编译生成class (target目录下)

测试:mvn test    --src/test/java 目录编译

清理:mvn clean    --删除target目录,也就是将class文件等删除

打包:mvn package  --生成压缩文件:java项目#jar包;web项目#war包,也是放在target目录下

安装:mvn install   --将压缩文件(jar或者war)上传到本地仓库

部署|发布:mvn deploy  --将压缩文件上传私服

使用命令操作maven java项目

注意:使用命令时,必须在maven java项目的根目录下,及可以看到pom.xml

描述:将maven java项目打包上传到本地仓库供别人调用

使用 mvn install

maven项目的完整生命周期,当执行生命周期后面命令时,前面步骤的命令自动执行

使用命令行管理maven项目

红色标记字体的意思就是当我们直接使用mvn install命令对项目进行上传至本地仓库时,那么前面所有的步骤将会自动执行,比如源代码的编译,打包等等。

其他命令

maven java或web项目转换Eclipse工程

 mvn eclipse:eclipse

 mvn eclipse:clean  清除eclipse设置信息,又从eclipse工程转换为maven原生项目了    

 ...转换IDEA工程

 mvn idea:idea

 mvn idea:clean  同上 

pom.xml的依赖关系

使用命令行管理maven项目

groupId、artifactId、version是依赖的基本坐标,缺一不可;

type:依赖的类型,比如是jar包还是war包等

            默认为jar,表示依赖的jar包

optional:标记依赖是否可选。默认值false

exclusions:排除传递依赖,解决jar冲突问题

            依赖传递的意思就是,A项目 依赖 B项目,B项目 依赖 C项目,当使用A项目时,就会把B也给加载进来,这是传递依赖,依次类推,C也会因此给加载进来。

            这个有依赖传递有好处,也有坏处,坏处就是jar包的冲突问题,比如,A 依赖 B(B的版本为1),C 依赖 B(B的版本为2),如果一个项目同时需要A和C,那么A,C都会传递依赖将B给加载进来,问题就在这里,两个B的版本不一样,将两个都加载进去就会引起冲突,这时候就需要使用exclusions这个属性配置了。maven也会有一个机制避免两个都加载进去,maven 默认配置在前面的优先使用,但是我们还是需要使用exclusions来配置更合理。

scope:依赖范围,意思就是通过pom.xml加载进来的jar包,来什么范围内使用生效,范围包括编译时,运行时,测试时

使用命令行管理maven项目

compile:默认值,如果选择此值,表示编译、测试和运行都使用当前jar

test:表示只在测试时当前jar生效,在别的范围内就不能使用该jar包。例如:junit 。此处不写也不报错,因为默认是compile,compile包扩了测试

runtime,表示测试和运行时使用当前jar,编译时不用该jar包。例如:JDBC驱动。JDBC驱动,在编译时(也就是我们写代码的时候都是采用接口编程,压根就没使用到JDBC驱动包内任何东西,只有在运行时才用的到,所以这个是典型的使用runtime这个值的例子),此处不写也不报错,理由同上

provided,表示编译和测试时使用当前jar,运行时不在使用该jar了。例如:servlet-api、jsp-api等。【必须填写】

什么意思呢? 在我们以前创建web工程,编写servlet或者jsp时,就没导入过jar包把,因为myeclipse或者别的ide帮我们提供了这两个jar包,内置了,所以我们在编译期测试期使用servlet都不会报缺少jar包的错误,而在运行时期,离开了myeclipse或别的ide,就相当于缺失了这两个jar包,但此时tomcat又会帮我们提供这两个jar,以便我们不会报错,所以,这两个很特殊。看图

1、开发阶段(Eclipse提供),看下图以此证明我们说的

java web 5.0项目:

使用命令行管理maven项目

java web 6.0项目:

使用命令行管理maven项目

2、运行阶段(tomcat提供) 

使用命令行管理maven项目

所以,根据这个特点,如果使用maven开发项目,就不是web项目了,那么myeclipse就不会在给我们提供这两个jar包,我们就必须自己手动通过坐标从仓库中获取,但是针对上面的分析,当运行的时候,tomcat会帮我们提供这两个jar包,所以我们自己从仓库中获取的jar包就不能和tomcat中的冲突,那么就正好可以通过provided这个属性,来设置这两个jar的作用范围,就是在变异时期和测试时期生效即可。

system:表示我们自己手动加入的jar包,不属于maven仓库(本地,第三方等),属于别得类库的这样的jar包,只在编译和测试期生效,运行时无效。一般不用 

依赖调节原则

这个就是maven解决传递依赖时jar包冲突问题的方法,按照两种原则,上面已经介绍了一种了,就是下面的第二原则

1、第一原则:路径近者优先原则

   A-->B-->C-->D-->X(1.6)

   E-->D-->X(2.0)

   使用X(2.0),因为其路径更近 

2、第二原则:第一声明者优先原则。就是如果路径相同,maven 默认配置在前面的优先使用

   A-->B --> X(1.6)

   C-->D--> X(2.0)

   这样就是路径相同,那么如果A在前面,C在后面,则使用X(1.6)

   maven会先根据第一原则进行选择,第一原则不成,则按第二原则处理。

 

使用命令行管理maven项目的更多相关文章

  1. 命令行创建Maven项目卡住以及出错解决办法。

    第一次通过命令行创建maven项目.结果,果不其然啊,还是出问题了,不过出问题比没有出问题强,知道哪里有问题并学会解决也是一种收获. 遇到的第一个问题,在从仓库下载东西的时候会卡住,我开始以为是网速问 ...

  2. [Android] 基于 Linux 命令行构建 Android 应用(二):命令行管理项目

    创建 Android 项目 在命令行创建 Android 项目需要用到 android 工具(该工具由 Android SDK 提供,位于 <sdk>/tools/ 目录下.).它能自动生 ...

  3. 学习笔记-使用cmd命令行创建nodejs项目

    使用cmd命令行创建nodejs项目 1)在DOS下cd 进入到你想要创建项目的路径. 2)mkdir sing (创建一个sing文件夹) 3)cd sing  4) npm init (初始化工程 ...

  4. 玩转Windows服务系列——命令行管理Windows服务

    说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令,命令行都是非常方便以及强大的工具. 接下来就看一下如何通过cmd命 ...

  5. openstack 命令行管理 - 目录

    原文http://blog.csdn.net/signmem/article/details/19513775 相关 openstack  命令行管理, 分下面部分进行介绍 openstack 命令行 ...

  6. ElasticSearch 命令行管理工具Curator

    一.背景 elastic官网现在已经大面积升级到了5.x版本,然而针对elasticsearch的命令行管理工具curator现在仍然是4.0版本. 刚开始找到此工具,深深的怕因为版本更迭无法使用,还 ...

  7. 玩转Windows服务系列&mdash&semi;&mdash&semi;命令行管理Windows服务

    原文:玩转Windows服务系列——命令行管理Windows服务 说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令, ...

  8. IIS命令行管理工具使用

    AppCmd.exe工具所在目录 C:\windows\sytstem32\inetsrv\目录下 一条命令批量添加应用程序 c:\Windows\System32\inetsrv>for /d ...

  9. 原创&colon;vsphere概念深入系列三:vSphere命令行管理

    假设无法近距离接触物理主机,只能远程命令行管理,. 以下命令行可以起到点作用. 首先需要安装vSphere CLI工具. 启动后界面: 1.查看datastore内容 所有命令行工具都可以加上-ser ...

随机推荐

  1. vue2&period;0 组件之间的数据传递

    组件间的数据传递// 父组件<template><div class="order"><dialog-addpro v-on:closedialog= ...

  2. 练习1-16:修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本(C程序设计语言 第2版)

    该书英文配套答案 Answer to Exercise -, page Revise the main routine of the longest-line program so it will c ...

  3. 使用Memory Analyzer tool&lpar;MAT&rpar;分析内存泄漏

    前言的前言 写blog就是好,在大前提下可以想说什么写什么,不像投稿那么字字斟酌.上周末回了趟成都办事,所以本文来迟了.K117从达州经由达成线往成都方向走的时候,发现铁路边有条河,尽管我现在也不知道 ...

  4. MultiTouch camera controls source code

    http://www.jpct.net/wiki/index.php/MultiTouch_camera_controls MultiTouch camera controls This code w ...

  5. Oracle 11g XML java连接

    在网上找了好多教程 走好好多弯路 现在从头总结下 oralce11g 可以直接用xmltype节点存储xml文件 简单来说就是直接存一个文件进去 首先安装oracle11g 网上教程非常多 然后进Ne ...

  6. SRM 627 D1L2GraphInversionsDFS查找指定长度的所有路径 Binary indexed tree &lpar;BIT&rpar;

    题目:http://community.topcoder.com/stat?c=problem_statement&pm=13275&rd=16008 由于图中边数不多,选择DFS遍历 ...

  7. 安卓热修复之AndFIX

    我致力于最新的前沿安卓技术分析和使用教学,不打算将很多很深的东西,因为有多少人愿意沉下你的心境去学习难点?我一般只会简单提及.文字错漏在所难免还希望同学们喜欢 热修复介绍 热修复是什么? 如果你一个项 ...

  8. 软件测试2019:第四次作业—— 性能测试(含JMeter实验)

    题目:性能测试练习 一.回答下述问题: 性能测试有几种类型,它们之间什么关系? 性能测试根据不同测试目的可以分为以下类: (1)性能验证测试 (2)性能基准测试 (3)性能规划测试 (4)容量测试 渗 ...

  9. tkinter之grid布局管理器详解

    在很久之前,我发过一篇<tkinter模块常用参数>,里面已经几乎涵盖了tkinter的大部分教程. 好吧,其实也就是上一篇而已啦. 所谓布局,就是指控制窗体容器中各个控件(组件)的位置关 ...

  10. 手把手制作一个简单的IDEA插件&lpar;环境搭建Demo篇&rpar;

    新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...