【发布时间】:2013-07-15 12:53:41
【问题描述】:
如何在我的 lib 文件夹中保留未更改的 jar 的时间戳?
我正在使用 Robocopy 将我的服务器 lib 文件夹镜像同步到我的本地计算机。我通过速度较慢的 vpn 连接将所有 jar 文件复制到服务器上的 lib 文件夹中,并且只想复制已更改的那些并删除不再需要的那些。\
我需要一种方法来确保在我的 Maven 构建中,删除 lib 文件夹中我不需要的 jar,并且复制到 lib 文件夹中的 jar 只是以前不存在的较新的 jar。
我不希望完全重建文件夹,因为这会修改 jar 上的时间戳,然后...我必须将它们全部复制到服务器!
如果 jar 的原始时间戳由 maven 保留,这样时间戳与我的 maven 存储库中的时间戳保持一致,那就没问题了。不幸的是,Maven 给了它们一个新的时间戳。
我正在使用标准的 maven setup 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 都是稳定版本的 jar,而我的大部分项目依赖是快照 jar。无论如何,原始库jar的时间戳需要是放在lib中的副本的时间戳。
鉴于 lib 中的 jar 是本地 mvn 存储库中的副本或 jar,mvn clean install 还应该保留它放置在 lib 中的副本的文件 lastmod 时间。至少,这 应该 是默认行为,因为 lib 包含原始 mvn 获取的 jar 文件的真正 副本。
同样有趣的是,当 mvn 将提取的 jar 放入本地存储库时,它会保留文件时间。该插件是罪魁祸首,因为它负责将 jar 复制到 lib 并为它们分配新的时间戳 (argg)!
【问题讨论】:
-
如果你在做
mvn clean install并且你的lib文件夹是相对于你的${project.build.directory}的,那不是让你的lib文件夹总是新的吗?只是为了了解更多,说您的 lib 中的大多数 JAR 都是 SNAPSHOT JAR 是否正确? -
我在主要问题中添加了一个 not 来解释。是的,lib 已重建。但是,lib 中的 jar 副本应该与原始文件具有相同的时间戳。这样就彻底解决问题了。
-
供未来用户参考,为此创建了一个JIRA issue,但它被自动关闭为非活动状态。
标签: java maven package pom.xml preserve