maven进阶

Maven高阶教程

平时天天用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-compiler-plugin

设置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>
maven-jar-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>

maven-source-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>
maven-resource-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>
maven-dependency-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>

开发篇

你可能感兴趣的:(maven,java,jar)