Maven篇----09 一些有趣的特性使用
1. 引入jar包时排除掉jar包冲突
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop-version}</version>
<exclusions>
<!-- hadoop,spark程序运行的时候会导致jar包冲突 -->
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>*</artifactId>
</exclusion>
<!-- 已经有一个类来解析xml,再引入这个包会导致冲突 -->
<exclusion>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
</exclusion>
<!-- 已经有一个类来解析xml,再引入这个包会导致冲突 -->
<exclusion>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
</exclusion>
</exclusions>
</dependency>
上面的实例就是在引入jar包时,去掉会导致jar包冲突的实例
在 dependency 里面加入 exclusion 标签,在里面配置好每一个不需要引入的包即可!
2. 打包时引入相应的包,或者排除不需要的配置
引入相应包: 将需要的部分导入jar包,保证程序正常运行
<-- 以下的这个实例是我在原有的项目增加redis的使用添加的,需要将redis相关的类打到jar包里,保证程序正常执行!-->
<artifactSet>
<includes>
<include>cn.mastercom*</include>
<include>org.apache.commoms.pool2*</include>
<include>redis*</include>
</includes>
</artifactSet>
排除不需要的配置: 我们的主要目的是使打出来的jar包尽可能小,节约jar包传输时间
<!-- 排除不需要的配置 -->
<excludes>
<exclude>org/**/*.xml</exclude>
<exclude>org/**/*.properties</exclude>
<exclude>remote/**</exclude>
<exclude>local/**</exclude>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
3. 如何使用自定义xml打包?
在打包的时候,maven默认会按照pom.xml里的配置来引入依赖,但是如何使用自定义xml打包呢?
- 首先要保证该项目依赖的项目已经执行 maven install成功
- 通过 cmd 命令进入到该项目的文件夹下面, 执行命令 mvn clean
- 执行命令: mvn -f=myPom.xml package(其中myPom.xml为自定义xml文件名)
4. 打jar包时指定主类
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>pers.xmr.bigdata.mapr.Main</mainClass>
</transformer>
</transformers>
这样,该jar包就会以我们设置的pers.xmr.bigdata.mapr.Main为主类,
而不需要我们在运行的时候自己指定!
5. 自动排除掉不需要的类
maven有一个minimizeJar标签, 将该标签设置为true的时候会自动排除掉不需要的类,很好用,
但是一定要慎用!!! 一定要慎用!!!
官网中对这个标签的解释如下 :
<minimizeJar>true</minimizeJar>
As of version 1.6, minimizeJar will respect classes that were specifically marked for inclusion in a filter.
Note that specifying an include filter for classes in an artifact implicitly excludes all non-specified classes in that artifact.
附上这一部分的官网链接
6. 插件执行sql脚本
sql-maven-plugin插件提供了sql脚本执行功能,允许用户执行指定的sql脚本文件或语句。
范例:run-sql.xml
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${project.basedir}/src/main/resources/jdbc.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>
<dependencies>
<!-- 定义依赖的数据库驱动jar包(mysql) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
<configuration>
<!-- 定义数据库连接参数 -->
<driver>${jdbc.driverClassName}</driver>
<url>${jdbc.url}</url>
<username>${jdbc.username}</username>
<password>${jdbc.password}</password>
<!-- 指定要执行的sql脚本 'sql'文件夹为脚本所在文件夹下的子文件夹 -->
<srcFiles>
<srcFile>${project.basedir}/sql/emms-dict.sql</srcFile>
</srcFiles>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>execute</goal>
</goals>
</execution>
</executions>
</plugin>
说明:
- 第一个插件用于加载配置文件,第二个插件用于执行sql文件;
- <phase>即指定在maven生命周期的哪个环节执行,关于maven生命周期的说明可以参考http://my.oschina.net/crazyharry/blog/353978
运行方式如下:
# 因为上面的脚本我没有使用缺省的文件名pom.xml,所以maven执行的时候要用-f 指定文件名
mvn -f run-sql.xml sql:execute
参考资料:
《sql-maven-plugin usage》
《execute-mojo》
《Maven Properties Guide》
maven还有很多有趣的特性值得去开发和应用。
【Quality】
Quality is the value to someone who matters。做测试,首先要找到这个someone是谁,以及这个 someone重视的 value是什么。