lib フォルダー内で変更されていない jar のタイムスタンプを保持するにはどうすればよいですか?
Robocopy を使用して、サーバーの lib フォルダーをローカル マシンとミラー同期しています。サーバー上の lib フォルダーにすべての jar をやや低速の vpn 接続を介してコピーし、変更されたものだけをコピーして、不要になったものを削除したいと考えています。\
私が必要としているのは、Maven ビルドで、lib フォルダーにある必要のない jar が削除され、lib フォルダーにコピーされた jar が以前にはなかった新しいものだけであることを確認する方法です。
フォルダーを完全に再構築したくありません。これは、jar のタイムスタンプが変更されてから...それらすべてをサーバーにコピーする必要があるためです!!
ジャーの元のタイムスタンプが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 のほとんどは安定リリース jar であり、私のプロジェクト依存のほとんどはスナップショット jar です。とにかく、元のライブラリ jar のタイムスタンプは、lib に配置されたコピーのタイムスタンプである必要があります。
lib 内の jar がローカルの mvn リポジトリ内のコピーまたは jar であることを考えると、mvn クリーン インストールでは、lib に配置されたコピーのファイル lastmod 時刻も保持する必要があります。少なくとも、lib には元の mvn フェッチ jar ファイルの正真正銘のコピーが含まれているため、これがデフォルトの動作である必要があります。
また興味深いことに、mvn は、フェッチした jar ファイルをローカル リポジトリに配置するときにファイル時刻を保存します。プラグインは、jar を lib にコピーする責任があり、それらに新しいタイムスタンプ (argg) を割り当てるため、犯人です!