不管你用什么插件,创建项目后pom文件中首先引入以下配置项
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
首先是默认的编译插件maven-compiler-plugin和打包插件maven-jar-plugin,一般不需要进行配置。
1、maven-compiler-plugin
1)编译时指定encoding,否则中文通不过,configuration可以只配置encoding
2)执行mvn install时编译报错,因为编译器的版本太老了,通过这个插件修改版本,可以只配置source和target
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-extdirs</arg>
<arg>${project.basedir}/src/main/webapp/WEB-INF/lib</arg>
</compilerArgs>
</configuration>
</plugin>
2、maven-jar-plugin
默认的打包插件,指定主程序的入口,将依赖的jar包一同打出
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<mainClass>com.alibaba.dubbo.container.Main</mainClass>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
3、maven-dependency-plugin
自动拷jar包到target目录,我们实际部署时只有java环境,没有源码和IDE,所以一般使用这个插件把引用的库统一打包到指定目录下,比如lib文件夹。部署war包时,需要将项目依赖的jar包,也打到war包中,这时就会用到该插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<useUniqueVersions>false</useUniqueVersions>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
4、jetty-maven-plugin
mvn jetty:run 启动;Ctrl +C停止服务或者使用mvn jetty:stop
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.6.v20170531</version>
<configuration>
<!-- jetty 默认使用的端口是 8080 -->
<httpConnector>
<port>8081</port>
<idleTimeout>60000</idleTimeout>
</httpConnector>
<!--热部署方式:默认automatic自动部署,设置为manual,每次修改完成后按回车键才会重新部署-->
<reload>manual</reload>
<!--web上下文,最常用的是 contextPath-->
<webApp>
<contextPath>/</contextPath>
</webApp>
<!--访问日志-->
<requestLog implementation="org.eclipse.jetty.server.NCSARequestLog">
<filename>target/access-yyyy_mm_dd.log.log</filename>
<filenameDateFormat>yyyy_MM_dd</filenameDateFormat>
<logDateFormat>yyyy-MM-dd HH:mm:ss</logDateFormat>
<logTimeZone>GMT+8:00</logTimeZone><!--时区:东八区北京时间-->
<logServer>true</logServer>
<retainDays>90</retainDays>
<append>true</append>
<extended>false</extended>
</requestLog>
<!--以下配置可以暂时不加,最好设置为false,不了解-->
<systemProperties>
<systemProperty>
<name>productionMode</name>
<value>false</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
jetty插件需要引入一个依赖插件,否则报错:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
5、maven-war-plugin
打war包时,配置排除某些web资源文件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<excludes>
<exclude>**/*.jpg</exclude>
</excludes>
</resource>
</webResources>
</configuration>
</plugin>
6、maven-assembly-plugin
支持各种打包文件格式,包括zip、tar.gz等,通过一个打包描述文件如src/main/assembly.xml,来选择具体打包哪些文件集合、依赖、模块、以及本地仓库文件,每个文件的具体打包路径可以自由控制。
1) 使用方式如下,首先安装plugin,配置assembly.xml文件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
2) 配置assembly.xml文件
<assembly>
<id>bin</id>
<formats>
<format>zip</format>
</formats>
<dependencySets>
<dependencySet>
<useProjectArtifact>true</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<outputDirectory>/</outputDirectory>
<includes>
<include>README.md</include>
</includes>
</fileSet>
<fileSet>
<directory>src/main/scripts</directory>
<outputDirectory>/bin</outputDirectory>
<includes>
<include>run.sh</include>
<include>run.bat</include>
</includes>
</fileSet>
</fileSets>
</assembly>
以上代码,执行mvn clean install生成zip包,解压包含两个文件夹:bin、lib以及README.md文件
7、mybatisplus-maven-plugin
mybatisplus生成代码已经很方便了,最近又发现提供了这个插件,首先引入配置
<plugin>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-maven-plugin</artifactId>
<version>1.0</version>
<configuration>
<!-- 输出目录(默认java.io.tmpdir) -->
<outputDir>e:\cache</outputDir>
<!-- 是否覆盖同名文件(默认false) -->
<fileOverride>true</fileOverride>
<!-- mapper.xml 中添加二级缓存配置(默认true) -->
<enableCache>true</enableCache>
<!-- 开发者名称 -->
<author>Yanghu</author>
<!-- 是否开启 ActiveRecord 模式(默认true) -->
<activeRecord>false</activeRecord>
<!-- 数据源配置,( **必配** ) -->
<dataSource>
<driverName>com.mysql.jdbc.Driver</driverName>
<url>jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&useSSL=false</url>
<username>root</username>
<password>123456</password>
</dataSource>
<strategy>
<!-- 字段生成策略,四种类型,从名称就能看出来含义:
nochange(默认),
underline_to_camel,(下划线转驼峰)
remove_prefix,(去除第一个下划线的前部分,后面保持不变)
remove_prefix_and_camel(去除第一个下划线的前部分,后面转驼峰) -->
<naming>remove_prefix_and_camel</naming>
<!-- 表前缀 -->
<tablePrefix>bmd_</tablePrefix>
<!--Entity中的ID生成策略(默认 id_worker)-->
<idGenType>uuid</idGenType>
<!--自定义超类-->
<!--<superServiceClass>com.baomidou.base.BaseService</superServiceClass>-->
<!-- 要包含的表 与exclude 二选一配置-->
<!--<include>-->
<!--<property>sec_user</property>-->
<!--<property>table1</property>-->
<!--</include>-->
<!-- 要排除的表 -->
<!--<exclude>-->
<!--<property>schema_version</property>-->
<!--</exclude>-->
</strategy>
<packageInfo>
<!-- 父级包名称,如果不写,下面的service等就需要写全包名(默认com.baomidou) -->
<parent>com.baomidou</parent>
<!--service包名(默认service)-->
<service>service</service>
<!--serviceImpl包名(默认service.impl)-->
<serviceImpl>service.impl</serviceImpl>
<!--entity包名(默认entity)-->
<entity>entity</entity>
<!--mapper包名(默认mapper)-->
<mapper>mapper</mapper>
<!--xml包名(默认mapper.xml)-->
<xml>mapper.xml</xml>
</packageInfo>
<template>
<!-- 定义controller模板的路径 -->
<!--<controller>/template/controller1.java.vm</controller>-->
</template>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
</plugin>
执行命令:
mvn com.baomidou:mybatisplus-maven-plugin:1.0:code
#也可在settings.xml中添加以下配置,然后执行mvn mp:code
<pluginGroups>
<pluginGroup>com.baomidou</pluginGroup>
</pluginGroups>
美中不足:1、会暴露数据库配置,2、生成的实体不能引入lombok,3、会自动添加一个字段id,生成策略默认为uuid,如果想用自增,需要将这个配置改成auto
8、maven-surefire-plugin跳过单元测试
<!--跳过单元测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>