Think of it not as 'if I configure one thing, I must configure another thing', 
but more as 'if I configure one thing, I must provide complete information 
about the thing I configure'.  Complete information being information that does 
not has a stable default.  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, since core components are used whether you specify 
them in your pom or not because they are tied to a particular life-cycle phase 
by default.
 
In today's highly componentized world, keeping track of versions, be they for 
plugins or code libraries, becomes one of the most complex problems developers 
face.  IDEs like NetBeans can help via a pom editor by 'suggesting' versions.  
But ultimately, it is up to us as developers to favor precision over simplicity 
when the two come into conflict (unless your boss dictates that you keep it 
simple because 'we need to deliver tomorrow')
 
--------- Original Message --------- Subject: Re: Changing JDK version without 
specifying maven-compiler-plugin version
From: "Malte Skoruppa" <[email protected]>
Date: 11/26/13 9:05 am
To: "Maven Users List" <[email protected]>

Hey Randy,
 
 Ok... you convinced me about that: specifying a plugin version number is 
 generally a good idea. :)
 
 I am not so intent on having the 'latest-and-greatest' plugin as you 
 might think. It's more that I would like to stick to the default 
 configuration unless I have good reason not to do so. It's really just 
 that I find it kind of weird that if I want to deviate from one default 
 (the Java version), I also *have* to deviate from another (the plugin 
 version).
 
 But I guess I can live with it. One might also argue that those two 
 defaults (Java version and plugin version) are somehow linked, so if I 
 want to change one I should specify the other. E.g., not all plugin 
 versions might support Java 1.7.
 
 Thank you for your competent answer!
 
 Malte
 
 
 
 On 11/26/2013 04:36 PM, [email protected] wrote:
 > Specifying a plugin version number is generally a good idea as the 
 > 'latest-and-greatest' may break your build at an unexpected time (usually 
 > the day before you need to deliver a product) or worse build differently 
 > such that the product breaks. While due diligence is done to ensure that 
 > only compatible changes are done to plugins, there are no guarantees that 
 > your particular setup is not impacted. Add to that that a particular plugin 
 > version may be linked to a particular version of Maven, so 
 > latest-and-greatest becomes a set of versions depending on what version of 
 > Maven you are using. Perhaps the compiler plugin is a bad example as it's 
 > relatively straight forward and probably somewhat immune from breaking 
 > changes, but this is a behavior that works for all plugins.
 > 
 > I would question your need to use the 'latest-and-greatest' of a plugin. If 
 > a plugin works and produces a working artifact, changing it to a newer 
 > version should be a conscious decision and not a surprise, anymore than 
 > changing versions of Maven should be done automatically. You can mitigate 
 > the amount of work needed to change a plugin version by using a parent pom 
 > that sets the version, and then all child poms will work with that version.
 > 
 > Remember, Infants are the only people that appreciate a change ;)
 > 
 > FWIW,
 > Randal Kamradt
 > 
 > 
 > 
 > --------- Original Message --------- Subject: Changing JDK version without 
 > specifying maven-compiler-plugin version
 > From: "Malte Skoruppa" <[email protected]>
 > Date: 11/26/13 7:59 am
 > To: [email protected]
 >
 > 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).
 > 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). 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;
 > (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;
 > (3) yet I do *not* want Maven complaining about my project.xml being
 > malformed either.
 > 
 > 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: [email protected]
 > For additional commands, e-mail: [email protected]
 >
 
 
 ---------------------------------------------------------------------
 To unsubscribe, e-mail: [email protected]
 For additional commands, e-mail: [email protected]

Reply via email to