Maven打包时带有旧版本的jar包问题
Contents
最近发现在修改pom.xl
的jar包版本依赖时,每次进行package
时,都会发现以前的版本的jar包遗留下来。
原因
这是因为我们公司有部分同事,喜欢在Eclipse里配置Tomcat的部署目录直接为项目的目录,而且在pom.xml
配置了如下的task
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copy-lib-src-webapps</id>
<phase>package</phase>
<configuration>
<tasks>
<copy todir="webroot/WEB-INF/lib">
<fileset dir="target/ROOT/WEB-INF/lib">
<include name="*" />
</fileset>
</copy>
<copy todir="webroot/WEB-INF/classes">
<fileset dir="target/ROOT/WEB-INF/classes">
<include name="*" />
</fileset>
</copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
关键就是上面的tasks
部分,它是直接将target/ROOT/WEB-INF/lib
目录,复制到项目工程的webroot/WEB-INF/lib
目录下。而target/ROOT/WEB-INF/lib
又是在部署时,将webroot/WEB-INF/lib
目录复制到该目录的。这样子,就造成了旧版本的JAR
包,一直会叠加了。还有classes
目录也同理,虽然同名的会覆盖,但删除的java文件,还会保留下来,作为一名处女座,应该不能忍受这种事情。所以,进行了以下改造:
解决
修改上面那段代码为以下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>delete-lib</id>
<phase>clean</phase>
<configuration>
<target>
<mkdir dir="webroot/WEB-INF/lib/"/>
<delete includeemptydirs="true">
<fileset dir="webroot/WEB-INF/lib/" includes="**/*"/>
</delete>
<mkdir dir="webroot/WEB-INF/classes"/>
<delete includeemptydirs="true">
<fileset dir="webroot/WEB-INF/classes/" includes="**/*"/>
</delete>
<mkdir dir="webroot/WEB-INF/classes"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>copy-lib-src-webapps</id>
<phase>package</phase>
<configuration>
<target>
<copy todir="webroot/WEB-INF/lib">
<fileset dir="target/ROOT/WEB-INF/lib">
<include name="*" />
</fileset>
</copy>
<copy todir="webroot/WEB-INF/classes">
<fileset dir="target/ROOT/WEB-INF/classes">
<include name="*" />
</fileset>
</copy>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
这样子就解决了。思路也非常简单:就是先删除,再copy。
这样子,执行命令时,就不会有遗留旧的jar包版本了。
mvn clean package -Dmaven.test.skip=true