Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。插件通常提供了一个目标的集合,并且可以使用下面的语法执行:
mvn [plugin-name]:[goal-name]
例如,一个 Java 工程可以使用 maven-compiler-plugin 的 compile-goal 编译,使用以下命令:
mvn compiler:compile
添加插件在build中
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <uriEncoding>UTF-8</uriEncoding> <path>/xinzhi</path> <finalName>xinzhi</finalName> </configuration> </plugin>
点击idea右侧的maven我们可以方便的看到我们使用了什么插件,并可以点击执行相应的命令
通过插件和命令我们都可以启动项目了,都不用部署到tomcat里了
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <warName>test</warName> <webResources> <resource> <directory>src/main/webapp/WEB-INF</directory> <filtering>true</filtering> <targetPath>WEB-INF</targetPath> <includes> <include>web.xml</include> </includes> </resource> </webResources> </configuration> </plugin>
执行命令 mvn clean package
maven-jar-plugin,默认的打包插件,用来打普通的project JAR包; maven-shade-plugin,用来打可执行JAR包,也就是所谓的fat JAR包; maven-assembly-plugin,支持自定义的打包结构,也可以定制依赖项等。 我们日常使用的以maven-assembly-plugin为最多,因为大数据项目中往往有很多shell脚本、SQL脚本、.properties及.xml配置项等,采用assembly插件可以让输出的结构清晰而标准化
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>make-assembly</id> <!-- 绑定到package生命周期 --> <phase>package</phase> <!--设置运行目标--> <goals> <!-- 只运行一次 --> <goal>single</goal> </goals> </execution> </executions> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.xinzi.Test</mainClass> <!-- 你的主类名 --> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin>
<properties> <maven.compiler.source>1.8</maven.compiler.source> 源码编译 jdk 版本 <maven.compiler.target>1.8</maven.compiler.target> 运行代码的 jdk 版本 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 项目构建使用的编码,避免中文乱码 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 生成报告的编码 </properties>
在properties定义标签,这个标签就是一个变量, 标签的文本就是变量的值。
使用全局变量表示多个依赖使用的版本号。使用步骤:
1.在properties标签中,定义一个标签,指定版本的值
<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> <!--自定义变量--> <spring.version>5.2.5.RELEASE</spring.version> <junit.version>4.11</junit.version> </properties>
2.使用全局变量, 语法 ${变量名}
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <!-- 使用${变量名}来引用上面的定义--> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency>
处理的配置文件的信息, maven默认处理配置文件
①:maven会把src/main/resources目录中的文件, 拷贝到target/classes目录下
②:maven只处理src/main/java目录中的 .java文件,把这些java文件编译为class,拷贝到 target/classes目录中。 不处理其他文件。
但是有些小伙伴就喜欢在src中填写配置文件,这样就导致 src/main/java目录中的配置文件会被过滤掉,因此需要加上如下配置:
<build> <!--资源插件 告诉maven把 src/main/java目录中的 指定扩展名的文件 拷贝到 target/classes目录中。 --> <resources> <resource> <directory>src/main/java</directory><!--所在的目录--> <includes> <!--包括目录下的.properties,.xml 文件都会扫描到--> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <!-- filtering 选项 false 不启用过滤器, *.property 已经起到过 滤的作用了 --> <filtering>false</filtering> </resource> </resources> </build>
在pom.xml 中添加如下配置:
<!--配置当前工程构建过程中的特殊设置 --> <build> <finalName>AtguiguWeb</finalName> <!-- 配置构建过程中需要使用的插件 --> <plugins> <plugin> <!-- cargo是一家专门从事启动Servlet容器的组织 --> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven2-plugin</artifactId> <version>1.2.3</version> <!-- 针对插件进行的配置 --> <configuration> <!-- 配置当前系统中容器的位置 --> <container> <containerId>tomcat6x</containerId> <home>D:\DevInstall\apache-tomcat-6.0.39</home> </container> <configuration> <type>existing</type> <home>D:\DevInstall\apache-tomcat-6.0.39</home> <!-- 如果Tomcat端口为默认值8080则不必设置该属性 --> <properties> <cargo.servlet.port>8989</cargo.servlet.port> </properties> </configuration> </configuration> <!-- 配置插件在什么情况下执行 --> <executions> <execution> <id>cargo-run</id> <!-- 生命周期的阶段 --> <phase>install</phase> <goals> <!-- 插件的目标 --> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
执行mvn deploy 命令
篇幅较长,分为五篇来记录,其他章节请见:
大话 Maven 系列笔记(一)——Maven概述:https://www.cnblogs.com/poscana/p/14940497.html
大话 Maven 系列笔记(二)——Maven依赖:https://www.cnblogs.com/poscana/p/14940545.html
大话 Maven 系列笔记(三)——pom文件:https://www.cnblogs.com/poscana/p/14940562.html
大话 Maven 系列笔记(四)——Maven仓库:https://www.cnblogs.com/poscana/p/14940577.html
大话 Maven 系列笔记(五)——插件和常用设置:https://www.cnblogs.com/poscana/p/14940596.html