欢迎来到 Kong Xiangqun 的博客

Maven

项目构建工具

之前是用Ant, 现在被maven替换了

Apache基于ANT进行了升级, 研发出了全新的自动化构建工具Maven.

Maven是Apache的一款开源的项目管理工具

以后无论是普通javese项目还是javaee项目, 我们都创建的是maven项目.

/*
Maven使用项目对象模型(POM-Project Object Model,项目对象模型)的概念,
可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
在Maven中每个项目都相当于是一个对象,对象(项目)和对象(项目)之间是有关系的。
关系包含了:依赖、继承、聚合,实现Maven项目可以更加方便的实现导jar包、拆分项目等效果。
*/

maven.apache.org

一、Maven的下载_目录结构_IDEA整合Maven

 IDEA默认整合了Maven

 

 

 

 手动下载

 

 

 

 

 

 bin:存放的是执行文件,命令

在IDEA中可以直接集成Maven

 

 

 选中->OK

conf目录:有一个非常重要的配置文件--》settings.xml --- maven的核心配置文件/全局配置文件。

执行命令mvn help:system 后就会有.m2文件夹了, 是一个隐藏文件

二、Maven仓库

Maven仓库是基于简单文件系统存储的,集中化管理Java API资源(构建 jar包)的一个服务

仓库中的任何一个构建都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径。得益于Maven的坐标机制,

任何Maven项目使用任何一个构建的方式都是完全相同的。

Maven可以在某个位置统一存储所有的Maven项目共享的构建。这个统一的位置就是仓库,项目构建完毕后生成的构建

也可以安装或者部署到仓库中,供其他项目使用。

对应Maven来说,仓库分为两类:本地仓库和远程仓库。

远程仓库:mvnrepository.com

比如搜索一个Mybatis

 

 

 

配置本地仓库远程仓库路径

 

 

打开settings.xml文件,

配置本地仓库路径

 

 

在settings.xml配置镜像仓库

  <mirror>
    <!-- 指定镜像ID(可自己改名)-->
    <id>nexus-aliyun</id>
    <!-- 匹配中央仓库(阿里云的仓库名称,不可以自己起名,必须这样写)-->
    <mirrorOf>central</mirrorOf>
    <!-- 指定镜像名称(可自己改名)-->
    <name>Nexus aliyun</name>
    <!-- 指定镜像路径(镜像地址)-->
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  </mirror>

 

仓库优先级别问题:

/*
最先本地仓库---->>到配置文件中指定的仓库中查找---->>看是否配置镜像仓库---->>没有配置到中央仓库
                                                    |
                                  |-------- -->>配置了到镜像仓库中找----->> 可能没有再到中央仓库查找
*/

三、JDK的配置

 

setting.xml中

    <profile>
      <!-- settings.xml中的id不能随便起名的 -->
      <!-- 告诉maven我们用的是jdk1.8 -->
      <id>jdk-1.8</id>
      <!-- 开启JDK的使用 -->
      <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工程类型

1、POM工程

POM工程是逻辑工程。用在父级工程或聚合工程中。用来做jar包的版本控制

2、JAR工程

将会打包成jar,用作jar包使用。即常见的本地工程 -------》 Java Project

3、WAR工程

将会打包成war,发布到服务器上的工程

五、在IDEA中创建Maven工程

 

 

 

/*
这个其实就是项目的坐标

   GroupId: 类似包名 ---> 防止重名 ---> 规则一般为 域名反转 ---> eg: sale.kxq
   Atifactld: 一般使用项目名字
   Version: 版本 1.0-snapshot(快照版)   
*/

 

六、Maven目录结构

标准目录结构:

 

 

src/main/java

这个目录下存储java源代码

src/main/resources

存储主要的资源文件. 比如xml配置文件和properties文件

src/test/java

存储测试用的类, 比如JUNIT的测试一般就放在这个目录下面

因为测试类本身实际是不属于项目的, 所以放在任何一个包下都显得尴尬,

所以Maven专门创建了一个测试包

src/test/resources

可以自己创建你存储测试环境用的资源文件

src

包含了项目所有的源代码和资源文件, 以及其他项目相关的文件

target

编译后内容放置的文件夹

 

 

 

七、Maven工程关系

1、依赖关系

即A工程开发或运行过程中需要B工程提供支持,则代表A工程依赖B工程

在这种情况下,需要在A项目的pom.xml文件中增加下属配置定义依赖关系。

通俗理解:就是导jar包

B工程可以是自己的项目打包后的jar包, 也可以是中央仓库的jar包

如何注入依赖:

/*
在pom.xml文件根元素project下的dependencies标签中, 配置依赖信息, 
内可以包含多个dependence元素, 以声明多个依赖。每个依赖dependence标签都应该包含一下元素:
groupId, artifactld,version:依赖的基本坐标,
对于任何一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。
*/

 

 

 2、依赖的传递性

 传递性依赖是Maven2.0的新特性。假设你的项目依赖于一个库,而这个库又依赖于其他库。你不必自己去找出所有的依赖,

你只需要加上你直接依赖的库,Maven会隐式的把这些库间接依赖的库加入到你的项目中。这个特性是靠解析从远程仓库中

获取的依赖库的项目文件实现的。一般的,这些项目的所有依赖都会加入到项目中,或者从父项目继承,或者通过传递性依赖。

如果A依赖了B,那么C依赖A时会自动把A和B都导入进来。

创建A项目后,选中IDEA最右侧Maven面板lifecycle,双击install后就会把项目安装到本地仓库中,其他项目就可以通过坐标引用次项目

 

 

 上面MavenDemo项目依赖了mybatis,将项目重新打包为jar包

clean把之前打的包删掉,install打包

再创建一个项目让MavenDemo2 依赖于 MavenDemo1

 

 

从上面可以证明:项目2依赖项目1, 项目1依赖mybatis工程,传递性项目2可以直接使用mybatis

3、依赖的两个原则 排除依赖

1)最短路径优先原则

“最短路径优先”以为着项目依赖关系树中路径最短的版本会被使用

假如,假设A、B、C之间的依赖关系是A-》B-》C-》D(2.0)和 A-》E-》D(1.0),那么D(1.0)会被使用,因为A通过E到D的路径最短

2)最先声明原则

依赖路径长度是一样的时候,第一原则不能解决所有问题,比如这样的依赖关系:A-》B-》Y(1.0),A-》C-》Y(2.0),Y(1.0)和(2.0)的

依赖长度是一样的,都为2,那么到底谁会被解析使用呢?再maven2.0.8及之前的版本中,这是不确定的,但是maven2.0.9开始,为了尽可能避免

构建的不确定性,maven定义了依赖调解的第二原则:第一声明者优先。在依赖路径长度相等的前提下,在POM中依赖声明的顺序决定了谁会被

解析使用。顺序最靠前的哪个依赖优胜。

3)排除依赖

exclusions:用来排除传递性依赖 其中可配置多个exclusion标签,每个exclusion标签里面对应的有groupId,artifactld,version三项基本元素。

注意:不用写版本号。

比如:A----》B----》C(Mybatis.jar)排除C中的Mybatis.jar

 

 

 

 

 这样就把mybatis排除了

4、依赖范围

依赖范围就决定了你依赖的坐标在什么情况下有效,什么情况下无效:

compile

这是默认范围。如果没有指定,就会使用该依赖范围,表示该依赖在编译和运行时都生效

 

provided

已提供依赖范围。使用此依赖范围的 Maven依赖。典型的例子时servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于

容器已经提供,就不需要Maven重复引入一遍(如:servlet-api)

runtime

runtime范围表明编译时不需要生效,而只在运行时生效。典型的例子时JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,

只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。

system

系统范围于provided类似,不过你必须显式指定一个本地系统路径的JAR,此类依赖应该一直有效,Maven也不会取仓库中寻找它。但是

使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径

test

test范围表明使用此依赖范围的依赖,只在编译测试代码和运行测试的时候需要,应用的正常运行不需要此类依赖。典型的例子就是

jUnit,它只有在编译测试代码及运行测试的时候才需要。jUnit的jar包就在测试阶段用就行了,你导出项目的时候没有必要把jUnit的

东西导出去,在junit坐标下加入scope-test

import

import范围只适用于pom文件中的<dependcyManagement>部分。表明指定的POM必须使用<dependcyManagement>部分的依赖

注意:import只能在<dependcyManagement>的scope里。

定义一个父工程--》POM工程

 

 

 

 只是管理

定义一个子工程

注意:工程1要打成自己的jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>sale.kxq</groupId>
    <artifactId>MavenDemo2</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <parent>
        <groupId>sale.kxq</groupId>
        <artifactId>MavenDemo</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../MavenDemo/pom.xml</relativePath>
    </parent>

    <dependencies>
        <dependency>
            <groupId>sale.kxq</groupId>
            <artifactId>mybatis</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

    </dependencies>

</project>

5、继承关系

如果A工程继承B工程,则代表A工程默认依赖B工程依赖的所有资源,且可以应用B工程中定义的所有的资源信息。

被继承的工程(B工程)只能时POM工程。

注意:在父项目中放在<dependencyManagement>中的内容时不被子项目继承,不可以直接使用放在 <dependencyManagement>

中的内容主要目的是进行版本管理。里面的内容在子项目中依赖时坐标只需要填写<group_id> 和 <artifac_id>即可

注意:如果子项目不希望使用父项目的版本,可以明确配置version。

本质就是POM文件的继承

6、集合关系

当我们开发的工程有2个以上模块的时候,每个模块都是一个独立的功能集合。比如某大学系统中拥有搜索平台、学习平台,考试平台等。

开发的时候每个平台都可以独立编译,测试,运行。这个时候我们就需要一个聚合工程。

在创建聚合工程的过程中,总的工程必须时一个POM工程(Maven Project) (聚合项目必须是一个pom类型的项目,jar项目war项目是没

有办法做聚合工程的),各子模块可以是任意类型模块(Maven Module)。

前提:继承

聚合包含了继承的特性

聚合时多个项目的本质还是一个项目。这些项目被一个大的父项目包含。且这时夫项目类型为pom类型。同时在父项目的pom.xml中

出现<modules>表示包含的所有子模块.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>sale.kxq</groupId>
    <artifactId>ParentPro</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>ChildPro</module>
    </modules>
    <!--定义为pom项目-->
    <packaging>pom</packaging>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <!--定义版本号-->
        <mybatis.version>3.5.4</mybatis.version>
        <spring.version>5.1.11.RELEAS</spring.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

</project>

子模块

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ParentPro</artifactId>
        <groupId>sale.kxq</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ChildPro</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </dependency>
    </dependencies>

</project>

 

 一般总项目为POM项目,PraentPro

八、常见插件

1、编译器插件

通过编译器插件,我们可以配置使用的JDK或者说编译器的版本:

1)settings.xml文件中配置全局编译器插件:

找到profiles节点,在里面加入profile节点:

    <profile>
        <!--定义的编译器插件ID,全局唯一,名字随便起-->
        <id>jdk-1.7</id>
        <!-- 插件标记,activeByDefault:true默认编译器,jdk提供编译器版本-->
        <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.7</jdk>
        </activation>
        <!--配置信息source-源信息,target-字节码信息, compilerVersion-编译过程版本-->
        <properties>
            <maven.compiler.source>1.7</maven.compiler.source>
            <maven.compiler.target>1.7</maven.compiler.target>
            <maven.compiler.compileVersion>1.7</maven.compiler.compileVersion>
        </properties>
    </profile>

2)配置编译器插件: pom.xml配置片段

    <build>
        <!--JDK编译插件-->
        <plugins>
            <plugin>
                <!--插件坐标-->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>

                <configuration>
                    <!--源代码使用JDK版本-->
                    <source>1.7</source>
                    <!--源代码编译为class文件的版本,要抱持跟上面版本一直-->
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

2、资源拷贝插件

Maven在打包时默认只将src/main/resources里的配置文件拷贝到项目中并做打包处理,而非resource目录下的配置文件在打包时不会添加到项目中.

 

我现在想把非resources下面的文件也打包到classes下面:

    <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>

配置好以后,那么你设置的位置下的配置文件就会被打包了

3、Tomcat插件

我们如果创建war项目,必然要部署在服务器上,方式

(1)部署在远程服务器上

(2)将IDEA和外部tomcat产生关联,然后将项目部署在外部tomcat上

现在学习一个新的方式,不再依赖外部的tomcat,maven提供了tomcat插件,我们可以配置来使用。

使用tomcat插件发布部署并执行war工程的时候,需要使用启动命令,启动命令为:tomcat7:run。命令中的

tomcat7时插件命名,有插件提供商决定。run为插件中的具体功能。

(注意:之前用的编译器插件,资源拷贝插件,不是可运行的插件在,maven直接帮我们运行了,但是tomcat属于

可运行插件,它什么时候工作需要程序员控制,怎么控制呢,我们必须通过命令来运行控制)

具体pom.xml文件配置如下:

 

 

 

 

 

 

 

 

 

 缺省的目录可以自己补全

<build>
    <plugins>
      <!--配置Tomcat插件-->
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <!--配置Tomcat监听接口-->
          <port>8080</port>
          <!--配置项目的访问路径(Application Context) -->
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
    ...
    ...
    ...
  </build>

执行命令:

 

 

 

 

 

 

九、Maven常用命令

Maven库:

http://repo2.maven.org/maven2/

Maven依赖查询:

http://mvnrepository.com/

1、Maven常用命令:

1. 创建Maven的普通Java项目:

mvn archetype:create
    -DgroupId=packageName
    -DartifactId=projectName

2. 创建Maven的Web项目:

mvn archetype:create
    -DgroupId=packageName
    -DartifactId=webappName
    -DarchetypeArtifactId=maven-archetype-webapp

3. 反向生成 maven 项目的骨架:

mvn archetype:generate

  你是怎么创建你的maven项目的?是不是像这样:

mvn archetype:create -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.ryanote -Dartifact=common

  如果你还再用的话,那你就out了,现代人都用mvn archetype:generate了,它将创建项目这件枯燥的事更加人性化,你再也不需要记那么多的archetypeArtifactId,你只需输入archetype:generate,剩下的就是做”选择题”了.

  cmd步骤:

  缩写写法:

mvn archetype:generate -DgroupId=otowa.user.dao -DartifactId=user-dao -Dversion=0.01-SNAPSHOT

4. 编译源代码:

mvn compile

5. 编译测试代码:

mvn test-compile

6. 运行测试:

mvn test

7. 产生site:

mvn site

8. 打包:

mvn package

install和package的区别:

  package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其他形式的包)

部署到本地maven仓库和远程maven私服仓库

  install     命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其他形式的包)

部署到本地maven仓库,但没有部署到远程maven私服仓库

9. 在本地Repository中安装jar:

mvn install
例:installing D:\xxx\xx.jar to D:\xx\xxxx

10. 清除产生的项目:

mvn clean

11. 生成eclipse项目:

mvn eclipse:eclipse

12. 生成idea项目:

mvn idea:idea

13. 组合使用goal命令,如只打包不测试:

mvn -Dtest package

14. 编译测试的内容:

mvn test-compile

15. 只打jar包:

mvn jar:jar

16. 只测试而不编译,也不测试编译:

mvn test -skipping compile -skipping test-compile
 ( -skipping 的灵活运用,当然也可以用于其他组合命令) 

17. 清除eclipse的一些系统设置:

mvn eclipse:clean 

18.查看当前项目已被解析的依赖:

mvn dependency:list

19.上传到私服:

mvn deploy

20. 强制检查更新,由于快照版本的更新策略(一天更新几次、隔段时间更新一次)存在,如果想强制更新就会用到此命令: 

mvn clean install-U

21. 源码打包:

mvn source:jar
或
mvn source:jar-no-fork

mvn compile与mvn install、mvn deploy的区别

  1. mvn compile,编译类文件
  2. mvn install,包含mvn compile,mvn package,然后上传到本地仓库
  3. mvn deploy,包含mvn install,然后,上传到私服

2、PS:

  一般使用情况是这样,首先通过cvs或svn下载代码到本机,然后执行mvn eclipse:eclipse生成ecllipse项目文件,然后导入到eclipse就行了;修改代码后执行mvn compile或mvn test检验,也可以下载eclipse的maven插件。

1. 显示版本信息 :

mvn -version/-v

2. 创建mvn项目:

mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app

3. 生成target目录,编译、测试代码,生成测试报告,生成jar/war文件 :

mvn package

4. 运行项目于jetty上:

mvn jetty:run

5. 显示详细错误 信息:

mvn -e

6. 验证工程是否正确,所有需要的资源是否可用:

mvn validate

7. 在集成测试可以运行的环境中处理和发布包:

mvn integration-test

8. 运行任何检查,验证包是否有效且达到质量标准:

mvn verify

9. 产生应用需要的任何额外的源代码,如xdoclet :

mvn generate-sources

10. 使用 help 插件的  describe 目标来输出 Maven Help 插件的信息:

mvn help:describe -Dplugin=help

11. 使用Help 插件输出完整的带有参数的目标列 :

mvn help:describe -Dplugin=help -Dfull

12. 获取单个目标的信息,设置  mojo 参数和  plugin 参数。此命令列出了Compiler 插件的compile 目标的所有信息 :

mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull

13. 列出所有 Maven Exec 插件可用的目标:

mvn help:describe -Dplugin=exec -Dfull

14. 看这个“有效的 (effective)”POM,它暴露了 Maven的默认设置 :

mvn help:effective-pom

15. 想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,打开 Maven 的调试标记运行 :

mvn install -X

16. 给任何目标添加maven.test.skip 属性就能跳过测试 :

mvn install -Dmaven.test.skip=true

17. 构建装配Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件 :

mvn install assembly:assembly

18. 生成Wtp插件的Web项目 :

mvn -Dwtpversion=1.0 eclipse:eclipse

19. 清除Eclipse项目的配置信息(Web项目) :

mvn -Dwtpversion=1.0 eclipse:clean

20. 将项目转化为Eclipse项目 :

mvn eclipse:eclipse

21. mvn exec命令可以执行项目中的main函数 :

首先需要编译java工程:mvn compile
不存在参数的情况下:mvn exec:java -Dexec.mainClass="***.Main"
存在参数:mvn exec:java -Dexec.mainClass="***.Main" -Dexec.args="arg0 arg1 arg2"
指定运行时库:mvn exec:java -Dexec.mainClass="***.Main" -Dexec.classpathScope=runtime

22. 打印出已解决依赖的列表 :

mvn dependency:resolve

23. 打印整个依赖树 :

mvn dependency:tree

在应用程序用使用多个存储库 

复制代码
<repositories>    
    <repository>     
        <id>Ibiblio</id>     
        <name>Ibiblio</name>     
        <url>http://www.ibiblio.org/maven/</url>   
    </repository>   
    <repository>     
        <id>PlanetMirror</id>     
        <name>Planet Mirror</name>     
        <url>http://public.planetmirror.com/pub/maven/</url>   
    </repository>  
</repositories>

mvn deploy:deploy-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar -DrepositoryId=maven-repository-inner -Durl=ftp://xxxxxxx/opt/maven/repository/
复制代码

发布第三方Jar到本地库中

复制代码
mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar


-DdownloadSources=true

-DdownloadJavadocs=true
复制代码

3,附加

mvn help:describe

你是否因为记不清某个插件有哪些goal而痛苦过,你是否因为想不起某个goal有哪些参数而苦恼,那就试试这个命令吧,它会告诉你一切的.

参数: 1. -Dplugin=pluginName   2. -Dgoal(或-Dmojo)=goalName:与-Dplugin一起使用,它会列出某个插件的goal信息,

如果嫌不够详细,同样可以加-Ddetail.(注:一个插件goal也被认为是一个 “Mojo”)

下面大家就运行mvn help:describe -Dplugin=help -Dmojo=describe感受一下吧!

mvn tomcat:run

用了maven后,你再也不需要用eclipse里的tomcat来运行web项目(实际工作中经常会发现用它会出现不同步更新的情况),只需在对应目录里运行 mvn tomat:run命令,然后就可在浏览器里运行查看了.如果你想要更多的定制,可以在pom.xml文件里加下面配置:

01 02 03 04 org.codehaus.mojo 05 tomcat-maven-plugin 06 07 /web 08 9090 09 10 11 12 当然你也可以在命令里加参数来实现特定的功能,

下面几个比较常用:

  1>. 跳过测试:-Dmaven.test.skip(=true)

  2>. 指定端口:-Dmaven.tomcat.port=9090

  3>. 忽略测试失败:-Dmaven.test.failure.ignore=true 当然,如果你的其它关联项目有过更新的话,一定要在项目根目录下运行mvn clean install来执行更新,再运行mvn tomcat:run使改动生效.

mvnDebug tomcat:run

这条命令主要用来远程测试,它会监听远程测试用的8000端口,在eclipse里打开远程测试后,它就会跑起来了,设断点,调试,一切都是这么简单.上面提到的那几个参数在这里同样适用.

mvn dependency:sources

故名思义,有了它,你就不用到处找源码了,运行一下,你项目里所依赖的jar包的源码就都有了

 

posted @ 2022-04-29 14:42  kongxiangqun20220317  阅读(139)  评论(0编辑  收藏  举报