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, rand...@kamradtfamily.net 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" <skoru...@cs.uni-saarland.de>
Date: 11/26/13 7:59 am
To: users@maven.apache.org

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: 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