No way to set compiler arguments/options for Eclipse compiler
-------------------------------------------------------------

                 Key: MCOMPILER-123
                 URL: http://jira.codehaus.org/browse/MCOMPILER-123
             Project: Maven 2.x Compiler Plugin
          Issue Type: Bug
    Affects Versions: 2.2
            Reporter: Lóránt Pintér


I have a problem with setting compiler options for the Eclipse compiler. I 
tried to do the following:

{code:xml}
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <compilerId>eclipse</compilerId>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>utf-8</encoding>
        <compilerArguments>
            
<org.eclipse.jdt.core.compiler.problem.missingSerialVersion>ignore</org.eclipse.jdt.core.compiler.problem.missingSerialVersion>
        </compilerArguments>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-eclipse</artifactId>
            <version>1.8</version>
        </dependency>
    </dependencies>
</plugin>
{code}

It should be okay, as this is in EclipseJavaCompiler:

{code:java}
// compiler-specific extra options override anything else in the config 
object...
Map extras = config.getCustomCompilerArguments();
if ( extras != null && !extras.isEmpty() )
{
    settings.putAll( extras );
}

// ...

// ----------------------------------------------------------------------
// Compile!
// ----------------------------------------------------------------------

CompilerOptions options = new CompilerOptions( settings );
Compiler compiler = new Compiler( env, policy, options, requestor, 
problemFactory );
{code}

But the problem is that all keys in the map are prefixed with "-" in 
AbstractCompilerMojo:

{code:java}
Map<String, String> effectiveCompilerArguments = getCompilerArguments();

String effectiveCompilerArgument = getCompilerArgument();

if ( ( effectiveCompilerArguments != null ) || ( effectiveCompilerArgument != 
null ) )
{
    LinkedHashMap<String, String> cplrArgsCopy = new LinkedHashMap<String, 
String>();
    if ( effectiveCompilerArguments != null )
    {
        for ( Map.Entry<String, String> me : 
effectiveCompilerArguments.entrySet() )
        {
            String key = (String) me.getKey();
            String value = (String) me.getValue();
            if ( !key.startsWith( "-" ) )
            {
                key = "-" + key;
            }
            cplrArgsCopy.put( key, value );
        }
    }
    if ( !StringUtils.isEmpty( effectiveCompilerArgument ) )
    {
        cplrArgsCopy.put( effectiveCompilerArgument, null );
    }
    compilerConfiguration.setCustomCompilerArguments( cplrArgsCopy );
}
{code}

So what actually gets into the Map for CompilerOptions is this:

{code}
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion = ignore
{code}

Instead of:

{code}
org.eclipse.jdt.core.compiler.problem.missingSerialVersion = ignore
{code}

The incorrect setting name is then silently discarded by ECJ.

I cannot use this either:

{code:xml}
<configuration>
    <compilerId>eclipse</compilerId>
    <source>1.6</source>
    <target>1.6</target>
    <encoding>utf-8</encoding>
    <compilerArgument>-warn:-serial</compilerArgument>
</configuration>
{code}

...because "-warn:-serial" is not passed as a command-line argument, but it is 
also added to the Map for CompilerOptions:

{code:java}
if ( !StringUtils.isEmpty( effectiveCompilerArgument ) )
{
    cplrArgsCopy.put( effectiveCompilerArgument, null );
}
compilerConfiguration.setCustomCompilerArguments( cplrArgsCopy );
{code}

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira


Reply via email to