Hi Lin, that has not been my comment but cited from the given link. However you are right.
In case of more questions use the given link or some Maven / Java documentation to get more information. Note that from the point of view of your question the class files happen to be incidentally generated by Maven invoking the javac with some options. Hence the runtime behavior does not have to do anything with Maven but is solely a Java related question. Hence a Maven mailing list is no more the proper place. With regards Sebastian -----Ursprüngliche Nachricht----- Von: Lin Ma [mailto:[email protected]] Gesendet: Montag, 30. März 2015 23:50 An: Maven Users List Betreff: Re: about source and target in maven-compiler-plugin Hi Sebastian, For your comments, "Merely setting the target option does not guarantee that your code actually runs on a JRE with the specified version", I think you mean the code still runs on target JRE version as specified in pom.xml, but it will still fail when using a new version of API on an old JRE? Thanks. regards, Lin On Mon, Mar 30, 2015 at 1:21 AM, Sebastian Oerding < [email protected]> wrote: > As I felt unfomfortable leaving it as it is I checked > > http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-com > piler-source-and-target.html where there was the following hint on the > target tag: > Note: Merely setting the target option does not guarantee that your > code actually runs on a JRE with the specified version. The pitfall is > unintended usage of APIs that only exist in later JREs which would > make your code fail at runtime with a linkage error. To avoid this > issue, you can either configure the compiler's boot classpath to match > the target JRE or use the Animal Sniffer Maven Plugin to verify your > code doesn't use unintended APIs. > > 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 > > > > > >
