Question: I'd like to know if I can develop my program with the current JRE 7u45 and later run it on an AS400 with IBM J9 VM build 2.4, JRE 1.6.0.
Or will I have to use the 1.6.0 JRE to develop my program? As long as I don't use commands that were introduced later the program should work, shouldn't it?

Answer: 
There are two issues at play:

1) You can't use any new Java 7 features and attempt to generate 1.6 bytecode. Compiling with `-source 1.6 -target 1.6` solves this problem. It will puke if you've done so (e.g. used the diamond operator; `List<String> foo = new ArrayList<>()`)

2) You can't use new classes or new methods added to classes in 1.7. It will compile fine, then fail at runtime on the 1.6 JVM. This is a trickier problem. Using maven to build your project plus the `animal-sniffer` plugin solves this issue:

```
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <compilerArgument>-Xlint:all</compilerArgument>
    </configuration>
</plugin>
<plugin>
    <!-- ensure that only methods available in java 1.6 can
         be used even when compiling with java 1.7+ -->
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>animal-sniffer-maven-plugin</artifactId>
    <version>1.9</version>
    <configuration>
        <signature>
            <groupId>org.codehaus.mojo.signature</groupId>
            <artifactId>java16</artifactId>
            <version>1.1</version>
        </signature>
    </configuration>
    <executions>
        <execution>
            <phase>test</phase>
            <goals>
                <goal>check</goal>
            </goals>
        </execution>
    </executions>
</plugin>

```
While you compile the program you need to use the "-target" flag and set it to 1.6