Skip to content

licenseHeader.content gets the © symbol turned to ?? in CI, but not locally #2266

@tginiotis-at-work

Description

@tginiotis-at-work

When I run the spotless maven plugin check goal locally, it goes through fine. But in CI, specifically Jenkins, I always get errors:

[ERROR] Failed to execute goal com.diffplug.spotless:spotless-maven-plugin:2.43.0:check (default) on project ccc-reuse: The following files had format violations:
[ERROR]     src/test/java/com/uuu/ccc/common/test/util/TransformTest.java
[ERROR]         @@ -2,7 +2,7 @@
[ERROR]          ·*·OCO·Source·Materials
[ERROR]         -·*·©·Copyright·UUU·2008-2024.·All·Rights·Reserved.
[ERROR]         +·*·??·Copyright·UUU·5655.·All·Rights·Reserved.

If I replace the © in licenseHeader.content with © - it behaves the same, just that it turns the symbol into a single ? instead of two.

I understand that this is some environment issue, but looking at it - the maven versions are the same, java versions the same. LANG, LC_ALL, LANGUAGE variables are the same.

Running maven with -X it also shows that it reads the pom like that in CI:

[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal:          com.diffplug.spotless:spotless-maven-plugin:2.43.0:check (default)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <applySkip default-value="false">${spotless.apply.skip}</applySkip>
  <baseDir default-value="${project.basedir}"/>
  <buildDir default-value="${project.build.directory}"/>
  <checkSkip default-value="false">${spotless.check.skip}</checkSkip>
  <encoding default-value="UTF-8">UTF-8</encoding>
  <filePatterns>${spotlessFiles}</filePatterns>
  <goal default-value="${mojoExecution.goal}"/>
  <java>
    <palantirJavaFormat/>
  </java>
  <licenseHeader>
    <content>/*******************************************************************************
 * OCO Source Materials
 * ? Copyright UUU $YEAR. All Rights Reserved.
 *
 * The source code for this program is not published or otherwise
 * divested of its trade secrets, irrespective of what has
 * been deposited with the U.S. Copyright Office.
 *******************************************************************************/</content>
    <delimiter>(/(/|\*{1,2}[^*])|package|import|public|final|abstract|class|enum|interface)</delimiter>
  </licenseHeader>
  <lineEndings default-value="GIT_ATTRIBUTES_FAST_ALLSAME"/>
  <project default-value="${project}"/>
  <repositories default-value="${project.remotePluginRepositories}"/>
  <repositorySystemSession default-value="${repositorySystemSession}"/>
  <setLicenseHeaderYearsFromGitHistory>${spotlessSetLicenseHeaderYearsFromGitHistory}</setLicenseHeaderYearsFromGitHistory>
  <skip default-value="false">${spotless.skip}</skip>
</configuration>

but it shows up properly when run locally. I tried adding the UTF8 BOM to the POM, but it didn't help. Otherwise it is UTF8 encoded.

Maven 3.9.9. Spotless 2.43.0.
CI is running in a Ubuntu 24.04.1 LTS docker container running on a CentOS Stream 8 host.

Does anyone have any ideas what could be the issue here?

Spotless configuration:

			<plugin>
				<groupId>com.diffplug.spotless</groupId>
				<artifactId>spotless-maven-plugin</artifactId>
				<configuration>
					<java>
						<palantirJavaFormat/>
					</java>
					<licenseHeader>
						<content>
/*******************************************************************************
 * OCO Source Materials
 * © Copyright UUU $YEAR. All Rights Reserved.
 *
 * The source code for this program is not published or otherwise
 * divested of its trade secrets, irrespective of what has
 * been deposited with the U.S. Copyright Office.
 *******************************************************************************/
						</content>
						<delimiter>(/(/|\*{1,2}[^*])|package|import|public|final|abstract|class|enum|interface)</delimiter>
					</licenseHeader>
					<encoding>UTF-8</encoding>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>check</goal>
						</goals>
						<phase>compile</phase>
					</execution>
				</executions>
			</plugin>
		</plugins>
  • summary of problem
  • Gradle or Maven version
  • spotless version
  • operating system and version
  • copy-paste your full Spotless configuration block(s), and a link to a public git repo that reproduces the problem if possible
  • copy-paste the full content of any console errors emitted by gradlew spotless[Apply/Check] --stacktrace

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions