[ https://issues.apache.org/jira/browse/IO-127?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12534760 ]
Joerg Schaible commented on IO-127: ----------------------------------- There's no magic involved here, it's simply the runtime library. Using a JDK 6 compiler to produce JDK 1.3 code does not hide the classes and methods of the JDK 6 runtime library and the compiler does not check the version of the byte code it compiles against. Obviously you're getting in trouble running the result with a runtime lib of JDK 1.3 if you have used methods only available in later Java versions, since they're simply missing. However there are two pitfalls with such an approach: 1/ A programmer might use newer functionality without recognizing it. Typical trap is e.g. new RuntimeException("Rethrow", ex); JDK 1.3's RuntimeException has no constructors taking a causing exception. 2/ The compiler selects a different overloaded method in a newer JDK. Prominent example is new StringBuffer(stringBuffer); JDK 1.3's StringBuffer has only a constructor with a String, while in JDK 1.4 it also has a constructor taking a StringBuffer. Therefore compiling with a newer JDK it will select the new constructor, while compiling with JDK 1.3 will convert the argument first to a String before creating the StringBuffer. Both problems can be avoided if we use a CI to compile the JDK 1.3 compatible classes only with JDK 1.3. That's the way we do with XStream: http://bamboo.ci.codehaus.org/browse/XSTREAM-JDK13. In XStream we even used a two-phased compile step for JDK 5 dependent code (annotation, enums) and JDK 1.3 compatible source code. All is delivered in one artifact. Works quite well now for years. > Move to a minimum of JDK 1.4 > ---------------------------- > > Key: IO-127 > URL: https://issues.apache.org/jira/browse/IO-127 > Project: Commons IO > Issue Type: Task > Reporter: Niall Pemberton > Priority: Minor > Fix For: 1.4 > > Attachments: commons-io-jdk-1_3-check.patch > > > There was a discussion a while back on moving Commons IO to a minimum JDK > version of 1.4 - see [1] below. The majority view was this was a good idea. > Jorg Schaible suggested[2] that the compiler options be kept at JDK 1.3 so > that, apart from new JDK 1.4 dependant features, Commons IO would still > operate under JDK 1.3. This seems like a good idea and resolves the issue of > whether this would require a major version change. > There was also a view that we should move to JDK 1.5 instead - I have no > issue with that, but would advocate that theres no point in doing so until > there are people wanting to commit JDK 1.5 dependant features. > This change is targeted at Commons IO 1.4 - and a Commons IO 1.3 branch has > been created for anyone still desiring future JDK 1.3 only releases. > [1] http://mail-archives.apache.org/mod_mbox/commons-dev/200705.mbox/[EMAIL > PROTECTED] > [2] http://mail-archives.apache.org/mod_mbox/commons-dev/200705.mbox/[EMAIL > PROTECTED] -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.