You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Ulli Hafner (JIRA)" <ji...@codehaus.org> on 2013/02/11 16:34:13 UTC

[jira] (MCOMPILER-123) No way to set compiler arguments/options for Eclipse compiler

    [ https://jira.codehaus.org/browse/MCOMPILER-123?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=319157#comment-319157 ] 

Ulli Hafner edited comment on MCOMPILER-123 at 2/11/13 9:33 AM:
----------------------------------------------------------------

I'm using the following snippet (which works quite well). It reuses the configuration of the Eclipse settings folder: so your warnings in the build will be the same as in Eclipse. 

{code}
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.0</version>
        <configuration>
          <compilerId>eclipse</compilerId>
          <source>1.6</source>
          <target>1.6</target>
          <detail>true</detail>
          <debug>true</debug>
          <fork>true</fork>
          <compilerArguments>
            <properties>.settings/org.eclipse.jdt.core.prefs</properties>
          </compilerArguments>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-eclipse</artifactId>
            <version>2.1</version>
          </dependency>
        </dependencies>
      </plugin>
{code}
                
      was (Author: ulli):
    I'm using the following snippet (which works quite fine). It reuses the configuration of the Eclipse settings folder: so your warnings in the build will be the same as in Eclipse. 

{code}
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.0</version>
        <configuration>
          <compilerId>eclipse</compilerId>
          <source>1.6</source>
          <target>1.6</target>
          <detail>true</detail>
          <debug>true</debug>
          <fork>true</fork>
          <compilerArguments>
            <properties>.settings/org.eclipse.jdt.core.prefs</properties>
          </compilerArguments>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-eclipse</artifactId>
            <version>2.1</version>
          </dependency>
        </dependencies>
      </plugin>
{code}
                  
> No way to set compiler arguments/options for Eclipse compiler
> -------------------------------------------------------------
>
>                 Key: MCOMPILER-123
>                 URL: https://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, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira