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打包呢?

  1. 首先要保证该项目依赖的项目已经执行 maven install成功
  2. 通过 cmd 命令进入到该项目的文件夹下面, 执行命令 mvn clean
  3. 执行命令: 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>

说明:

  1. 第一个插件用于加载配置文件,第二个插件用于执行sql文件;
  2. <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还有很多有趣的特性值得去开发和应用。

原文地址:https://www.cnblogs.com/liuyitan/p/13229889.html