平时天天用maven,大部分只用了基本功能,很多高级功能都不是特别熟悉,导致遇到问题的时候不知道从何入手.
于是整理一下常见的maven进阶功能.
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。如下所示:
目录 | 目的 |
---|---|
${basedir} | 存放pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
${basedir}/src/test/java | 项目的测试类,比如说Junit代码 |
${basedir}/src/test/resources | 测试用的资源 |
${basedir}/src/main/webapp/WEB-INF | web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 |
${basedir}/target | 打包输出目录 |
${basedir}/target/classes | 编译输出目录 |
${basedir}/target/test-classes | 测试编译输出目录 |
Test.java | Maven只会自动运行符合该命名规则的测试类 |
~/.m2/repository | Maven默认本地仓库目录位置 |
mvn clean:清理
mvn compile:编译主程序
mvn test-compile:编译测试程序
mvn test:执行测试
mvn package:打包
mvn install:安装
mvn deploy: 部署
deploy 插件在2.7之前需要指定repo.不然会报错. 2.7之后会按照settings.xml的默认repo部署
设置maven编译的jdk版本和其他细节,maven3默认用jdk1.5,maven2默认用jdk1.3
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<configuration>
<source>${maven-compiler-source.version}source>
<target>${maven-compiler-target.version}target>
<showWarnings>trueshowWarnings>
<encoding>UTF-8encoding>
<skipTests>trueskipTests>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>${lombok.version}version>
path>
<path>
<groupId>org.mapstructgroupId>
<artifactId>mapstruct-processorartifactId>
<version>${mapstruct.version}version>
path>
annotationProcessorPaths>
configuration>
plugin>
顾名思义,打jar包的插件,配置打jar包的一些细节
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-jar-pluginartifactId>
<configuration>
<classesDirectory>target/classes/classesDirectory>
<archive>
<manifest>
<mainClass>com.alibaba.dubbo.container.MainmainClass>
<useUniqueVersions>falseuseUniqueVersions>
<addClasspath>trueaddClasspath>
<classpathPrefix>lib/classpathPrefix>
manifest>
<manifestEntries>
<Class-Path>.Class-Path>
manifestEntries>
archive>
configuration>
plugin>
打包源码插件
注意: 在多项目构建中, 将source-plugin置于顶层或parent的pom中并不会发挥作用,必须置于具体项目的pom中
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
<executions>
<execution>
<id>attach-sourcesid>
<goals>
<goal>jargoal>
goals>
execution>
executions>
plugin>
说明: 该插件处理项目的资源文件拷贝到输出目录. 可以分别处理main resource和test resource
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-resources-pluginartifactId>
<version>3.0.1version>
<configuration>
<encoding>UTF-8encoding>
configuration>
plugin>
自动拷贝jar包到target目录
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-dependency-pluginartifactId>
<version>2.6version>
<executions>
<execution>
<id>copy-dependenciesid>
<phase>compilephase>
<goals>
<goal>copy-dependenciesgoal>
goals>
<configuration>
<outputDirectory>${project.build.directory}/liboutputDirectory>
<excludeTransitive>falseexcludeTransitive>
<stripVersion>truestripVersion>
configuration>
execution>
executions>
plugin>
maven-assembly-plugin
整合项目输出,包括依赖,木块,网站文档和其他文档到一个单独的文档,即可用定制化打包
创建的文档格式包括: zip, tar, tar.gz(tgz), gar.bz2(tbgz2), jar, dir, war等. 四种预定义的描述器可用: bin, jar-with-dependencies, src, project
<plugin>
<artifactId>maven-assembly-pluginartifactId>
<version>3.0.0version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependenciesdescriptorRef>
descriptorRefs>
configuration>
<executions>
<execution>
<id>make-assemblyid>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
execution>
executions>
plugin>
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>binid>
<formats>
<format>tar.gzformat>
<format>tar.bz2format>
<format>zipformat>
formats>
<fileSets>
<fileSet>
<directory>${project.basedir}directory>
<outputDirectory>/outputDirectory>
<includes>
<include>README*include>
<include>LICENSE*include>
<include>NOTICE*include>
includes>
fileSet>
<fileSet>
<directory>${project.build.directory}directory>
<outputDirectory>/outputDirectory>
<includes>
<include>*.jarinclude>
includes>
fileSet>
<fileSet>
<directory>${project.build.directory}/sitedirectory>
<outputDirectory>docsoutputDirectory>
fileSet>
fileSets>
assembly>
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>jar-with-dependenciesid>
<formats>
<format>jarformat>
formats>
<includeBaseDirectory>falseincludeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/outputDirectory>
<useProjectArtifact>trueuseProjectArtifact>
<unpack>trueunpack>
<scope>runtimescope>
dependencySet>
dependencySets>
assembly>
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
<id>srcid>
<formats>
<format>tar.gzformat>
<format>tar.bz2format>
<format>zipformat>
formats>
<fileSets>
<fileSet>
<directory>${project.basedir}directory>
<includes>
<include>README*include>
<include>LICENSE*include>
<include>NOTICE*include>
<include>pom.xmlinclude>
includes>
<useDefaultExcludes>trueuseDefaultExcludes>
fileSet>
<fileSet>
<directory>${project.basedir}/srcdirectory>
<useDefaultExcludes>trueuseDefaultExcludes>
fileSet>
fileSets>
assembly>