保留lib文件夹中未更改的jar的时间戳

时间:2013-07-15 12:53:41

标签: java maven package pom.xml preserve

如何在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)!

1 个答案:

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

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