maven常用插件实用技巧

来源:互联网 发布:mac ndk下载地址 编辑:程序博客网 时间:2024/04/30 08:18

使用maven-war-plugin插件打包时动态排除指定文件或者文件夹

比如程序中使用的日志框架是logback,我们知道,logback框架在寻找配置文件的时候,首先寻找classes目录下的logback-test.xml配置文件,如果没有寻找到,再使用logback.xml配置文件,利用这个特性,我们可以在src/main/resources目录下放两个配置文件logback-test.xml和logback.xml,其中logback-test.xml文件可以写死日志输出目录,而logback.xml中支持动态配置日志输出目录以及定期压缩日志等功能,这样的话在IDE中启动项目的时候就使用的logback-test.xml配置,当使用mvn package命令打包项目时需要排除该配置文件,配置如下

<plugin>    <artifactId>maven-war-plugin</artifactId>    <version>2.2</version>        <configuration>            <!--打包的时候排除logback-test.xml-->            <packagingExcludes>WEB-INF/classes/logback-test.xml</packagingExcludes>        </configuration></plugin>

使用maven-jar-plugin和maven-dependency-plugin打包可执行jar工程,同时拷贝全部依赖jar文件到指定目录

比如有一个demo工程,是个jar工程,而且还有自己的main方法,那么这就是个可执行jar工程,这个jar工程依赖了很多第三方jar,默认情况下直接执行mvn package后生成的jar文件是不可执行的,因为生成的jar包中没有MANIFEST.MF文件以及没有指定main方法的入口,此外,也没有将相关依赖jar包关联进来,所以需要配置一下以下插件

<!--打包jar文件时,配置manifest文件,加入lib包的jar依赖--><plugin>    <artifactId>maven-jar-plugin</artifactId>    <version>2.4</version>    <configuration>        <archive>            <manifest>                <addClasspath>true</addClasspath>                <classpathPrefix>lib/</classpathPrefix>                <mainClass>cn.cjc.main.DemoMain</mainClass>                <!--强制SNAPSHOT版本的jar在MANIFEST文件中不使用时间戳作为文件名-->                <useUniqueVersions>false</useUniqueVersions>            </manifest>        </archive>    </configuration></plugin><!--拷贝依赖的jar包到lib目录--><plugin>    <artifactId>maven-dependency-plugin</artifactId>    <executions>        <execution>            <id>copy</id>            <phase>package</phase>            <goals>                <goal>copy-dependencies</goal>            </goals>            <configuration>                <outputDirectory>                    ${project.build.directory}/lib                </outputDirectory>            </configuration>        </execution>    </executions></plugin>

其中mainClass标签用来配置main方法入口类,useUniqueVersions一般情况下不需要配置,但是如果demo项目依赖了SNAPSHOT版本的jar,如果不配值此标签的话,在生成的MANIFEST.MF文件中Class-Path一栏指定的此依赖jar文件路径会带上时间戳,而进行拷贝依赖的jar包到lib目录这一步操作时,该依赖jar包文件名中是不含有时间戳的,所以启动demo项目的时候就会找不到这个SNAPSHOT版本的jar文件。

经此配置,会在target目录下生成demo.jar文件,同时会有一个lib目录,里面包含全部的依赖jar包,使用的时候只需要将demo.jar和lib目录同时拷贝到同一个目录即可。

原创粉丝点击