如何阻止 Maven 覆盖资源文件
How to stop Maven from overwriting resource files
我有默认的maven结构:
main
--java
--resources
--webapp
我看到每个 mvn compile
复制资源,即使它们没有改变。
我应该怎么做才能使构建副本仅更改文件?
<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>
这是调试模式下的输出:
[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
在 Maven 命令上使用 属性 -Dmaven.resources.overwrite=false
。请参阅 resources:resources
目标的 overwrite
参数。
但是文档中提到这是默认行为,因此请检查您的项目配置中是否将此参数设置为 true。
编辑:
如评论中所述,似乎即使日志指示正在复制,但实际上文件并没有被更改(当 maven.resources.overwrite
为 false 时,时间戳保持不变)。
注意:
如果 filtering
资源被激活,maven-resources-plugin
将忽略 overwrite
标志。
使用版本 3.2.0
我必须添加以下内容才能使其工作:
<configuration>
<useBuildFilters>false</useBuildFilters>
<overwrite>false</overwrite>
...
</configuration>
另见 maven-resources-plugin docu
可能的背景:
由于默认启用过滤,它可能不知道过滤可能包含的属性是否已更改并因此覆盖(忽略隐式 overwrite:false
.
因此需要禁用过滤,另外对于上面的版本我必须明确地关闭覆盖。 :-/
文件不一致,我会说。
我有默认的maven结构:
main
--java
--resources
--webapp
我看到每个 mvn compile
复制资源,即使它们没有改变。
我应该怎么做才能使构建副本仅更改文件?
<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>
这是调试模式下的输出:
[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
在 Maven 命令上使用 属性 -Dmaven.resources.overwrite=false
。请参阅 resources:resources
目标的 overwrite
参数。
但是文档中提到这是默认行为,因此请检查您的项目配置中是否将此参数设置为 true。
编辑:
如评论中所述,似乎即使日志指示正在复制,但实际上文件并没有被更改(当 maven.resources.overwrite
为 false 时,时间戳保持不变)。
注意:
如果 filtering
资源被激活,maven-resources-plugin
将忽略 overwrite
标志。
使用版本 3.2.0
我必须添加以下内容才能使其工作:
<configuration>
<useBuildFilters>false</useBuildFilters>
<overwrite>false</overwrite>
...
</configuration>
另见 maven-resources-plugin docu
可能的背景:
由于默认启用过滤,它可能不知道过滤可能包含的属性是否已更改并因此覆盖(忽略隐式 overwrite:false
.
因此需要禁用过滤,另外对于上面的版本我必须明确地关闭覆盖。 :-/
文件不一致,我会说。