Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set ant bootclasspath: JDK 1.7 has a new javac warning for setting an older source without bootclasspath

How do I set the ant bootclasspath in conjunction with -source 1.5 -target 1.5?

How can this not be a hardcoded path to the 1.5 JDK? Can I set an environment variable to bootclasspath similar to how JAVA_HOME can be used from ant?

Ideally I would like to do something like set an environment variable or pass an argument to ant.

like image 962
initialZero Avatar asked Aug 31 '11 17:08

initialZero


2 Answers

Here's an illustration of how you might fetch the Java 5 boot classes location from an environment variable, then use it.

First, set the environment variable - say JAVA5_BOOTCLASSES. The property task gives you access to the environment, then the bootclasspath argument of the javac task passes the setting to the compiler.

<property environment="env" />
<property name="java5.boot.classpath" value="${env.JAVA5_BOOTCLASSES}" />

<javac source="1.5" target="1.5"
       bootclasspath="${java5.boot.classpath}"
       ...
/>

Note that if the environment variable is not set, Ant will ignore it and proceed without - so the compiler will fall back to the default boot classpath.

Another option, if appropriate, is to switch off the warnings, and not bother with the bootclasspath. Something like

<javac srcdir= ... >
    <compilerarg arg="-Xlint:-options" />
</javac>

But that's likely to expose you to some subtle bugs.

like image 149
martin clayton Avatar answered Nov 18 '22 11:11

martin clayton


It's worth noticing that variable JAVA5_BOOTCLASSES should contain all needed libraries not just rt.jar. In my case it was also jce.jar So it's good to set this variable using this simple snippet when in *nix environment:

export JAVA5_BOOTCLASSES=""
for i in /usr/lib/jvm/java/jre/lib/*.jar; do 
    export JAVA5_BOOTCLASSES=$JAVA5_BOOTCLASSES:$i
done
like image 28
soltysh Avatar answered Nov 18 '22 11:11

soltysh