The compiling fails when using Maven with a JDK 1.6 and 'source' and 'target' set to 1.3. The syntax for assertions has been added in Java 1.4, for example check the Sun Certified Java Programmer Java 6 Study Guide.
There should also be basic / sufficient information available in the Oracle Java Tutorials. Using source / target 1.5 the compilation works. However using a JDK 1.5 the program must fail at runtime due to a missing StringBuilder class (in fact you are likely to see a ClassNotFoundException). However the JDKs do understand class file format of lower versions. Hence the program will run as expected if having it compiled with source / target 1.5 and above AND using a JDK 1.6 or above. This question becomes completely independent from Maven. Hence further questions about this should be requested to some Java specific forums / mailing lists, not Maven mailing lists. I got the impression that you are a Maven / Java starter. Maybe you should ask a colleague / someone you know for more explanations on this. Probably some pair programming trying this stuff would be more effective. With regards Sebastian -----Ursprüngliche Nachricht----- Von: Lin Ma [mailto:[email protected]] Gesendet: Montag, 30. März 2015 23:43 An: Maven Users List Betreff: Re: about source and target in maven-compiler-plugin Hi Sebastian, The sample is interesting. In your sample, you are using source 1.5 in pom.xml? Thanks. regards, Lin On Mon, Mar 30, 2015 at 1:27 AM, Sebastian Oerding < [email protected]> wrote: > Finally to finish this I tried a mini maven project containing the > following class: > > package zzzzTest; > > public class Test { > public void foo() { > System.out.println(new StringBuilder("Hello world!")); > assert true; > } > } > > Running mvn install gave me (stripped for the relevant part): > > [INFO] > [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ > zzzzTest --- [WARNING] Using platform encoding (Cp1252 actually) to > copy filtered resources, i.e. build is platform dependent! > [INFO] skip non existing resourceDirectory > C:\Users\sebastian.oerding\workspaces\workspace\zzzzTest\src\main\reso > urces > [INFO] > [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ > zzzzTest > --- > [INFO] Changes detected - recompiling the module! > [WARNING] File encoding has not been set, using platform encoding > Cp1252, i.e. build is platform dependent! > [INFO] Compiling 1 source file to > C:\Users\sebastian.oerding\workspaces\workspace\zzzzTest\target\classe > s [INFO] ------------------------------------------------------------- > [ERROR] COMPILATION ERROR : > [INFO] ------------------------------------------------------------- > [ERROR] > /C:/Users/sebastian.oerding/workspaces/workspace/zzzzTest/src/main/jav > a/zzzzTest/Test.java:[6,17] > C:\Users\sebastian.o > \Test.java:6: not a statement > [ERROR] > /C:/Users/sebastian.oerding/workspaces/workspace/zzzzTest/src/main/jav > a/zzzzTest/Test.java:[6,23] > C:\Users\sebastian.o > \Test.java:6: ';' expected > [INFO] 2 errors > [INFO] ------------------------------------------------------------- > [INFO] > ---------------------------------------------------------------------- > -- > [INFO] BUILD FAILURE > [INFO] > ---------------------------------------------------------------------- > -- > [INFO] Total time: 1.138 s > [INFO] Finished at: 2015-03-30T10:23:21+02:00 [INFO] Final Memory: > 9M/152M [INFO] > ---------------------------------------------------------------------- > -- > [ERROR] Failed to execute goal > org.apache.maven.plugins:maven-compiler-plugin:3.1:compile > (default-compile) on project zzzzTes > [ERROR] > /C:/Users/sebastian.oerding/workspaces/workspace/zzzzTest/src/main/jav > a/zzzzTest/Test.java:[6,17] > C:\Users\sebastian.o > \Test.java:6: not a statement > [ERROR] > /C:/Users/sebastian.oerding/workspaces/workspace/zzzzTest/src/main/jav > a/zzzzTest/Test.java:[6,23] > C:\Users\sebastian.o > \Test.java:6: ';' expected > [ERROR] -> [Help 1] > > Hence new available API may be a special case but using features such > as assertions not supported does really cause a compiler error (the > maven installation used as JDK 1.6) > > With regards > Sebastian > > -----Ursprüngliche Nachricht----- > Von: Lin Ma [mailto:[email protected]] > Gesendet: Montag, 30. März 2015 09:56 > An: Maven Users List > Betreff: Re: about source and target in maven-compiler-plugin > > Thanks all the same Sebastian. Your reply is very helpful and bring us > further thoughts. > > regards, > Lin > > On Mon, Mar 30, 2015 at 12:47 AM, Sebastian Oerding < > [email protected]> wrote: > > > Hi Lin, > > > > I just tried my example and Maxim is right. I thought that the > > source should take the API compatibility into account it seems that > > it is not this way. Hence if the classes are successfully compiled > > (which requires a JDK > > > 1.5) and you are executing them with Java 1.5 the StringBuilder > > class will not be in place -> ClassNotFoundException (the class > > format should be as needed for Java 1.5 due to the target). > > > > However I will not tell anymore about it as I'm not completely sure > > about the moment and I do not have the time to really dig into this. > Sorry. > > Detailed information about this is available in the net. In an > > earlier email someone already provided links for the Maven documentation. > > > > Furthermore details about setting the compiler level can be found > > for example in the Sun Certified Java Programmer Study Guide. > > > > With regards > > Sebastian > > > > -----Ursprüngliche Nachricht----- > > Von: Lin Ma [mailto:[email protected]] > > Gesendet: Montag, 30. März 2015 09:38 > > An: Maven Users List > > Betreff: Re: about source and target in maven-compiler-plugin > > > > Hi Maxim, > > > > Why compiler will not fail? Supposing StringBuilder is a class in > > JDK 1.6, but we force compiler to use 1.5 which has no such class? > > Please feel free to correct me if I am wrong. > > > > regards, > > Lin > > > > On Mon, Mar 30, 2015 at 12:33 AM, Maxim Solodovnik > > <[email protected]> > > wrote: > > > > > If I'm not mistaken compiler will not fail in this case BUT the > > > application will fail in runtime (in case Java 1.5 is used) due to > > > StringBuilder class is missing in JDK > > > > > > On Mon, Mar 30, 2015 at 1:20 PM, Lin Ma <[email protected]> wrote: > > > > > > > Thanks Sebastian, > > > > > > > > 1. I am using JDK 1.7/1.8 for both development and deployment in > > > > runtime, shall I change 1.5 of source and target to 1.7/1.8? > > > > > > > > 2. In your example, "for example you can write source code using > > > > a JDK > > > 1.6 > > > > which is compliant to Java 1.5. However you can also use the > > > StringBuilder > > > > class which does not exist in Java 1.5", I think using JDK 1.6 > > > > specific feature but using 1.5 complier will fail? No? Please > > > > feel free to correct me. > > > > > > > > regards, > > > > Lin > > > > > > > > On Mon, Mar 30, 2015 at 12:14 AM, Sebastian Oerding < > > > > [email protected]> wrote: > > > > > > > > > source -> The level (JDK version) to which the source code > > > > > must be compliant to, for example you can write source code > > > > > using a JDK > > > > > 1.6 > > > which > > > > > is compliant to Java 1.5. However you can also use the > > > > > StringBuilder > > > > class > > > > > which does not exist in Java 1.5 target -> The class version > > > > > of the generated class files. The class > > > > format > > > > > changes with some Java version, for example as some stuff may > > > > > be added > > > > for > > > > > performance reason. For example if a new byte code instruction > > > > > comes up (like 'invokedynamic') this really makes a change. Or > > > > > another example > > > > (I'm > > > > > not really sure about it): As far as I think a stack map has > > > > > been added from Java 5 to Java 1.6. This should improve > > > > > performance and makes > > > subtle > > > > > differences when ClassNotFoundException are thrown. You can > > > > > use a JDK > > > to > > > > > compile code for different but lower versions. This way can > > > > > benefit > > > from > > > > > some optimizations which weren't available with the old JDK > > > > > and are compatible. > > > > > > > > > > With regards > > > > > Sebastian > > > > > > > > > > -----Ursprüngliche Nachricht----- > > > > > Von: Lin Ma [mailto:[email protected]] > > > > > Gesendet: Montag, 30. März 2015 07:46 > > > > > An: Maven Users List > > > > > Betreff: about source and target in maven-compiler-plugin > > > > > > > > > > Hello Maven masters, > > > > > > > > > > For maven-compiler-plugin(a sample below), have a quick question. > > > > > I > > > read > > > > > this document > > > > > (http://maven.apache.org/plugins/maven-compiler-plugin/ > > > ), > > > > > and confused what means source and target 1.5 here, it seems > > > > > it is an internal version number of Maven, independent of JDK? > > > > > > > > > > <plugin> > > > > > <artifactId>maven-compiler-plugin</artifactId> > > > > > <version>2.3.2</version> > > > > > <configuration> > > > > > <source>1.5</source> > > > > > <target>1.5</target> > > > > > </configuration> > > > > > </plugin> > > > > > > > > > > thanks in advance, > > > > > Lin > > > > > > > > > > -------------------------------------------------------------- > > > > > -- > > > > > -- > > > > > --- To unsubscribe, e-mail: [email protected] > > > > > For additional commands, e-mail: [email protected] > > > > > > > > > > > > > > > > > > > > > -- > > > WBR > > > Maxim aka solomax > > > > > >
