« Return to Thread: Not able to pass multiple arguments to javac

RE: Not able to pass multiple arguments to javac

by Nick Stolwijk :: Rate this Message:

Reply to Author | View in Thread

I've found the problem. Plexus (which runs the compiler and commandline) is quoting each argument. So for this configuration:

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <target>1.6</target>
          <source>1.6</source>
          <compilerArguments>
            <verbose />
            <bootclasspath>${java.home}/lib/rt.jar</bootclasspath>
          </compilerArguments>
          <compilerArgument>-implicit:none -proc:none</compilerArgument>
          <fork>true</fork>
        </configuration>
      </plugin>
    </plugins>
  </build>

mvn clean compile -X gives the following output:

[DEBUG] Command line options:
[DEBUG] -d /home/nick/workspace/buildserver-test-project/trunk/target/classes -classpath /home/nick/workspace/buildserver-test-project/trunk/target/classes: /home/nick/workspace/buildserver-test-project/trunk/src/main/java/nl/iprofs/sandbox/buildservertest/App.java -g -nowarn -target 1.6 -source 1.6 -bootclasspath /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/rt.jar -verbose -implicit:none -proc:none
[INFO] Compiling 1 source file to /home/nick/workspace/buildserver-test-project/trunk/target/classes

While it is actually executing:

/usr/lib/jvm/java-6-sun-1.6.0.00/bin/javac -d /home/nick/workspace/buildserver-test-project/trunk/target/classes -classpath /home/nick/workspace/buildserver-test-project/trunk/target/classes: /home/nick/workspace/buildserver-test-project/trunk/src/main/java/nl/iprofs/sandbox/buildservertest/App.java -g -nowarn -target 1.6 -source 1.6 -bootclasspath /usr/lib/jvm/java-6-sun-1.6.0.00/jre/lib/rt.jar -verbose "-implicit:none -proc:none"

(Much more quotes, but just for the idea) If I execute this myself, javac indeed gives the error as described.

I guess, this should be a feature request for the maven-compiler-plugin, to indeed accept multiple compilerArgument options. Maybe something like this:

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <target>1.6</target>
          <source>1.6</source>
          <compilerArguments>
            <verbose />
            <bootclasspath>${java.home}/lib/rt.jar</bootclasspath>
            <compilerArgument>-implicit:none</compilerArgument>
            <compilerArgument>-prox:none</compilerArgument>
          </compilerArguments>
          <fork>true</fork>
        </configuration>
      </plugin>
    </plugins>
  </build>

Hth,

Nick Stolwijk

-----Original Message-----
From: nicklist@... [mailto:nicklist@...]
Sent: Mon 11/26/2007 5:34 PM
To: Maven Users List
Subject: RE: Not able to pass multiple arguments to javac
 
The fault message you see is actually from javac itself. You're trying to add options that are not supported by javac. All javac options are "supported" by the mojo, it simply passes them to javac.

Why would you want to add options to javac which are not supported by javac?

With regards,

Nick Stolwijk


-----Original Message-----
From: Sanjeeb.Sahoo@... on behalf of Sahoo
Sent: Mon 11/26/2007 5:12 PM
To: Maven Users List
Subject: Re: Not able to pass multiple arguments to javac
 
Yes, I knew that approach, but the options I actually want to pass are
not supported by the mojo. nowarn and verbose were just used as
examples; I want to pass -proc:none and -implicit. They are not
supported by javac. There are many such options which are not supported
by the mojo. I thought compilerArgument is the way to use them. But, it
is *not* working.

Thanks,
Sahoo

Jeff Jensen wrote:

> Try this approach:
>
>         <configuration>
>           <fork>true</fork>
>           <maxmem>1024m</maxmem>
>           <showDeprecation>true</showDeprecation>
>           <showWarnings>true</showWarnings>
>           ....etc...
>         </configuration>
>
> To know element names to use, use the Name found in the Optional Parameters
> section of this page:
>   http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html
>
>
>  
>> -----Original Message-----
>> From: Sanjeeb.Sahoo@... [mailto:Sanjeeb.Sahoo@...] On Behalf Of
>>    
> Sahoo
>  
>> Sent: Monday, November 26, 2007 8:25 AM
>> To: Maven Users List
>> Subject: Re: Not able to pass multiple arguments to javac
>>
>> Ignore my earlier email. The suggestion actually does *not* work. When I
>> run with -X option, it shows only the last compilerArgument. See the
>> following output:
>>
>> [DEBUG] Configuring mojo
>> 'org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile' -->
>> [DEBUG]   (f) basedir = /tmp/my-app
>> [DEBUG]   (f) buildDirectory = /tmp/my-app/target
>> [DEBUG]   (f) classpathElements = [/tmp/my-app/target/classes]
>> [DEBUG]   (f) compileSourceRoots = [/tmp/my-app/src/main/java]
>> [DEBUG]   (f) compilerArgument = -verbose
>> [DEBUG]   (f) compilerId = javac
>> [DEBUG]   (f) debug = true
>> [DEBUG]   (f) failOnError = true
>> [DEBUG]   (f) fork = false
>> [DEBUG]   (f) optimize = false
>> [DEBUG]   (f) outputDirectory = /tmp/my-app/target/classes
>> [DEBUG]   (f) outputFileName = my-app-1.0-SNAPSHOT
>> [DEBUG]   (f) projectArtifact = com.mycompany.app:my-app:jar:1.0-SNAPSHOT
>> [DEBUG]   (f) showDeprecation = false
>> [DEBUG]   (f) showWarnings = false
>> [DEBUG]   (f) staleMillis = 0
>> [DEBUG]   (f) verbose = false
>> [DEBUG] -- end configuration --
>>
>> Thanks,
>> Sahoo
>>
>> Sahoo wrote:
>>    
>>> Thanks, that works.
>>>
>>> Sahoo
>>>
>>> Wayne Fay wrote:
>>>      
>>>> Try this, Sahoo:
>>>>
>>>> <plugin>
>>>>    <groupId>org.apache.maven.plugins</groupId>
>>>>    <artifactId>maven-compiler-plugin</artifactId>
>>>>    <configuration>
>>>>        <compilerArgument>-nowarn</compilerArgument>
>>>>        <compilerArgument>-verbose</compilerArgument>
>>>>    </configuration>
>>>> </plugin>
>>>>
>>>> On 11/22/07, Sahoo <Sahoo@...> wrote:
>>>>
>>>>        
>>>>> As suggested in [1], I tried configuring maven-compiler-plugin like
>>>>> this:
>>>>>
>>>>>          <compilerArgument>-nowarn -verbose</compilerArgument>
>>>>>
>>>>> But it causes compilation failure. Details given below:
>>>>>
>>>>> Failure executing javac, but could not parse the error:
>>>>> javac: invalid flag: -nowarn -verbose
>>>>>
>>>>> How can I pass multiple arguments to javac?
>>>>>
>>>>> Thanks,
>>>>> Sahoo
>>>>> [1]
>>>>> http://maven.apache.org/plugins/maven-compiler-plugin/examples/pass-
>>>>>          
>> compiler-arguments.html
>>    
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscribe@...
>>>>> For additional commands, e-mail: users-help@...
>>>>>
>>>>>
>>>>>
>>>>>          
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscribe@...
>>>> For additional commands, e-mail: users-help@...
>>>>
>>>>
>>>>        
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@...
>>> For additional commands, e-mail: users-help@...
>>>
>>>      
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@...
>> For additional commands, e-mail: users-help@...
>>
>>    
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@...
> For additional commands, e-mail: users-help@...
>
>  

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@...
For additional commands, e-mail: users-help@...



 « Return to Thread: Not able to pass multiple arguments to javac