最近发现在修改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