Hello,

I thought the version is defined in
https://git-wip-us.apache.org/repos/asf?p=maven.git;a=blob;f=maven-core/src/main/resources/META-INF/plexus/default-bindings.xml;h=09ecba441e61d4a997b01af0171815c558548537;hb=maven-3.0.4
(replace hb with the version of your choice :-)).
Regards Mirko
--
http://illegalstateexception.blogspot.com/
https://github.com/mfriedenhagen/ (http://osrc.dfm.io/mfriedenhagen)
https://bitbucket.org/mfriedenhagen/


On Wed, Nov 27, 2013 at 11:32 AM, Stephen Connolly
<stephen.alan.conno...@gmail.com> wrote:
> On 27 November 2013 10:18, Malte Skoruppa <skoru...@cs.uni-saarland.de>wrote:
>
>> Hi all,
>>
>> thank you for your helpful answers. I grasped a lot about how Maven
>> internally works and learned some tricks (e.g., dependency:analyze). This
>> is a great mailing list indeed.
>>
>> @Laird: that is quite interesting. From all the other posts I really
>> gained the impression that my original question was actually unsolvable
>> (e.g., Stephen explicitly stated the goals are "incompatible").
>>
>> But this also led me to a new question.
>>
>> Always eager to learn, I tried - just to see what would happen -
>> specifying in my POM at the same time <maven.compiler.{source,target}> in
>> the <properties> section, *as well as* specifying <{source,target}> in the
>> <configuration> section of the maven-compiler-plugin. It turns out that the
>> latter takes precedence over the former (i.e., when different Java versions
>> are specified in these two places, the <configuration> of the
>> maven-compiler-plugin is used).
>>
>> Therefore, from my understanding up to this point, I suspected that there
>> must be something in the "uber"-pom akin to this:
>>
>>
>> <plugin>
>>     <groupId>org.apache.maven.plugins</groupId>
>>     <artifactId>maven-compiler-plugin</artifactId>
>>     <version>SOME_DEFAULT_VERSION</version>
>>     <configuration>
>>       <source>${maven.compiler.source}</source>
>>       <target>${maven.compiler.target}</target>
>>     </configuration>
>> </plugin>
>>
>
> actually what is the case is that these parameters have an annotation like
>
> @Parameter(property="maven.compiler.source",defaultValue="1.5")
> private String source;
>
> So what happens is that if you don't specify a value in the <configuration>
> section then Maven checks to see if the property is defined, if not then it
> uses the default value
>
> Once you specify a value in the <configuration> section that is taken as
> gold.
>
> Hence why I said it was incompatible, as the property trick is just that, a
> trick, and it will fall over under stress... none the less it is a handy
> trick to have... as long as you are aware that it is a trick.
>
>
>>
>> where the maven.compiler.{source,target} would be specified in the
>> <properties> section of the "uber"-pom. That would have explained both why
>> Maven complains when I reconfigure the maven-compiler-plugin without
>> specifying the plugin version, as well as why redefining
>> maven.compiler.{source,target} in the <properties> section of my own pom is
>> a working solution for my original question.
>>
>> So I finally decided to take a look at this "uber"-pom :)
>>
>> I was suprised to find there is *no mention* of the maven-compiler-plugin
>> *at all* in this super-pom, that is,
>>
>> $ export M2_HOME=/usr/share/maven
>> $ unzip -p $M2_HOME/lib/maven-model-builder-3.0.4.jar
>> org/apache/maven/model/pom-4.0.0.xml | grep compiler
>> $
>>
>> ...the latter command produces no output (I'm using Maven 3.0.4, as can be
>> seen from the path).
>> (Alternatively, one might search for "compiler" at
>> http://maven.apache.org/ref/3.0.4/maven-model-builder/super-pom.html, but
>> I wanted to make sure that indeed the same uber-pom is used on my machine).
>>
>> This is quite confusing. I firmly expected to see some kind of
>> configuration of the maven-compiler-plugin in the uber-pom. That is what
>> many of you led me to believe:
>>
>> Stephen:
>>
>>  the "core" plugins all have a version specified in the über-pom that is
>>> embedded within Maven.
>>>
>>
> Hmmm.. it seems I missed http://jira.codehaus.org/browse/MNG-4453 with the
> transition to Maven 3.x... and as I lock plugin versions down anyways...
>
>
>>
>> Randal:
>>
>>  As was pointed out, core components such as the compiler plugin have a
>>> stable default version via the 'uber-pom' as of a particular version of
>>> Maven
>>>
>>
>> Mark:
>>
>>  generated POMs *do* specify the version of
>>> m-compiler-p, by *not* specifying it.  There's a built-in set of
>>> defaults(1) buried inside Maven, which specify much of the
>>> not-otherwise-specified.
>>>
>>
>> So... where is this stable maven-compiler-plugin version specified,
>> precisely?
>> I did find some mentions of a stable maven-compiler-plugin version in
>> $M2_HOME/lib/maven-core-3.0.4.jar:META-INF/plexus/components.xml as well
>> as $M2_HOME/lib/maven-core-3.0.4.jar:META-INF/plexus/artifact-handlers.xml,
>> but I'm not sure whether that's the actual place where the "default
>> version" of the maven-compiler-plugin is configured, and certainly none of
>> them is the uber-pom.
>>
>> I'd just like to see it; I like to understand how stuff works ;-)
>>
>> Thanks,
>>
>> Malte
>>
>>
>>
>> On 11/26/2013 04:26 PM, Stephen Connolly wrote:
>>
>>> On 26 November 2013 14:59, Malte Skoruppa <skoru...@cs.uni-saarland.de>
>>> wrote:
>>>
>>>
>>>  Hi,
>>>>
>>>> I'm new to Maven and I'm currently going through the "Getting Started"
>>>> guide.
>>>>
>>>> While reading, the following question came to me.
>>>> As far as I understand, Maven defaults to compiling all Java source files
>>>> with compatibility for JDK 1.3 (i.e., -source 1.3).
>>>>
>>>>  Well actually with newer versions of the compiler plugin the default has
>>> been upped to 1.5
>>>
>>>
>>>  The guide explains how to change that behaviour, by configuring the
>>>> maven-compiler-plugin in the pom.xml:
>>>> http://maven.apache.org/guides/getting-started/index.
>>>> html#How_do_I_use_plug-ins
>>>>
>>>> So far so good. However, if I do this, it appears that I also have to
>>>> specify the version of maven-compiler-plugin to be used (e.g., 2.5.1 in
>>>> the
>>>> code snippet shown under the above link).
>>>>
>>>> Generally, I don't want to do that. On the one hand, I would like for
>>>> Maven to simply use the latest version of the maven-compiler-plugin that
>>>> is
>>>> available (the default behaviour).
>>>>
>>>
>>> Not the default behaviour any more.... at least since 2.0.9 IIRC... the
>>> "core" plugins all have a version specified in the über-pom that is
>>> embedded within Maven. Thus if you do not specify a version, you get the
>>> version specified in the über-pom... for non-core plugins you will get the
>>> latest, but your build is now irreproducible. Best practice is to specify
>>> the version for all plugins.
>>>
>>>
>>>  On the other hand, I would like to use Java features above 1.3 (for
>>>> instance, generics).
>>>>
>>>> So my first attempt was to simply remove the "<version>2.5.1</version>"
>>>> part from the pom.xml under the maven-compiler-plugin configuration.
>>>> While
>>>> this did in principle work, Maven was not happy at all and complained
>>>> with
>>>> this message:
>>>>
>>>> [WARNING] Some problems were encountered while building the effective
>>>> model for com.mycompany.app:my-app:jar:1.0-SNAPSHOT
>>>> [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:
>>>> maven-compiler-plugin
>>>> is missing. @ line 19, column 15
>>>> [WARNING]
>>>> [WARNING] It is highly recommended to fix these problems because they
>>>> threaten the stability of your build.
>>>> [WARNING]
>>>> [WARNING] For this reason, future Maven versions might no longer support
>>>> building such malformed projects.
>>>>
>>>> So my question boils down to this: is there some way for me to achieve
>>>> the
>>>>
>>>> following three things at the same time:
>>>> (1) have Maven compile my source files with -source 1.4 (or anything
>>>> higher than 1.3)
>>>> (2) *not* specify the maven-compiler-plugin version to use; instead, have
>>>> Maven dynamically use the latest one available;
>>>> (3) *not* have Maven bitch about my project being "malformed" ;-)
>>>>
>>>> I would imagine that this is not such a rare scenario:
>>>> (1) I do want to use Java features higher than those available in Java
>>>> 1.3;
>>>>
>>>>  Then set source and target to 1.3... and hope you never upgrade to Java
>>> 8
>>>
>>>
>>>  (2) I do *not* want having to monitor the maven-compiler-plugin by myself
>>>> all the time in order to check for updates and keep my pom.xml referring
>>>> to
>>>> the currently latest version;
>>>>
>>>>  Incompatible goal. If you have a version of the compiler plugin that is
>>> working. Leave it as is. If it isn't broken, don't fix it. If you decide
>>> that it is broken (e.g. you think the version you have is not compiling
>>> fast enough) then try upgrading... this way you have control over your
>>> build
>>>
>>>
>>>  (3) yet I do *not* want Maven complaining about my project.xml being
>>>> malformed either.
>>>>
>>>>  Specify the version, or live with Maven complaining.
>>>
>>> The Maven way is to make doing "the right thing" easy... doing the "not so
>>> right thing" should encounter some friction... but unless we have good
>>> reason we should not prevent you from shooting your foot off... we can
>>> make
>>> it difficult to aim the gun at your foot though!
>>>
>>>  So what's the "clean" way to do this? :-)
>>>>
>>>> For clarity, I have written down the steps to reproduce my problem in the
>>>> Appendix, below.
>>>>
>>>> Thanks,
>>>>
>>>> Malte
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> APPENDIX: Steps to reproduce:
>>>>
>>>> 1. Generate a simple Maven project using the very command stated on
>>>> http://maven.apache.org/guides/getting-started/index.
>>>> html#How_do_I_make_my_first_Maven_project :
>>>>
>>>> mvn archetype:generate \
>>>>    -DarchetypeGroupId=org.apache.maven.archetypes \
>>>>    -DgroupId=com.mycompany.app \
>>>>    -DartifactId=my-app
>>>>
>>>> 2. Replace the generated  src/main/java/com/mycompany/app/App.java with
>>>> something that uses generics (not available in Java 1.3), e.g.:
>>>>
>>>> package com.mycompany.app;
>>>> import java.util.*;
>>>>
>>>> /**
>>>>   * Hello world!
>>>>   *
>>>>   */
>>>> public class App {
>>>>
>>>>      public static void main( String[] args) {
>>>>
>>>>          List<String> myList = new ArrayList<String>();
>>>>          myList.add( "Hello");
>>>>          myList.add( "world");
>>>>
>>>>          for( Iterator<String> i = myList.iterator(); i.hasNext();)
>>>>              System.out.println( i.next());
>>>>      }
>>>> }
>>>>
>>>> 3. Try to compile using the command 'mvn compile'. Maven fails:
>>>>
>>>> $ mvn compile
>>>> [INFO] Scanning for projects...
>>>> ...
>>>> [INFO] ------------------------------------------------------------
>>>> ------------
>>>> [INFO] BUILD FAILURE
>>>> [INFO] ------------------------------------------------------------
>>>> ------------
>>>> [INFO] Total time: 0.995s
>>>> [INFO] Finished at: Tue Nov 26 15:26:00 CET 2013
>>>> [INFO] Final Memory: 6M/117M
>>>> [INFO] ------------------------------------------------------------
>>>> ------------
>>>> [ERROR] Failed to execute goal org.apache.maven.plugins:
>>>> maven-compiler-plugin:2.0.2:compile (default-compile) on project my-app:
>>>> Compilation failure
>>>> [ERROR] /home/malte/dev/java/testMaven/my-app/src/main/
>>>> java/com/mycompany/app/App.java:[13,5] error: generics are not supported
>>>> in -source 1.3
>>>> ...
>>>>
>>>> 4. Ok, so let's add the following to our pom.xml. This is copied&pasted
>>>> from http://maven.apache.org/guides/getting-started/index.
>>>> html#How_do_I_use_plug-ins :
>>>>
>>>> <build>
>>>>    <plugins>
>>>>      <plugin>
>>>>        <groupId>org.apache.maven.plugins</groupId>
>>>>        <artifactId>maven-compiler-plugin</artifactId>
>>>>        <version>2.5.1</version>
>>>>        <configuration>
>>>>          <source>1.5</source>
>>>>          <target>1.5</target>
>>>>        </configuration>
>>>>      </plugin>
>>>>    </plugins>
>>>> </build>
>>>>
>>>> Running 'mvn compile' again, everything works fine now.
>>>>
>>>> 5. Yet, I would like to avoid having to specify the version of
>>>> maven-compiler-plugin to be used. I simply want Maven to use the latest
>>>> one
>>>> available. So, let's remove the line
>>>>
>>>>        <version>2.5.1</version>
>>>>
>>>> from the pom.xml again.
>>>>
>>>> Running 'mvn compile' again, this works too, but Maven complains:
>>>>
>>>> $ mvn compile
>>>> [INFO] Scanning for projects...
>>>> [WARNING]
>>>> [WARNING] Some problems were encountered while building the effective
>>>> model for com.mycompany.app:my-app:jar:1.0-SNAPSHOT
>>>> [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:
>>>> maven-compiler-plugin
>>>> is missing. @ line 19, column 15
>>>> [WARNING]
>>>> [WARNING] It is highly recommended to fix these problems because they
>>>> threaten the stability of your build.
>>>> [WARNING]
>>>> [WARNING] For this reason, future Maven versions might no longer support
>>>> building such malformed projects.
>>>> [WARNING]
>>>> ...
>>>> [INFO] ------------------------------------------------------------
>>>> ------------
>>>> [INFO] BUILD SUCCESS
>>>> [INFO] ------------------------------------------------------------
>>>> ------------
>>>> [INFO] Total time: 0.877s
>>>> [INFO] Finished at: Tue Nov 26 15:37:17 CET 2013
>>>> [INFO] Final Memory: 5M/117M
>>>> [INFO] ------------------------------------------------------------
>>>> ------------
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
>>>> For additional commands, e-mail: users-h...@maven.apache.org
>>>>
>>>>
>>>>
>>
>>
>> On 11/27/2013 01:47 AM, Laird Nelson wrote:
>>
>>> On Tuesday, November 26, 2013, Malte Skoruppa wrote:
>>>
>>>> is there some way for me to achieve the following three things at the
>>>> same
>>>> time:
>>>> (1) have Maven compile my source files with -source 1.4 (or anything
>>>> higher than 1.3)
>>>> (2) *not* specify the maven-compiler-plugin version to use; instead, have
>>>> Maven dynamically use the latest one available;
>>>> (3) *not* have Maven bitch about my project being "malformed" ;-)
>>>>
>>>
>>> Yes.  In your pom.xml's <properties> section add this:
>>>
>>> <maven.compiler.source>1.6</maven.compiler.source>
>>> <maven.compiler.target>1.6</maven.compiler.target>
>>>
>>> No other configuration or verbiage needed.
>>>
>>> All of the other posters' words are good. But no one answered your
>>> question.
>>>
>>> Best,
>>> Laird
>>>
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> 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