0%

Java-Maven

本章是整理知识内容,为强化知识长期更新。

Mavan常用命令以及用法

  • 常用命令就要先了解Maven的生命周期
    • Maven的生命周期就是对所有的构建过程进行抽象和统一。包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。
    • Maven的生命周期是抽象的,即生命周期不做任何实际的工作,实际任务由插件完成,类似于设计模式中的模板方法。所以必须有对应的插件才能执行对于的步骤。
    • Maven有三套相互独立的生命周期,分别是clean、default和site。每个生命周期包含一些阶段(phase),阶段是有顺序的,后面的阶段依赖于前面的阶段。
      • clean生命周期:清理项目,包含三个phase。
        • 1.)pre-clean:执行清理前需要完成的工作。
        • 2)clean:清理上一次构建生成的文件。
        • 3)post-clean:执行清理后需要完成的工作。
      • default生命周期:构建项目,重要的phase如下。
        • 1)validate:验证工程是否正确,所有需要的资源是否可用。
        • 2)compile:编译项目的源代码。
        • 3)test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
        • 4)Package:把已编译的代码打包成可发布的格式,比如jar。
        • 5)integration-test:如有需要,将包处理和发布到一个能够进行集成测试的环境。
        • 6)verify:运行所有检查,验证包是否有效且达到质量标准。
        • 7)install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用。
        • 8)Deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。
      • site生命周期:建立和发布项目站点,phase如下。
        • 1)pre-site:生成项目站点之前需要完成的工作。
        • 2)site:生成项目站点文档。
        • 3)post-site:生成项目站点之后需要完成的工作。
        • 4)site-deploy:将项目站点发布到服务器
  • mvn clean

    • 清理项目构建文件。调用clean生命周期的clean阶段,实际执行pre-clean和clean阶段。
  • mvn install

    • 构建项目文件。实际执行pre-clean和clean,install以及之前所有阶段。
  • mvn install -Dmaven.test.skip=true

    • 构建项目的时候不执行测试。也可以使用插件来配置。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      <!-- surefire 插件用来在maven构建生命周期的test phase执行一个应用的单元测试 -->
      <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.19.1</version>
      <configuration>
      <skipTests>true</skipTests>
      <forkMode>once</forkMode>
      <argLine>-Dfile.encoding=UTF-8</argLine>
      </configuration>
      <!-- 插件手动匹配JUnit 目前是使用4.10的版本-->
      <dependencies>
      <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-junit47</artifactId>
      <version>2.19.1</version>
      </dependency>
      </dependencies>
      </plugin>
  • mvn eclipse:eclipse

    • 将pom项目转换成eclipse格式项目。
  • mvn jetty:run -war

    • 使用内置jetty启动项目,需要配置jetty扩展插件。也可以使用tomcat来作为插件。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      <!-- 配置Maven插件(mvn jetty:run -war可以运行项目) -->
      <plugin>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>9.3.0.M1</version>
      <configuration>
      <!-- 指定访问端口 -->
      <httpConnector>
      <port>80</port>
      </httpConnector>
      <!-- 间隔x扫描一次,实现热部署
      <scanIntervalSeconds>0</scanIntervalSeconds>
      -->
      <!-- 编写类文件之后,是否自动重启jetty;可选后面两个值[manual|automatic]
      <reload>manual</reload>
      -->
      <!-- 指定关闭端口 -->
      <stopPort>9998</stopPort>
      <stopKey>stop-jetty</stopKey>
      <webApp>
      <!-- 配置<contextPath>/</contextPath>,则访问路径为http://localhost:80 -->
      <contextPath>/</contextPath>
      <!-- 更改jetty默认webdefault.xml文件,主要修改了useFileMappedBuffer属性为false,使其不锁定静态文件 -->
      <!-- 此文件在C盘\用户目录\.m2\repository\org\eclipse\jetty\jetty-webapp\9.1.0.RC1\找到jar包,打开jar包目录org\eclipse\jetty\webapp\目录中 -->
      <!-- <defaultsDescriptor>webdefault.xml</defaultsDescriptor> -->
      <defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor>
      </webApp>
      </configuration>
      </plugin>

插件Git Version

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!-- Git Version插件 -->
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>4.0.0</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<phase>initialize</phase>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
<verbose>false</verbose>
<dateFormat>yyyy-MM-dd HH:mm:ss</dateFormat>
<prefix>git</prefix>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/${project.name}.build.json</generateGitPropertiesFilename>
<format>json</format>
<gitDescribe>
<skip>false</skip>
<always>false</always>
<dirty>-dirty</dirty>
</gitDescribe>
</configuration>
</plugin>

  • 插件将会在每次构建时生成一个版本相关文件