How to stop Maven from overwriting resource files

2019-05-06 11:46发布

问题:

I have the default maven structure:

main
--java
--resources
--webapp

I see that every mvn compile copies resources even though they were not changed. What should I do to make build copy only changed files?

<build>
         <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

        </plugins>
    </build>
    <dependencies>
        ...
    </dependencies>

    <properties>
        <maven.resources.overwrite>false</maven.resources.overwrite>
    </properties>

Here is the output in debug mode:

[INFO] Using 'cp1252' encoding to copy filtered resources.
[DEBUG] resource with targetPath null
directory C:\core\src\main\resources
excludes []
includes []
[DEBUG] ignoreDelta true
[INFO] Copying 190 resources
[DEBUG] file batch.bat has a filtered file extension
[DEBUG] copy C:\core\src\main\resources\batch.bat to C:\core\target\classes\batch.bat
[DEBUG] file DataObject.hbm.xml has a filtered file extension
[DEBUG] copy C:\core\src\main\resources\com\data\DataObject.hbm.xml to C:\core\target\classes\com\data\DataObject.hbm.xml

回答1:

Use the property -Dmaven.resources.overwrite=false on the Maven command. See the overwrite parameter of the resources:resources goal.

However the documentation mentions this is the default behavior so check if this parameter is set to true somewhere in your project configuration.

EDIT:

As mentioned in the comments, it seems that even though the log indicates copying, in fact the files are not being changed (the timestamps remain the same when maven.resources.overwrite is false).