zoukankan      html  css  js  c++  java
  • 使用命令行管理maven项目

    创建maven java项目

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

    打开cmd第一种方式

    打开cmd第二种方式

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

    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项目结构

    图中有一个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 javaweb项目 

    编译: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项目的完整生命周期,当执行生命周期后面命令时,前面步骤的命令自动执行

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

    其他命令

    maven javaweb项目转换Eclipse工程

     mvn eclipse:eclipse

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

     ...转换IDEA工程

     mvn idea:idea

     mvn idea:clean  同上 

    pom.xml的依赖关系

    groupIdartifactIdversion是依赖的基本坐标,缺一不可;

    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),如果一个项目同时需要AC,那么A,C都会传递依赖将B给加载进来,问题就在这里,两个B的版本不一样,将两个都加载进去就会引起冲突,这时候就需要使用exclusions这个属性配置了。maven也会有一个机制避免两个都加载进去,maven 默认配置在前面的优先使用,但是我们还是需要使用exclusions来配置更合理

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

     

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

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

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

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

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

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

    java web 5.0项目:

     

    java web 6.0项目:

    2、运行阶段(tomcat提供) 

    所以,根据这个特点,如果使用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会先根据第一原则进行选择,第一原则不成,则按第二原则处理。

     

  • 相关阅读:
    由一段代码说开去——set
    由一段代码说开去——list
    day 11
    day 16
    day 10
    day 13
    day 9
    day 18
    day 12
    day 14
  • 原文地址:https://www.cnblogs.com/lldsgj/p/10770034.html
Copyright © 2011-2022 走看看