Why does Maven warn me about encoding?

JavaMavenMaven Archetype

Java Problem Overview


My goal is to create an archetype from a project.

When I run a goal that does not involve the maven-archetype-plugin, I can't see any warning:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-archetype-base ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-archetype-base ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]

On the other end, when I run archetype:create-from-project, I get a couple:

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-archetype-base-archetype ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 10 resources
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-archetype-base-archetype ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources

I know that the "standard" maven way is to use the project.build.sourceEncoding property. I tried adding some more properties to the pom in order to address this issue but none of them worked.

Any ideas? Thanks.

I have the following pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.group.id</groupId>
<artifactId>my-artifact</artifactId>
<version>0.0.1</version>
<packaging>maven-archetype</packaging>

<properties>

	<!-- Compiler properties -->
	<maven.compiler.target>1.7</maven.compiler.target>
	<maven.compiler.source>1.7</maven.compiler.source>
	<encoding>UTF-8</encoding>
	<project.build.sourceEncoding>${encoding}</project.build.sourceEncoding>
	<project.reporting.outputEncoding>${encoding}</project.reporting.outputEncoding>
	<project.resources.sourceEncoding>${encoding}</project.resources.sourceEncoding>
	<archetype.encoding>${encoding}</archetype.encoding>

	<!-- Maven plugins version -->
	<maven-archetype-plugin-version>2.2</maven-archetype-plugin-version>
	<maven-resources-plugin-version>2.6</maven-resources-plugin-version>
	
	<!-- Maven extentions version -->
	<maven-archetype-packaging-extension-version>2.2</maven-archetype-packaging-extension-version>
</properties>
<dependencies>
[...]
</dependencies>

<build>
	<extensions>
		<extension>
			<groupId>org.apache.maven.archetype</groupId>
			<artifactId>archetype-packaging</artifactId>
			<version>${maven-archetype-packaging-extension-version}</version>
		</extension>
	</extensions>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-resources-plugin</artifactId>
			<version>${maven-resources-plugin-version}</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-archetype-plugin</artifactId>
			<version>${maven-archetype-plugin-version}</version>
			<extensions>true</extensions>
		</plugin>
		
	</plugins>

	<resources>
		<resource>
			<directory>src/main/resources</directory>
			<filtering>true</filtering>
		</resource>
	</resources>
</build>

Java Solutions


Solution 1 - Java

You haven't set the encoding default property like this:

<project>
  ...
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  ...
</project>

This approach is better than defining encoding manually for every plugin, cause all plugins having default values for encoding for example the maven-resources-plugin:

encoding:

The character encoding scheme to be applied when filtering resources.
Type: java.lang.String
Required: No
User Property: encoding
Default: ${project.build.sourceEncoding}

So this means you only need to define this property and the plugin will automatically use this encoding.

Solution 2 - Java

I was annoyed to see that maven kept on complaining after the above entry

Then I realized that its the failsafe plugin and it needs its own property

So here it goes

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

Solution 3 - Java

When you run the goal archetype:create-from-project, Maven generates a POM file for building the archetype at target/generated-sources/archetype/pom.xml and then runs the package goal (by default) on this POM.

The generated POM file doesn't have project.build.sourceEncoding or any other property defining encoding, and that's why you get the warning.

The POM is generated from this prototype by org.apache.maven.archetype.creator.FilesetArchetypeCreator#createArchetypeProjectPom, and from that code there doesn't seem to be a way to add properties to the resulting POM file.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMarco FerrariView Question on Stackoverflow
Solution 1 - JavakhmarbaiseView Answer on Stackoverflow
Solution 2 - JavaKalpesh SoniView Answer on Stackoverflow
Solution 3 - JavaizstasView Answer on Stackoverflow