Link to home
Start Free TrialLog in
Avatar of thomas908
thomas908

asked on

help in setting classpath in ant

i am using windows2000 and have installed ant in D Drive.
My directory structure is something like

D:\ant\source\src\com\pack1\pack2 (com\pack1\pack2 are packages)
D:\ant\source\conf.jar
D:\ant\source\datasocket.jar
D:\ant\source\thirdparty\xercesImpl.jar

and I have created the follwoing build.xml

<?xml version="1.0"?>

<project name="Proj" default="compile" basedir=".">
     <property name="name" value="Proj" />
     <property name="build" value="${basedir}\build" />
     <property name="source" value="${basedir}\source" />
     <property name="baselib" value="\source" />

        <target name="compile">
        <javac srcdir="${source}" destdir="${build}">
           <classpath>

              <pathelement location="${baselib}\mysql-connector-java-3.0.6-stable-bin.jar" />
              <pathelement location="${baselib}\photos.jar" />
              <pathelement location="${baselib}\conf.jar" />
              <pathelement location="${baselib}\jh.jar" />
              <pathelement location="${baselib}\jhall.jar" />
              <pathelement location="${baselib}\jhbasic.jar" />
              <pathelement location="${baselib}\jhsearch.jar" />
              <pathelement location="${baselib}\datasocket.jar" />
              <pathelement location="${baselib}\log4j-1.2.7.jar" />
              <pathelement location="${baselib}\thirdparty\xercesImpl.jar" />
              <pathelement location="${baselib}\thirdparty\xmlParserAPIs.jar" />


           </classpath>
       </javac>
    </target>

</project>

But when i try to execute it, i get errors  which indicate that java files cannot find the jar files that is some problem with the classpath.

   [javac] D:\ant\source\src\com\pack1\pack2\Test.java
143: cannot resolve symbol
   [javac] symbol  : class Logger
   [javac] location: class com\pack1\pack2\Test.java
   [javac]     private Logger logger = Logger.getLogger(Test.class);
...
Avatar of ronan_40060
ronan_40060
Flag of United States of America image

Hello
 , MyComputer -> Properties -> Environment and then define a new variable CLASSPATH and give it some value.
 also by adding the jar file to your 'ext' directory of your jdk and jre.
let me know how it goes
ronan
Avatar of thomas908
thomas908

ASKER

Thanks for replying.
Is it possible to do it from build.xml?
I don't want to set classapth in environment variables. Basically I want to give the user the option to compile the java files. It won't be very appropriate if i ask her to set the classpath in environment variables before compiling.
SOLUTION
Avatar of ronan_40060
ronan_40060
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
<target name="compile" depends="CopyFiles" >
    <javac srcdir="${source}" destdir="${build}">
      <classpath>
              <pathelement location="{baselib}\mysql-connector-java-3.0.6-stable-bin.jar" />
              <pathelement location="{baselib}\photos.jar" />
              <pathelement location="{baselib}\conf.jar" />
              <pathelement location="{baselib}\jh.jar" />
              <pathelement location="{baselib}\jhall.jar" />
              <pathelement location="D:\ant\source\jhbasic.jar" />
              <pathelement location="{baselib}\jhsearch.jar" />
              <pathelement location="D:\ant\source\datasocket.jar" />
              <pathelement location="D:\ant\source\log4j-1.2.7.jar" />
              <pathelement location="{baselib}\thirdparty\xercesImpl.jar" />
              <pathelement location="{baselib}\thirdparty\xmlParserAPIs.jar" />
     </classpath>
   </javac>
</target>

For some I have specified relative paths. For I have to specify absolute paths, otherwise they are not found, Why is it so?
i am using windows
Avatar of girionis
> For some I have specified relative paths. For I have to specify absolute paths, otherwise they
> are not found, Why is it so?

It should work with absolute paths as well.

>[javac] D:\ant\source\src\com\pack1\pack2\Test.java
>143: cannot resolve symbol
>   [javac] symbol  : class Logger
>   [javac] location: class com\pack1\pack2\Test.java
>   [javac]     private Logger logger = Logger.getLogger(Test.class);

Is the Logger class in the log4j-1.2.7.jar file? It might be missing from another jar file that you do not include in your classpath.
Is <pathelement location="{baselib}\jhall.jar" />
correct way of specifying classapth
Yes this is correct given that there is a "basedir" variabel defined somewhere.
What i want to know is in some pathelements in classpath i am specifying the classpath as

 <pathelement location="D:\ant\source\log4j-1.2.7.jar" />

I don't think that is the right way of doing because user may create directories with differnt names. So specyfing the classpath like

 <pathelement location="{baselib}\photos.jar" />

is a better option. But in my case specfying classpath as  <pathelement location="{baselib}\photos.jar" />
does not work at some places.


classpath>
              <pathelement location="{baselib}\mysql-connector-java-3.0.6-stable-bin.jar" />
              <pathelement location="{baselib}\photos.jar" />
              <pathelement location="{baselib}\conf.jar" />
              <pathelement location="{baselib}\jh.jar" />
              <pathelement location="{baselib}\jhall.jar" />
              <pathelement location="D:\ant\source\jhbasic.jar" />
              <pathelement location="{baselib}\jhsearch.jar" />
              <pathelement location="D:\ant\source\datasocket.jar" />
              <pathelement location="D:\ant\source\log4j-1.2.7.jar" />
              <pathelement location="{baselib}\thirdparty\xercesImpl.jar" />
              <pathelement location="{baselib}\thirdparty\xmlParserAPIs.jar" />
     </classpath>

First 4 pathelemets are specified as  <pathelement location="{baselib}\photos.jar" /> whereas the 5th pathelement is specified by using complete path     <pathelement location="D:\ant\source\jhbasic.jar" /> which i want to avoid. If i write here     <pathelement location="{baselib}\jhbasic.jar" /> it doesn't work
Here is complete build.xml

<?xml version="1.0"?>

<project name="M" default="compile" basedir=".">
<property name="name" value="M" />
<property name="build" value="${basedir}\build" />
<property name="source" value="${basedir}\source\src" />
<property name="baselib" value="\source" />

<target name="init" >

     <mkdir dir="build" />
     <mkdir dir="build\classes" />
</target>

<target name="ClassesCopyFiles" depends="init">
    <copy toDir="build\classes">
      <fileset dir="source\src"
        includes="**/*.*">
        <exclude name="**/*.java"/>
      </fileset>
    </copy>
</target>

<target name="CopyFiles" depends="ClassesCopyFiles">
    <copy toDir="build">
      <fileset dir="source"
        includes="**/*.*">
        <exclude name="**/*.java"/>
          <exclude name="src/**"/>
      </fileset>
    </copy>
</target>



<target name="compile" depends="CopyFiles" >
    <javac srcdir="${source}" destdir="${build}\classes">
      <classpath>
              <pathelement location="{baselib}\mysql-connector-java-3.0.6-stable-bin.jar" />
              <pathelement location="{baselib}\photos.jar" />
              <pathelement location="{baselib}\conf.jar" />
              <pathelement location="{baselib}\jh.jar" />
              <pathelement location="{baselib}\jhall.jar" />
              <pathelement location="D:\ant\source\jhbasic.jar" />
              <pathelement location="{baselib}\jhsearch.jar" />
              <pathelement location="D:\ant\source\datasocket.jar" />
              <pathelement location="D:\ant\source\log4j-1.2.7.jar" />
              <pathelement location="{baselib}\thirdparty\xercesImpl.jar" />
              <pathelement location="{baselib}\thirdparty\xmlParserAPIs.jar" />
     </classpath>
   </javac>
</target>



</project>
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
this solved the problem. Don't know why pathelement didn't work

<path id="My.classpath" >
    <fileset dir="source">
      <include name="**/*.jar" />
    </fileset>
    <pathelement location="source" />
  </path>


<target name="compile" depends="CopyFiles" >
    <javac srcdir="${source}" destdir="${build}\classes">
        <classpath refid="My.classpath"/>
   </javac>
</target>


thanks
Nice to hear problem is solved. If you are happy with the comments please accept an answer otherwise please ask a question to the Community Support forum (https://www.experts-exchange.com/Community_Support/) for zero points to PAQ the question and Refund the points back to you.
Thank you so much for helping
Thank you for accepting, glad we were of help :)