On 26 November 2013 14:59, Malte Skoruppa <[email protected]>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: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to