1

如何保留我的 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)!

4

1 回答 1

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 相同的时间戳。

有关插件的更多信息:http:
//evgeny-goldin.com/wiki/Copy-maven-plugin

于 2013-07-22T14:22:33.907 回答