2013-01-24 74 views
3

当我在项目上执行一个干净的&构建时,Maven会将所有资源复制到目标文件夹,但带有创建时间戳,而不是src/main/resources文件夹中原始文件的时间戳。是否有可能以某种方式指示它保留原始时间戳?Maven资源插件:如何将资源复制到目标文件夹并保留时间戳?

导致为什么这对我们有问题的原因是我们正在开发的软件在启动时有数据库迁移,我们希望保持它在开发人员机器上执行。但是由于时间戳的不断变化,这会将不必要的资源重新加载到数据库中。

+1

我还没有尝试过自己,但有一个[复制插件(http://evgeny-goldin.com/ wiki/Copy-maven-plugin#.3CskipIdentical.3E),可以根据更改的时间戳对某些文件进行一些控制。但我想这也会导致构建不完整。 – Masse

回答

0

我不认为有可能使用Maven resources plugin的默认功能。

您可以在运行时更改文件的加载路径吗(可能是通过在每个环境中对其进行配置)?如果是这样,那么也许你可以使用ant with maven并使用ant's copy task其中有preservelastmodified属性。

意图是Maven的资源处理将像往常一样继续工作,但文件也会被复制到每个构建到运行时使用的单独位置。

1

解决方案是使用ant的复制任务。 这是在2个步骤完成: 1)从文件,我们希望保留的日期(在这个例子中,我处理测试资源的正常处理exlude这同样适用于构建资源):

<testResources> 
    <testResource> 
     <directory>src/test/resources</directory> 
     <excludes> 
      <exclude>**/some-files*/**</exclude> 
     </excludes> 
    </testResource> 
</testResources> 

2)第二步是将它们与Ant任务使用MAVE蚂蚁插件复制:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
      <phase>process-test-resources</phase> 
      <configuration> 
       <tasks> 
        <copy todir="${project.build.testOutputDirectory}" preservelastmodified="true"> 
         <fileset dir="src/test/resources"> 
          <include name="**/some-file*/**"/> 
         </fileset> 
        </copy>        
       </tasks> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
+0

我刚刚添加覆盖=“真”的蚂蚁,并使排除不必要的 –

相关问题