Maven使用
Maven
- 1. 安装与使用
- 2. 生命周期(Lifecycle)
- 3. POM 参考
- 4. 插件
1 安装与使用
修改镜像源,增加 jar 包下载速度,比如使用阿里云的源,settings.xml:
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
使用 archetype(原型) 插件,生成项目:
mvn -h
mvn archetype:generate # interactive
mvn -B archetype:generate
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp \
-DgroupId=com.mycompany.app \
-DartifactId=my-app # new project one line
执行命令示例:
# run task with lifecycle's phase
mvn install
mvn clean
mvn clean install
mvn clean install -U # force refresh
# run task with goal directly
mvn default:install
mvn archetype:help
依赖相关命令:
mvn dependency:help
mvn dependency:list
mvn dependency:tree
mvn dependency:copy
mvn dependency:copy-dependencies
mvn dependency:copy-dependencies -DoutputDirectory=/tmp/xxx -DincludeScope=compile
# 坐标(coordinate): 'groupId:artifactId:version'
生命周期(Lifecycle)
包括以下三种
- default,默认,用于构建项目:
- clean,用于清理
- site,用于搭建网站
default 是默认的生命周期(Lifecycle
),它包括很多步骤(Phase
),主要的有:
Order | Phase | 默认绑定的 Plugin:Goal |
---|---|---|
Order | Phase | 默认绑定的 Plugin:Goal |
1 | validate | 空 |
2 | compile | resources:resources, compiler:compile |
3 | test | resources:testResources, compiler:testCompile, surefire:test |
4 | package | maven-war-plugin:3.2.0:war |
5 | verify | 空 |
6 | install | maven-install-plugin:2.5.2:install |
7 | deploy | maven-deploy-plugin:2.8.2:deploy |
它的调用方式为:
mvn install # 将会依次调用 1-6 的 Phase,即执行每个 Phase 所绑定的 Goal
mvn compile # 如果只想编译,并不想测试、打包、安装,那么只需要执行到 compile 即可
另外,clean 用于清理,包括以下 phase:
- pre-clean
- clean
- post-clean
site 生命周期的 phase 有:
- pre-site
- site
- post-site
- site-deploy
POM 参考
https://maven.apache.org/pom.html#What_is_the_POM
POM(Project Object Model) 示例:
<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>
<!-- The Basics -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>
<packaging>jar/war</packaging>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<!-- Project Settings -->
<modules>
<module>xxx</module>
<module>yyy</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
<xxx.version>1.22222</xxx.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12 | [1.0] | (,1.2] | (,1.0],[1.2,) | LATEST | ${xxx.version}</version>
<type>jar</type>
<scope>compile/provided/runtime/test/system</scope>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>tgroupid</groupId>
<artifactId>af</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- Build Settings -->
<build>...</build>
<reporting>...</reporting>
<!-- More Project Information -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- Environment Settings -->
<repositories>
<repository>
<id>springsource-repo</id>
<name>SpringSource Repository</name>
<url>http://repo.springsource.org/release</url>
</repository>
</repositories>
<distributionManagement>
<repository>
<id>mycompany-repository</id>
<name>MyCompany Repository</name>
<url>scp://repository.mycompany.com/repository/maven2</url>
</repository>
</distributionManagement>
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<pluginRepositories>...</pluginRepositories>
<profiles>...</profiles>
</project>
Build Configuration:
<build>
<finalName>xxx</finalName>
<filters>
<filter>src/main/filters/filter.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
插件配置示例
插件分为两类:
- build plugin
- reporting plugin
配置示例:
<plugins>
<plugin>
<artifactId>maven-myquery-plugin</artifactId>
<version>1.0</version>
<configuration>
<!-- 配置参数 -->
</configuration>
<dependencies>
<!-- 配置依赖 -->
</dependencies>
<executions>
<!-- 参与 lifecycle -->
<execution>
<id>execution1</id>
<phase>test</phase>
<goals>
<goal>query</goal>
</goals>
<configuration>
<url>http://www.foo.com/query</url>
<timeout>10</timeout>
<options><option>one</option><option>two</option><option>three</option></options>
</configuration>
</execution>
<execution>
<id>execution2</id>
<goals><goal>query</goal></goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>echodir</id>
<goals>
<goal>run</goal>
</goals>
<phase>verify</phase>
<inherited>false</inherited>
<configuration>
<tasks>
<echo>Build Dir: ${project.build.directory}</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
插件
TOMCAT插件:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<hostName>localhost</hostName> <!-- Default: localhost -->
<port>8080</port> <!-- Default: 8080 -->
<path>/ccc</path> <!-- Default: /${project.artifactId}-->
<uriEncoding>UTF-8</uriEncoding> <!-- Default: ISO-8859-1 -->
</configuration>
</plugin>
运行:
mvn tomcat7:run
mvn tomcat7:help
mvn tomcat7:deploy/undeply/redeploy