the classes in rt.jar cannot be found during ant build

Z

zyng

Hi,

In my build.xml,
<property environment="env"/>
...
<path id="project.classpath">
<fileset dir="${env.JAVA_HOME}">
<include name="jre/lib/rt.jar"/>
</fileset>
...

The environment variable JAVA_HOME has been set to: C:\Program Files\Java\jdk1.6.0_24

When I run it, those classes inside rt.jar cannot be found. I have print out, using echo, the classpath and rt.jar is included in the classpath.

I don't understand why the classes in rt.jar cannot be reached by javac.

Thank you very much.
 
L

Lew

zyng said:
In my build.xml,
<property environment="env"/>
...
<path id="project.classpath">
<fileset dir="${env.JAVA_HOME}">
<include name="jre/lib/rt.jar"/>
</fileset>
...

The environment variable JAVA_HOME has been set to: C:\Program Files\Java\jdk1.6.0_24

When I run it, those classes inside rt.jar cannot be found. I have print out, using echo, the classpath and rt.jar is included in the classpath.

I don't understand why the classes in rt.jar cannot be reached by javac.

You don't give a complete example, for which you should follow the advice given here:
http://sscce.org/

Did you use a "<classpath refid='...'>" element or "classpathrefid='...'" attribute to the "<javac>" element that refers to your path id?

You should not include rt.jar in a regular classpath anyway. That's wrong. It's a bootclasspath JAR. In fact, you shouldn't have to refer to it explicitly at all unless you're cross-compiling between Java versions.

Give us an SSCCE.
 
R

Roedy Green

<path id="project.classpath">
<fileset dir="${env.JAVA_HOME}">
<include name="jre/lib/rt.jar"/>
</fileset>

Why would you do this? Javac is a built-in ant task. It finds files
in rt.jar all by itself.

<javac source="1.6" target="1.6" srcdir="com/mindprod/replicator"
sourcepath="${basedir}" classpath="${basedir}" debug="on"
includeAntRuntime="false">

--
Roedy Green Canadian Mind Products
http://mindprod.com
When you were a child, if you did your own experiment
to see if it was better to put to cocoa into your cup first
or the hot milk first, then you likely have the programmer gene..
 
A

Arne Vajhøj

In my build.xml,
<property environment="env"/>
...
<path id="project.classpath">
<fileset dir="${env.JAVA_HOME}">
<include name="jre/lib/rt.jar"/>
</fileset>
...

The environment variable JAVA_HOME has been set to: C:\Program Files\Java\jdk1.6.0_24

When I run it, those classes inside rt.jar cannot be found. I have print out, using echo, the classpath and rt.jar is included in the classpath.

I don't understand why the classes in rt.jar cannot be reached by javac.

You should not need to specify rt.jar like that - actually you
should not specify rt.jar like that.

So how does you javac task look like and what errors are you getting?

Arne
 
Z

zyng

Below is a more completed build.xml. The error message

compile:
[javac] C:\my_work\build.xml:47: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to fals
for repeatable builds
[javac] Compiling 407 source files to C:\my_work\build
[javac] C:\my_work\src\abc\efg\xml\MyXmlUtils.java:27: package com.sun.xml.internal.fastinfoset.stax does not exist
[javac] import com.sun.xml.internal.fastinfoset.stax.StAXDocumentParser;
[javac] ^
[javac] C:\my_work\src\abc\efg\xml\MyXmlUtils.java:28: package com.sun.xml.internal.fastinfoset.stax does not exist
[javac] import com.sun.xml.internal.fastinfoset.stax.StAXDocumentSerializer;
[javac] ^
[javac] C:\my_work\src\abc\efg\xml\MyXmlUtils.java:29: package com.sun.xml.internal.txw2.output does not exist
....

Those packages are located inside rt.jar. (I use Eclipse and I include rt.jar in the project property, so there is no compiling error in Eclipse).

Another observation (only happens in my office computer, not in my home computer) confuses me is that: when I copy rt.jar to rt2.jar which locates in the same directory(C:\Program Files\Java\jdk1.6.0_24\jre\lib) and modify build.xml a bit:
<fileset dir="${env.JAVA_HOME}">
<include name="jre/lib/rt2.jar"/>
</fileset>

Then ant works! Very confusing. I just re-tested this observation in my home computer and it does not work -- same error message. But this approach does work in my office computer.

<project name="myproject" default="compile" basedir=".">
<property environment="env"/>
<property name="build.dir" location="build"/>
<property name="libs.dir" location="../libs"/>
<property name="externals.dir" location="${libs.dir}/external"/>
<property name="install.dir" location="${libs.dir}/installed"/>

<path id="project.classpath">
<fileset dir="${env.JAVA_HOME}">
<include name="jre/lib/rt.jar"/>
</fileset>
<pathelement location="${build.dir}"/>
<fileset dir="${externals.dir}">
<include name="abc.jar"/>
<include name="xyz.jar"/>
<include name="junit.jar"/>
</fileset>
</path>

<target name="compile">
<javac srcdir="${src.dir}" destdir="${build.dir}" compiler="modern" fork="yes" debug="on">
<classpath refid="project.classpath"/>
<compilerarg value="-Xlint"/>
</javac>
</target>
</project>
 
A

Arne Vajhøj

Below is a more completed build.xml. The error message

compile:
[javac] C:\my_work\build.xml:47: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to fals
for repeatable builds
[javac] Compiling 407 source files to C:\my_work\build
[javac] C:\my_work\src\abc\efg\xml\MyXmlUtils.java:27: package com.sun.xml.internal.fastinfoset.stax does not exist
[javac] import com.sun.xml.internal.fastinfoset.stax.StAXDocumentParser;
[javac] ^
[javac] C:\my_work\src\abc\efg\xml\MyXmlUtils.java:28: package com.sun.xml.internal.fastinfoset.stax does not exist
[javac] import com.sun.xml.internal.fastinfoset.stax.StAXDocumentSerializer;
[javac] ^
[javac] C:\my_work\src\abc\efg\xml\MyXmlUtils.java:29: package com.sun.xml.internal.txw2.output does not exist
...

Those packages are located inside rt.jar. (I use Eclipse and I include rt.jar in the project property, so there is no compiling error in Eclipse).

Those packages are not intended to be used in your code.

You should use the documented API's.
Another observation (only happens in my office computer, not in my home computer) confuses me is that: when I copy rt.jar to rt2.jar which locates in the same directory(C:\Program Files\Java\jdk1.6.0_24\jre\lib) and modify build.xml a bit:
<fileset dir="${env.JAVA_HOME}">
<include name="jre/lib/rt2.jar"/>
</fileset>
Then ant works! Very confusing. I just re-tested this observation in my home computer and it does not work -- same error message. But this approach does work in my office computer.

<project name="myproject" default="compile" basedir=".">
<property environment="env"/>
<property name="build.dir" location="build"/>
<property name="libs.dir" location="../libs"/>
<property name="externals.dir" location="${libs.dir}/external"/>
<property name="install.dir" location="${libs.dir}/installed"/>

<path id="project.classpath">
<fileset dir="${env.JAVA_HOME}">
<include name="jre/lib/rt.jar"/>
</fileset>
<pathelement location="${build.dir}"/>
<fileset dir="${externals.dir}">
<include name="abc.jar"/>
<include name="xyz.jar"/>
<include name="junit.jar"/>
</fileset>
</path>

<target name="compile">
<javac srcdir="${src.dir}" destdir="${build.dir}" compiler="modern" fork="yes" debug="on">
<classpath refid="project.classpath"/>
<compilerarg value="-Xlint"/>
</javac>
</target>
</project>

You should not explicitly ref rt.jar!

Arne
 
R

Roedy Green

Below is a more completed build.xml. The error message

see http://mindprod.com/jgloss/jdk.html
I suspect you have not fully installed the JDK.
javac.exe needs to be on the path, for example.
--
Roedy Green Canadian Mind Products
http://mindprod.com
When you were a child, if you did your own experiment
to see if it was better to put to cocoa into your cup first
or the hot milk first, then you likely have the programmer gene..
 
A

Arne Vajhøj

see http://mindprod.com/jgloss/jdk.html
I suspect you have not fully installed the JDK.
javac.exe needs to be on the path, for example.

With the error messages:

<quote>
compile:
[javac] C:\my_work\build.xml:47: warning: 'includeantruntime' was
not set, defaulting to build.sysclasspath=last; set to fals
for repeatable builds
[javac] Compiling 407 source files to C:\my_work\build
[javac] C:\my_work\src\abc\efg\xml\MyXmlUtils.java:27: package
com.sun.xml.internal.fastinfoset.stax does not exist
[javac] import
com.sun.xml.internal.fastinfoset.stax.StAXDocumentParser;
[javac] ^
[javac] C:\my_work\src\abc\efg\xml\MyXmlUtils.java:28: package
com.sun.xml.internal.fastinfoset.stax does not exist
[javac] import
com.sun.xml.internal.fastinfoset.stax.StAXDocumentSerializer;
[javac] ^
[javac] C:\my_work\src\abc\efg\xml\MyXmlUtils.java:29: package
com.sun.xml.internal.txw2.output does not exist
</quote>

then javac.exe not being in the path causing the problems seems
as likely as 2+2=7.

Arne
 
R

Roedy Green

Below is a more completed build.xml. The error message

see http://mindprod.com/jgloss/jdk.html
I suspect you have not fully installed the JDK.
javac.exe needs to be on the path, for example.
--
Roedy Green Canadian Mind Products
http://mindprod.com
When you were a child, if you did your own experiment
to see if it was better to put to cocoa into your cup first
or the hot milk first, then you likely have the programmer gene..
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top