如何在lib文件夹中保留未更改的jar的时间戳?
我正在使用Robocopy将我的服务器lib文件夹与本地计算机镜像同步。我通过一个有点慢的VPN连接将我的所有罐子复制到服务器上的lib文件夹中,并且只想复制那些已更改并删除任何不再需要的罐子。\
我需要的是一种确保在我的Maven构建中删除lib文件夹中不需要的jar并且复制到lib文件夹中的jar只是之前没有的jars的方法。
我不希望文件夹完全重建,因为这会修改罐子上的时间戳然后......我将把它们全部复制到服务器!!
如果罐子的原始时间戳由maven保存,那么这样就可以了,因此时间戳与我的maven存储库中的时间戳保持一致。不幸的是,Maven给了他们一个新的时间戳。
我正在使用标准的maven设置pom创建一个包含所有依赖项的lib文件夹:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>${mainClass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
注意:
我的大部分依赖罐都是稳定的释放罐,我的大部分项目都依赖于快照罐。无论如何,原始库jar的时间戳必须是放在lib中的副本的时间戳。
鉴于lib中的jar是本地mvn存储库中的副本或jar,mvn clean install还应该保留它放在lib中的副本的文件lastmod时间。至少,应该是默认行为,因为lib包含原始mvn获取的jar文件的bonafide 副本。
同样有趣的是,当mvn将它们放入本地存储库时,它会从获取的jar中保留文件时间。该插件是罪魁祸首,因为它负责将jar复制到lib中,并为它们分配新的时间戳(argg)!
答案 0 :(得分:2)
如果您不介意不使用maven-dependency-plugin
,可以尝试在pom.xml
内使用这些配置:
<build>
<plugins>
<plugin>
<groupId>com.github.goldin</groupId>
<artifactId>copy-maven-plugin</artifactId>
<version>0.2.5</version>
<executions>
<execution>
<id>copy-deps</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<resources>
<resource>
<targetPath>${project.build.directory}/lib</targetPath>
<dependency>
<includeScope>compile</includeScope>
</dependency>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我在我的本地计算机上尝试了这个,它似乎产生了与我本地M2存储库中的JAR相同的时间戳。