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