• 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还有很多有趣的特性值得去开发和应用。

  • 相关阅读:
    Alpha版本冲刺(一)
    福大软工 · 第七次作业
    福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队)
    福大软工1816 · 第六次作业
    福大软工1816 · 第五次作业
    福大软工1816
    福大软工1816 · 第一次作业
    Python学习
    整理一下软工实践这门课的一些链接
    个人作业——软件工程实践总结作业
  • 原文地址:https://www.cnblogs.com/liuyitan/p/13229889.html
Copyright © 2020-2023  润新知