Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

255 views
Skip to first unread message

zyng

unread,
Apr 2, 2012, 5:07:17 PM4/2/12
to
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.

Lew

unread,
Apr 2, 2012, 6:53:32 PM4/2/12
to
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.

--
Lew

Roedy Green

unread,
Apr 2, 2012, 7:00:18 PM4/2/12
to
On Mon, 2 Apr 2012 14:07:17 -0700 (PDT), zyng <xs...@yahoo.com> wrote,
quoted or indirectly quoted someone who said :

> <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..

Arne Vajhøj

unread,
Apr 2, 2012, 7:44:12 PM4/2/12
to
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



zyng

unread,
Apr 2, 2012, 8:16:39 PM4/2/12
to
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>

Arne Vajhøj

unread,
Apr 2, 2012, 8:53:22 PM4/2/12
to
On 4/2/2012 8:16 PM, zyng wrote:
> 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.
You should not explicitly ref rt.jar!

Arne

Roedy Green

unread,
Apr 3, 2012, 1:49:12 PM4/3/12
to
On Mon, 2 Apr 2012 17:16:39 -0700 (PDT), zyng <xs...@yahoo.com> wrote,
quoted or indirectly quoted someone who said :

>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.

Arne Vajhøj

unread,
Apr 3, 2012, 7:15:12 PM4/3/12
to
On 4/3/2012 1:49 PM, Roedy Green wrote:
> On Mon, 2 Apr 2012 17:16:39 -0700 (PDT), zyng<xs...@yahoo.com> wrote,
> quoted or indirectly quoted someone who said :
>
>> 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.

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


Roedy Green

unread,
Apr 3, 2012, 7:29:11 PM4/3/12
to
On Mon, 2 Apr 2012 17:16:39 -0700 (PDT), zyng <xs...@yahoo.com> wrote,
quoted or indirectly quoted someone who said :

>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.
0 new messages