OK, I got things working with

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.build.resourceEncoding>UTF-8</project.build.resourceEncoding>
<maven.compile.encoding>UTF-8</maven.compile.encoding>
</properties>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<!-- <fork>true</fork> -->
<executable>P:\ValueInPrint\Main\jdk\jdk1.5.0_11\bin\javac</executable>
</configuration>
</plugin>

I could not figure out how to get it to work with the <fork>true</fork> setting, even after setting MAVEN_OPTS=-Dfile.encoding=utf-8

I removed

<plugin> -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<junitArtifactName>junit:junit</junitArtifactName>
<encoding>UTF-8</encoding>
<inputEncoding>UTF-8</inputEncoding>
<outputEncoding>UTF-8</outputEncoding>
<argLine>-Xms256m -Xmx512m -XX:MaxPermSize=128m -ea -Dfile.encoding=UTF-8</argLine>
</configuration>
</plugin>

and things still seem to work correctly, but I should probably leave it in anyway to be sure in the future.

To summarize, this whole problem was caused by the compiler not compiling the literal "λ" correctly so my original code

if (!lambda.equals("λ"))

was failing - javac was substituting some other string literal - I did not figure this out until stepping through the code with the debugger. Somehow in the Eclipse and JUnit environment it was working correctly sometimes and not others, but always failing from the command line, so I assumed it was surefire. I do not think there was any problem with surefire, as using the default settings seems to work.

In short my code and unit test were doing exactly what they were supposed to do to make sure UTF-8 was being handled properly, in particular my unit test caught the compiler doing the wrong thing in certain situations - it was just hard for me to believe the compiler was compiling the wrong code and easier to assume it was surefire or something.

Maybe in the 22nd century we will not have so many problems with UTF-8 :-)

Thanks everyone for your help and insight.

Cheers, Eric

On 2011-10-10 6:40 PM, Benson Margulies wrote:
Eric,

A couple of points:

1: Javac has an option to control the input encoding of java source
files. There's a corresponding configuration option for the
maven-compiler-plugin.

2: Adding -Dfile.encoding=utf-8 to MAVEN_OPTS will cause maven, and
any other piece of java it launches, to use UTF-8 as the default
encoding. If surefire is forking you'll have to add this to the
systemPropertyValues.


2011/10/10 Eric Kolotyluk<eric.koloty...@gmail.com>:
<forkMode>once</forkMode>

Doesn't help.

I have some new insight on the problem. I changed my code to

            if (lambda.length() == 1)
            {
                char λ = lambda.charAt(0);
                if (λ != 'λ')
                //if (!lambda.equals("λ"))
                {
                    // UTF-8 sanity check failed!
                    println(System.err, "lambda = '" + lambda + "'");
                    String message = "UTF-8 encoding problem for " +
propertiesResource;
                    println(System.err, message);
                    throw new PropertiesError(message);
                }
            }

This code works when built in Eclipse, but fails to compile from the command
line with

[INFO] Compiling 30 source files to
P:\Intersystem\main\platform.Java\intersystem-common\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR]
/Intersystem/main/platform.Java/intersystem-common/src/main/java/com/kodak/intersystem/common/Properties.java:[354,38]
illegal character: \187
[ERROR]
/Intersystem/main/platform.Java/intersystem-common/src/main/java/com/kodak/intersystem/common/Properties.java:[355,37]
illegal character: \187
[ERROR]
/Intersystem/main/platform.Java/intersystem-common/src/main/java/com/kodak/intersystem/common/Properties.java:[355,42]
unclosed character literal
[ERROR]
/Intersystem/main/platform.Java/intersystem-common/src/main/java/com/kodak/intersystem/common/Properties.java:[355,44]
illegal character: \187
[ERROR]
/Intersystem/main/platform.Java/intersystem-common/src/main/java/com/kodak/intersystem/common/Properties.java:[355,45]
unclosed character literal
[ERROR]
/Intersystem/main/platform.Java/intersystem-common/src/main/java/com/kodak/intersystem/common/Properties.java:[364,24]
illegal start of expression
[INFO] 6 errors
[INFO] -------------------------------------------------------------
[INFO]
------------------------------------------------------------------------
[INFO] BUILD FAILURE

I can't figure out why the compiler is failing because I can clearly see

[DEBUG]   (f) encoding = UTF-8

in the Maven output just before the errors.

Anyone have any ideas? Is there some other compiler option I am missing?

Cheers, Eric

On 2011-10-10 5:23 PM, Kalle Korhonen wrote:
Different forkMode perhaps?

http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#forkMode,
e.g:
<forkMode>once</forkMode>

Just send the whole keg while you are at it :)

Kalle


2011/10/10 Eric Kolotyluk<eric.koloty...@gmail.com>:
Actually - that helped - but it's not a stable solution. For some reason
the
tests pass when run from m2e, but fail when run from the command line.
I'm
still trying to figure out what the difference is.

Cheers, Eric

On 2011-10-10 4:41 PM, Kalle Korhonen wrote:
A whole case? I *love* inflation.

Kalle


2011/10/10 Eric Kolotyluk<eric.koloty...@gmail.com>:
Awesome Kalle - thanks.

Where should I send the case of beer?

Cheers, Eric

On 2011-10-10 4:00 PM, Kalle Korhonen wrote:
How are you reading in your properties files? By default, latin-1 is
assumed. Configure your surefire JVM to read files as UTF-8 with:
<argLine>-Xms256m -Xmx512m -XX:MaxPermSize=128m -ea
-Dfile.encoding=UTF-8</argLine>

Kalle


On Mon, Oct 10, 2011 at 3:04 PM, Eric Kolotyluk
<eric.koloty...@gmail.com>        wrote:
I am having trouble understanding a mystery.

I have code that checks my .properties file to make sure that it has
not
been corrupted after being edited by a non UTF-8 editor. In
particular
I
have a property called lambda = λ and I check to see that it actually
does
resolve to the correct character.

If I run my code from main (my manual unit test) it works. If I run
my
test
from JUnit in Eclipse, it works. But when the same test runs under
Maven
it
fails because lambda = ?

When I look in the actual properties file that the test runs with,
lambda
=
λ, but somehow when the code runs it gets lambda = ?.

I thought this was maybe a surefire configuration problems so I am
using

<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<junitArtifactName>junit:junit</junitArtifactName>
<encoding>UTF-8</encoding>
<inputEncoding>UTF-8</inputEncoding>
<outputEncoding>UTF-8</outputEncoding>
<argLine>-Xms256m -Xmx512m -XX:MaxPermSize=128m -ea</argLine>
</configuration>
</plugin>
</plugins>
</pluginManagement>

but this makes no difference. Does anyone have any idea why my JUnit
test
fails running under surefire, but not running under Eclipse?

Cheers, Eric

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

Reply via email to