You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ant.apache.org by Stephen Morrison <s....@gmail.com> on 2005/08/24 14:47:08 UTC

Referencing External .class Files In Classpath

Hi,

I'm trying to build an Ant project that uses some Apple Cocoa classes.  
These are stored as .class files and not as jars.  They reside in a 
completely different folder to my project.  I can compile and run my 
program by referencing these from the command line as follows:

javac -classpath /System/Library/Java:. MyProgram.java

java -classpath /System/Library/Java:. MyProgram

Is there a way I can replicate this functionality using Ant and add the 
directory (System/Library/Java) to the classpath?

I've tried solutions from the Ant documentation and the archives of 
this list but haven't been able to get anything to work yet.

Thanks in advance,
Steve.

SOLVED Re: Referencing External .class Files In Classpath

Posted by Stephen Morrison <s....@gmail.com>.
On 26 Aug 2005, at 14:31, Petar Tahchiev wrote:

> On 26/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>
>>
>> On 26 Aug 2005, at 12:35, Petar Tahchiev wrote:
>>
>>> On 25/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>
>>>>
>>>> On 25 Aug 2005, at 15:41, Petar Tahchiev wrote:
>>>>
>>>>> On 25/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>>>
>>>>>>
>>>>>> On 25 Aug 2005, at 07:07, Petar Tahchiev wrote:
>>>>>>
>>>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> On 24 Aug 2005, at 16:56, Petar Tahchiev wrote:
>>>>>>>>
>>>>>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:
>>>>>>>>>>
>>>>>>>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I'm trying to build an Ant project that uses some Apple
>>>>>>>>>>>>>> Cocoa
>>>>>>>>>>>>>> classes.
>>>>>>>>>>>>>> These are stored as .class files and not as jars. They
>>>>>>>>>>>>>> reside
>>>>>>>>>>>>>> in a
>>>>>>>>>>>>>> completely different folder to my project. I can compile 
>>>>>>>>>>>>>> and
>>>>>>>>>>>>>> run
>>>>>>>>>>>>>> my
>>>>>>>>>>>>>> program by referencing these from the command line as
>>>>>>>>>>>>>> follows:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> javac -classpath /System/Library/Java:. MyProgram.java
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> java -classpath /System/Library/Java:. MyProgram
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Is there a way I can replicate this functionality using 
>>>>>>>>>>>>>> Ant
>>>>>>>>>>>>>> and
>>>>>>>>>>>>>> add
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>> directory (System/Library/Java) to the classpath?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I've tried solutions from the Ant documentation and the
>>>>>>>>>>>>>> archives
>>>>>>>>>>>>>> of
>>>>>>>>>>>>>> this list but haven't been able to get anything to work 
>>>>>>>>>>>>>> yet.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks in advance,
>>>>>>>>>>>>>> Steve.
>>>>>>>>>>>>>>
>>>>>>>>>>>>> You can always use the <compilerarg> task to pass arguments
>>>>>>>>>>>>> to
>>>>>>>>>>>>> the
>>>>>>>>>>>>> compiler,
>>>>>>>>>>>>> but rather why don't you try
>>>>>>>>>>>>> <path id="compile.cp">
>>>>>>>>>>>>> <fileset dir="YOUR DIR">
>>>>>>>>>>>>> <include name=""/>
>>>>>>>>>>>>> </fileset>
>>>>>>>>>>>>> </path>
>>>>>>>>>>>>> and later on call the classpath using <javac srcdir=""
>>>>>>>>>>>>> destdir=""
>>>>>>>>>>>>> classpathref="compile.cp"/>
>>>>>>>>>>>>> Or just use <classpath>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> Regards, Petar!
>>>>>>>>>>>>
>>>>>>>>>>>> I tried the compilerarg task but got the error "Could not
>>>>>>>>>>>> create
>>>>>>>>>>>> the
>>>>>>>>>>>> task or type of task: conpilerarg". I declared this as
>>>>>>>>>>>> <compilerarg
>>>>>>>>>>>> line="-classpath /System/Library/Java/"/>.
>>>>>>>>>>>>
>>>>>>>>>>>> I also tried the other methods you listed but I still got 
>>>>>>>>>>>> the
>>>>>>>>>>>> class
>>>>>>>>>>>> not
>>>>>>>>>>>> found error. My build.xml file was generated for my by my 
>>>>>>>>>>>> IDE
>>>>>>>>>>>> Xcode
>>>>>>>>>>>> and currently looks like this. Sorry if I am missing 
>>>>>>>>>>>> something
>>>>>>>>>>>> obvious
>>>>>>>>>>>> but I am totally new to Ant.
>>>>>>>>>>>>
>>>>>>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>>>>>>> <project name="MyGame" default="jar" basedir=".">
>>>>>>>>>>>> <property name="src" location="src"/>
>>>>>>>>>>>> <property name="bin" location="bin"/>
>>>>>>>>>>>> <property name="lib" location="lib"/>
>>>>>>>>>>>> <property name="dist" location="dist"/>
>>>>>>>>>>>> <property name="jarfile"
>>>>>>>>>>>> location="${dist}/${ant.project.name 
>>>>>>>>>>>> <http://ant.project.name>
>>>>>>>>>>>> <http://ant.project.name> <
>>>> http://ant.project.name> <
>>>>>> http://ant.project.name> <
>>>>>>>> http://ant.project.name> <
>>>>>>>>>> http://ant.project.name>}.jar"/>
>>>>>>>>>>>> <property name="compile.debug" value="true"/>
>>>>>>>>>>>>
>>>>>>>>>>>> <fileset id="lib.jars" dir="${lib}">
>>>>>>>>>>>> <include name="**/*.jar"/>
>>>>>>>>>>>> </fileset>
>>>>>>>>>>>>
>>>>>>>>>>>> <path id="lib.path">
>>>>>>>>>>>> <fileset refid="lib.jars"/>
>>>>>>>>>>>> </path>
>>>>>>>>>>>>
>>>>>>>>>>>> <target name="compile" description="Compile code">
>>>>>>>>>>>> <mkdir dir="${bin}"/>
>>>>>>>>>>>> <mkdir dir="${lib}"/>
>>>>>>>>>>>> <javac srcdir="${src}" destdir="${bin}" 
>>>>>>>>>>>> includeAntRuntime="no"
>>>>>>>>>>>> classpathref="lib.path" debug="${compile.debug}">
>>>>>>>>>>>> </javac>
>>>>>>>>>>>> </target>
>>>>>>>>>>>>
>>>>>>>>>>>> <target name="jar" depends="compile" description="Build 
>>>>>>>>>>>> jar">
>>>>>>>>>>>> <mkdir dir="${dist}"/>
>>>>>>>>>>>> <jar jarfile="${jarfile}" basedir="${bin}"
>>>>>>>>>>>> manifest="Manifest">
>>>>>>>>>>>> <!-- Merge library jars into final jar file -->
>>>>>>>>>>>> <zipgroupfileset refid="lib.jars"/>
>>>>>>>>>>>> </jar>
>>>>>>>>>>>> </target>
>>>>>>>>>>>>
>>>>>>>>>>>> <target name="run" depends="jar" description="Run jar file">
>>>>>>>>>>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
>>>>>>>>>>>> </target>
>>>>>>>>>>>>
>>>>>>>>>>>> <target name="clean" description="Remove build and dist
>>>>>>>>>>>> directories">
>>>>>>>>>>>> <delete dir="${bin}"/>
>>>>>>>>>>>> <delete dir="${dist}"/>
>>>>>>>>>>>> </target>
>>>>>>>>>>>> </project>
>>>>>>>>>>>>
>>>>>>>>>>>> My fault. I forgot to tell you that compilerarg is an 
>>>>>>>>>>>> optioanl
>>>>>>>>>>>> ant-contrib
>>>>>>>>>>> task and if you want to use it you have to download the tasks
>>>>>>>>>>> from
>>>>>>>>>>> the
>>>>>>>>>>> ant-contrib site: http://ant-contrib.sourceforge.net/, also 
>>>>>>>>>>> an
>>>>>>>>>>> installation
>>>>>>>>>>> howto is available there. But instead try this
>>>>>>>>>>> <javac .........>
>>>>>>>>>>> <classpath>
>>>>>>>>>>> <pathelement location="yourdir"/>
>>>>>>>>>>> </classpath>
>>>>>>>>>>> </javac>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Regards, Petar!
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Thanks for your help so far but I still can't get it to work.
>>>>>>>>>> Firstly
>>>>>>>>>> I tried the additions to javac that you outlined above but I
>>>>>>>>>> still
>>>>>>>>>> got
>>>>>>>>>> the class not found error. I then tried downloading the
>>>>>>>>>> ant-contrib
>>>>>>>>>> task. I have referenced this as outlined in the documentation
>>>>>>>>>> and
>>>>>>>>>> copied the jar file to my lib directory of my project. But I
>>>>>>>>>> still
>>>>>>>>>> get
>>>>>>>>>> the could not create task error. Below is the code I added to 
>>>>>>>>>> my
>>>>>>>>>> build.xml file. Is this correct?
>>>>>>>>>>
>>>>>>>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>>>>>>>>>> <classpath>
>>>>>>>>>> <pathelement location="./lib/ant-contrib.jar" />
>>>>>>>>>> </classpath>
>>>>>>>>>> </taskdef>
>>>>>>>>>>
>>>>>>>>>> <compilerarg line="-classpath /System/Library/Java"/>
>>>>>>>>>>
>>>>>>>>>> I suppose that the problem is that you may have not copied the
>>>>>>>>> ant-contrib-version.jar to your $ANT_HOME/lib folder. I am 
>>>>>>>>> still
>>>>>>>>> curious
>>>>>>>>> that
>>>>>>>>> <javac srcdir="" destdir="">
>>>>>>>>> <classpath>
>>>>>>>>> <pathelement location="yourdir"/>
>>>>>>>>> </claspath>
>>>>>>>>> </javac>
>>>>>>>>> doesn't work. Remember that you must ignore the package folders
>>>>>>>>> when
>>>>>>>>> pointing "yourdir". Point only the top-root forlder.
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Regards, Petar!
>>>>>>>>
>>>>>>>> You were right I hadn't copied the file to the $ANT_HOME/lib
>>>>>>>> folder.
>>>>>>>> But after doing that it now runs, but still gives the class not
>>>>>>>> found
>>>>>>>> error. There are 2 possible problems as I can see it. Either I'm
>>>>>>>> referring to the directory wrongly, or else I haven't defined 
>>>>>>>> the
>>>>>>>> compilerarg statement correctly.
>>>>>>>>
>>>>>>>> When I refer to my directory which is /System/Library/Java this 
>>>>>>>> is
>>>>>>>> the
>>>>>>>> reference from the root folder on my hard drive, and is the top
>>>>>>>> root
>>>>>>>> folder of the package I want to use. Could it be that Ant is
>>>>>>>> looking
>>>>>>>> for that folder from within the current folder my Ant project is
>>>>>>>> stored
>>>>>>>> in and not the root folder of my computer? In which case how 
>>>>>>>> can I
>>>>>>>> get
>>>>>>>> it to point to the computers root directory? I thought starting
>>>>>>>> with /
>>>>>>>> would do that.
>>>>>>>
>>>>>>>
>>>>>>> Your vision is quite true . The / symbol represents the root 
>>>>>>> folder
>>>>>>> in
>>>>>>> Unix,
>>>>>>> so ant should find the folder you are passing as an argument.
>>>>>>>
>>>>>>> Alternatively I could be defining the compilerarg statement
>>>>>>> wrongly.
>>>>>>>> Firstly I have placed it within the <javac> tags. Is this the
>>>>>>>> correct
>>>>>>>> location? Also, is the compilerarg statement below the correct 
>>>>>>>> way
>>>>>>>> to
>>>>>>>> carry out the javac command line statement below it?
>>>>>>>>
>>>>>>>> <compilerarg line="-classpath /System/Library/Java"/>
>>>>>>>
>>>>>>>
>>>>>>> this should be
>>>>>>> <compilerarg value="-classpath /System/Library/Java/"/>
>>>>>>>
>>>>>>> javac -classpath /System/Library/Java:. MyProgram.java
>>>>>>>>
>>>>>>>> Thanks.
>>>>>>>>
>>>>>>>> Yes you are right that this fragment is wrong. First of all to
>>>>>>>> ensure
>>>>>>>> you
>>>>>>> have your tasks in your classpath use:
>>>>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>>>>>>> <classpath>
>>>>>>> <pathelement location="ANT_HOME/lib/ant-contrib.jar"/>
>>>>>>> </classpath>
>>>>>>> </taskdef>
>>>>>>> as "net/sf/antcontrib/antcontrib.properties" describes every
>>>>>>> additional task
>>>>>>> and it is placed in your ant-contrib.jar so you have to add it
>>>>>>> like a
>>>>>>> classpath. Second your javac task should look something like 
>>>>>>> this:
>>>>>>> <javac srcdir="SRC" destdir="DEST">
>>>>>>> <compilerarg value="-classpath"/>
>>>>>>> <compilerarg value="DIRECTORY/"/>
>>>>>>> </javac>
>>>>>>> You can't just place <compilerarg value="-classpath DIRECTORY"/>
>>>>>>> because
>>>>>>> there is a blank space between -classpath and DIRECTORY and it 
>>>>>>> will
>>>>>>> get
>>>>>>> quoted. So you put the two strings as separate arguments. I 
>>>>>>> tested
>>>>>>> it
>>>>>>> on my
>>>>>>> machine and it worked fine. Although I was a liitle bit confused
>>>>>>> because I
>>>>>>> have never used compilerarg to pass a directory to the 
>>>>>>> classpath. I
>>>>>>> most
>>>>>>> oftently use a
>>>>>>> <path id="compile.cp">
>>>>>>> <pathelement location="DIRECTORY/"/>
>>>>>>> </path>
>>>>>>> ---------------------
>>>>>>> <javac srcdir="" destdir="" classpathref="compil.cp"/>
>>>>>>> structure and it always wokes fine. Anyway I hope I helped.
>>>>>>>
>>>>>>> P.S Dont forget to exclude any package directories and to place 
>>>>>>> a /
>>>>>>> after
>>>>>>> DIRECTORY.
>>>>>>> --
>>>>>>> Regards, Petar!
>>>>>>
>>>>>>
>>>>>> Many thanks for all your help Petar. Sadly it still won't work. I
>>>>>> know for a fact my directory is correct because it works when I
>>>>>> compile
>>>>>> and run the program from the command line. But from within my IDE
>>>>>> Xcode I still get the class not found error. I have copied my 
>>>>>> entire
>>>>>> build.xml file below. As you can see its laid out exactly as you
>>>>>> suggested. Unless there is some error in another part of the file
>>>>>> preventing this from working, I can only assume the problem lies
>>>>>> with
>>>>>> the IDE, and if I can't find out the problem I will have to look 
>>>>>> for
>>>>>> an
>>>>>> alternative.
>>>>>>
>>>>>>
>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>> <project name="MyProgram" default="jar" basedir=".">
>>>>>> <property name="src" location="src"/>
>>>>>> <property name="bin" location="bin"/>
>>>>>> <property name="lib" location="lib"/>
>>>>>> <property name="dist" location="dist"/>
>>>>>> <property name="jarfile"
>>>>>> location="${dist}/${ant.project.name <http://ant.project.name> <
>> http://ant.project.name> <
>>>> http://ant.project.name>}.jar"/>
>>>>>> <property name="compile.debug" value="true"/>
>>>>>>
>>>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>>>>>> <classpath>
>>>>>> <pathelement 
>>>>>> location="/Developer/Java/Ant/lib/ant-contrib-0.6.jar"
>>>>>> />
>>>>>> </classpath>
>>>>>> </taskdef>
>>>>>>
>>>>>> <fileset id="lib.jars" dir="${lib}">
>>>>>> <include name="**/*.jar"/>
>>>>>> </fileset>
>>>>>>
>>>>>> <path id="lib.path">
>>>>>> <fileset refid="lib.jars"/>
>>>>>> </path>
>>>>>>
>>>>>> <target name="compile" description="Compile code">
>>>>>> <mkdir dir="${bin}"/>
>>>>>> <mkdir dir="${lib}"/>
>>>>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
>>>>>> classpathref="lib.path" debug="${compile.debug}">
>>>>>> <compilerarg value="-classpath"/>
>>>>>> <compilerarg value="/System/Library/Java/"/>
>>>>>> </javac>
>>>>>> </target>
>>>>>>
>>>>>> <target name="jar" depends="compile" description="Build jar">
>>>>>> <mkdir dir="${dist}"/>
>>>>>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
>>>>>> <!-- Merge library jars into final jar file -->
>>>>>> <zipgroupfileset refid="lib.jars"/>
>>>>>> </jar>
>>>>>> </target>
>>>>>>
>>>>>> <target name="run" depends="jar" description="Run jar file">
>>>>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
>>>>>> </target>
>>>>>>
>>>>>> <target name="clean" description="Remove build and dist
>>>>>> directories">
>>>>>> <delete dir="${bin}"/>
>>>>>> <delete dir="${dist}"/>
>>>>>> </target>
>>>>>> </project>
>>>>>
>>>>>
>>>>> I am in a hurry right now so I will look further on your problem
>>>>> tommorow
>>>>> morning. Meanwhile you may try to test your application via console
>>>>> instead
>>>>> of in your IDE. If it works then you should add your jars in the
>>>>> classpath
>>>>> of your project. Also the problem may have been caused by not
>>>>> inserting the
>>>>> jars in the right place. Many IDEs have their own ANT_HOME. 
>>>>> Elcipse's
>>>>> is in
>>>>> plugins/ant-1.6/. Try to run ant from the command line, and also it
>>>>> would be
>>>>> useful if you supply the stackTrace. We don't know which class 
>>>>> isn't
>>>>> found.
>>>>> Right?
>>>>> Hope that helps...
>>>>>
>>>>> --
>>>>> Regards, Petar!
>>>>>
>>>>
>>>> Thanks Petar. I tried running ant from the command line and replied 
>>>> to
>>>> this mail with the results shortly before you sent your reply. If 
>>>> you
>>>> haven't yet seen it, it was just to say that I got the same problem
>>>> doing it that way.
>>>>
>>>> I think the jar is in the right place. Xcode allows you to modify 
>>>> the
>>>> path where it searches for the ant installation and this is 
>>>> currently
>>>> pointing to the correct place where I copied the file. Also, before 
>>>> I
>>>> was referring to it wrongly and the project wouldn't compile saying 
>>>> it
>>>> couldn't find compilerargs. When I fixed this it compiled OK. So I'm
>>>> pretty sure its finding the compilerarg task OK.
>>>>
>>>> As for the error I get its this:
>>>>
>>>> Exception in thread "main" java.lang.NoClassDefFoundError:
>>>> com/apple/cocoa/application/NSSpeechSynthesizer
>>>> at SpeechSynthesiser.<init>(SpeechSynthesiser.java:11)
>>>> at Game.<init>(Game.java:35)
>>>>
>>>> The package its referring to is the Apple Cocoa speech synthesizer
>>>> package. This is found on Macs in the folder /System/Library/Java
>>>> which is the path I am pointing too. Like I said earlier if I use
>>>> javac from the command line and not ant it picks this up OK. So I'm
>>>> pretty certain the error is somewhere in my build.xml file. As it 
>>>> was
>>>> system generated (minus the few additions I've made to try and fix
>>>> this) I'm not sure if its 100% correct.
>>>
>>>
>>>
>>> First of all I want to say that in my opinion your code looks fine. I
>>> am a
>>> little bit astonished by the part:
>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
>>> classpathref="lib.path" debug="${compile.debug}">
>>> <compilerarg value="-classpath"/>
>>> <compilerarg value="/System/Library/Java/"/>
>>> </javac>
>>> Maybe, I am not quite sure, so maybe there is a problem when using
>>> classpathref and <compilerarg value="-classpath"/>. I don't know
>>> whether
>>> some kind of confrontation could arise. Let me suggest you something.
>>> You
>>> have a
>>> <path id="lib.path">
>>> <fileset refid="lib.jars"/>
>>> </path>
>>> defined. Why don't you just add your folder to this path and then 
>>> call
>>> classpathref="lib.path" in your javac task. Something like this 
>>> should
>>> work:
>>> <path id="lib.path">
>>> <fileset refid="lib.jars"/>
>>> <fileset dir="/System/Library/Java">
>>> <include name="**/*.*"/>
>>> </fileset>
>>> </path>
>>> Also tell me does your code now compile and breaks down during
>>> execution or
>>> you can't compile it at all?
>>> --
>>> Regards, Petar!
>>
>> The other method you suggested doesn't work either :-(
>>
>> I hadn't thought about whether it breaks during compilation or
>> execution. It breaks during execution. It compiles OK and once the
>> program loads up and attempts to find the NSSpeechSynthesizer object 
>> it
>> breaks. I guess this means that its finding the path OK during
>> compilation and the problem is something else??
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>> For additional commands, e-mail: user-help@ant.apache.org
>>
>> Well then the solution is quite simple. Your files are not in the jar 
>> file
> so the JVM can't locate them. You have to insert them in the jar file 
> in
> order to use them. Use something like the copy task to copy them in 
> your
> jar's document root or wherever you like them. Also you might want to 
> start
> the jar file from the command line in order to be sure that the 
> problem is
> in ANT. If theproblems continue, please let me know. Hope that helps.
>
> -- 
> Regards, Petar!
>

Thanks a lot :D  That was exactly the problem and your solution 
worked!!!

I used the copy task to copy the files.  I've never worked with jars 
before so just assumed by setting the classpath it would reference the 
files.  I didn't realise they had to be copied also.

Anyway its working now, and thanks again for your great help!


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Re: Referencing External .class Files In Classpath

Posted by Petar Tahchiev <pa...@gmail.com>.
On 26/08/05, Stephen Morrison <s....@gmail.com> wrote:
> 
> 
> On 26 Aug 2005, at 12:35, Petar Tahchiev wrote:
> 
> > On 25/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>
> >>
> >> On 25 Aug 2005, at 15:41, Petar Tahchiev wrote:
> >>
> >>> On 25/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>>>
> >>>>
> >>>> On 25 Aug 2005, at 07:07, Petar Tahchiev wrote:
> >>>>
> >>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>>>>>
> >>>>>>
> >>>>>> On 24 Aug 2005, at 16:56, Petar Tahchiev wrote:
> >>>>>>
> >>>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:
> >>>>>>>>
> >>>>>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
> >>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> Hi,
> >>>>>>>>>>>>
> >>>>>>>>>>>> I'm trying to build an Ant project that uses some Apple
> >>>>>>>>>>>> Cocoa
> >>>>>>>>>>>> classes.
> >>>>>>>>>>>> These are stored as .class files and not as jars. They
> >>>>>>>>>>>> reside
> >>>>>>>>>>>> in a
> >>>>>>>>>>>> completely different folder to my project. I can compile and
> >>>>>>>>>>>> run
> >>>>>>>>>>>> my
> >>>>>>>>>>>> program by referencing these from the command line as
> >>>>>>>>>>>> follows:
> >>>>>>>>>>>>
> >>>>>>>>>>>> javac -classpath /System/Library/Java:. MyProgram.java
> >>>>>>>>>>>>
> >>>>>>>>>>>> java -classpath /System/Library/Java:. MyProgram
> >>>>>>>>>>>>
> >>>>>>>>>>>> Is there a way I can replicate this functionality using Ant
> >>>>>>>>>>>> and
> >>>>>>>>>>>> add
> >>>>>>>>>>>> the
> >>>>>>>>>>>> directory (System/Library/Java) to the classpath?
> >>>>>>>>>>>>
> >>>>>>>>>>>> I've tried solutions from the Ant documentation and the
> >>>>>>>>>>>> archives
> >>>>>>>>>>>> of
> >>>>>>>>>>>> this list but haven't been able to get anything to work yet.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thanks in advance,
> >>>>>>>>>>>> Steve.
> >>>>>>>>>>>>
> >>>>>>>>>>> You can always use the <compilerarg> task to pass arguments
> >>>>>>>>>>> to
> >>>>>>>>>>> the
> >>>>>>>>>>> compiler,
> >>>>>>>>>>> but rather why don't you try
> >>>>>>>>>>> <path id="compile.cp">
> >>>>>>>>>>> <fileset dir="YOUR DIR">
> >>>>>>>>>>> <include name=""/>
> >>>>>>>>>>> </fileset>
> >>>>>>>>>>> </path>
> >>>>>>>>>>> and later on call the classpath using <javac srcdir=""
> >>>>>>>>>>> destdir=""
> >>>>>>>>>>> classpathref="compile.cp"/>
> >>>>>>>>>>> Or just use <classpath>
> >>>>>>>>>>>
> >>>>>>>>>>> --
> >>>>>>>>>>> Regards, Petar!
> >>>>>>>>>>
> >>>>>>>>>> I tried the compilerarg task but got the error "Could not
> >>>>>>>>>> create
> >>>>>>>>>> the
> >>>>>>>>>> task or type of task: conpilerarg". I declared this as
> >>>>>>>>>> <compilerarg
> >>>>>>>>>> line="-classpath /System/Library/Java/"/>.
> >>>>>>>>>>
> >>>>>>>>>> I also tried the other methods you listed but I still got the
> >>>>>>>>>> class
> >>>>>>>>>> not
> >>>>>>>>>> found error. My build.xml file was generated for my by my IDE
> >>>>>>>>>> Xcode
> >>>>>>>>>> and currently looks like this. Sorry if I am missing something
> >>>>>>>>>> obvious
> >>>>>>>>>> but I am totally new to Ant.
> >>>>>>>>>>
> >>>>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
> >>>>>>>>>> <project name="MyGame" default="jar" basedir=".">
> >>>>>>>>>> <property name="src" location="src"/>
> >>>>>>>>>> <property name="bin" location="bin"/>
> >>>>>>>>>> <property name="lib" location="lib"/>
> >>>>>>>>>> <property name="dist" location="dist"/>
> >>>>>>>>>> <property name="jarfile"
> >>>>>>>>>> location="${dist}/${ant.project.name <http://ant.project.name>
> >>>>>>>>>> <http://ant.project.name> <
> >> http://ant.project.name> <
> >>>> http://ant.project.name> <
> >>>>>> http://ant.project.name> <
> >>>>>>>> http://ant.project.name>}.jar"/>
> >>>>>>>>>> <property name="compile.debug" value="true"/>
> >>>>>>>>>>
> >>>>>>>>>> <fileset id="lib.jars" dir="${lib}">
> >>>>>>>>>> <include name="**/*.jar"/>
> >>>>>>>>>> </fileset>
> >>>>>>>>>>
> >>>>>>>>>> <path id="lib.path">
> >>>>>>>>>> <fileset refid="lib.jars"/>
> >>>>>>>>>> </path>
> >>>>>>>>>>
> >>>>>>>>>> <target name="compile" description="Compile code">
> >>>>>>>>>> <mkdir dir="${bin}"/>
> >>>>>>>>>> <mkdir dir="${lib}"/>
> >>>>>>>>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> >>>>>>>>>> classpathref="lib.path" debug="${compile.debug}">
> >>>>>>>>>> </javac>
> >>>>>>>>>> </target>
> >>>>>>>>>>
> >>>>>>>>>> <target name="jar" depends="compile" description="Build jar">
> >>>>>>>>>> <mkdir dir="${dist}"/>
> >>>>>>>>>> <jar jarfile="${jarfile}" basedir="${bin}"
> >>>>>>>>>> manifest="Manifest">
> >>>>>>>>>> <!-- Merge library jars into final jar file -->
> >>>>>>>>>> <zipgroupfileset refid="lib.jars"/>
> >>>>>>>>>> </jar>
> >>>>>>>>>> </target>
> >>>>>>>>>>
> >>>>>>>>>> <target name="run" depends="jar" description="Run jar file">
> >>>>>>>>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
> >>>>>>>>>> </target>
> >>>>>>>>>>
> >>>>>>>>>> <target name="clean" description="Remove build and dist
> >>>>>>>>>> directories">
> >>>>>>>>>> <delete dir="${bin}"/>
> >>>>>>>>>> <delete dir="${dist}"/>
> >>>>>>>>>> </target>
> >>>>>>>>>> </project>
> >>>>>>>>>>
> >>>>>>>>>> My fault. I forgot to tell you that compilerarg is an optioanl
> >>>>>>>>>> ant-contrib
> >>>>>>>>> task and if you want to use it you have to download the tasks
> >>>>>>>>> from
> >>>>>>>>> the
> >>>>>>>>> ant-contrib site: http://ant-contrib.sourceforge.net/, also an
> >>>>>>>>> installation
> >>>>>>>>> howto is available there. But instead try this
> >>>>>>>>> <javac .........>
> >>>>>>>>> <classpath>
> >>>>>>>>> <pathelement location="yourdir"/>
> >>>>>>>>> </classpath>
> >>>>>>>>> </javac>
> >>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>> Regards, Petar!
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Thanks for your help so far but I still can't get it to work.
> >>>>>>>> Firstly
> >>>>>>>> I tried the additions to javac that you outlined above but I
> >>>>>>>> still
> >>>>>>>> got
> >>>>>>>> the class not found error. I then tried downloading the
> >>>>>>>> ant-contrib
> >>>>>>>> task. I have referenced this as outlined in the documentation
> >>>>>>>> and
> >>>>>>>> copied the jar file to my lib directory of my project. But I
> >>>>>>>> still
> >>>>>>>> get
> >>>>>>>> the could not create task error. Below is the code I added to my
> >>>>>>>> build.xml file. Is this correct?
> >>>>>>>>
> >>>>>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> >>>>>>>> <classpath>
> >>>>>>>> <pathelement location="./lib/ant-contrib.jar" />
> >>>>>>>> </classpath>
> >>>>>>>> </taskdef>
> >>>>>>>>
> >>>>>>>> <compilerarg line="-classpath /System/Library/Java"/>
> >>>>>>>>
> >>>>>>>> I suppose that the problem is that you may have not copied the
> >>>>>>> ant-contrib-version.jar to your $ANT_HOME/lib folder. I am still
> >>>>>>> curious
> >>>>>>> that
> >>>>>>> <javac srcdir="" destdir="">
> >>>>>>> <classpath>
> >>>>>>> <pathelement location="yourdir"/>
> >>>>>>> </claspath>
> >>>>>>> </javac>
> >>>>>>> doesn't work. Remember that you must ignore the package folders
> >>>>>>> when
> >>>>>>> pointing "yourdir". Point only the top-root forlder.
> >>>>>>>
> >>>>>>> --
> >>>>>>> Regards, Petar!
> >>>>>>
> >>>>>> You were right I hadn't copied the file to the $ANT_HOME/lib
> >>>>>> folder.
> >>>>>> But after doing that it now runs, but still gives the class not
> >>>>>> found
> >>>>>> error. There are 2 possible problems as I can see it. Either I'm
> >>>>>> referring to the directory wrongly, or else I haven't defined the
> >>>>>> compilerarg statement correctly.
> >>>>>>
> >>>>>> When I refer to my directory which is /System/Library/Java this is
> >>>>>> the
> >>>>>> reference from the root folder on my hard drive, and is the top
> >>>>>> root
> >>>>>> folder of the package I want to use. Could it be that Ant is
> >>>>>> looking
> >>>>>> for that folder from within the current folder my Ant project is
> >>>>>> stored
> >>>>>> in and not the root folder of my computer? In which case how can I
> >>>>>> get
> >>>>>> it to point to the computers root directory? I thought starting
> >>>>>> with /
> >>>>>> would do that.
> >>>>>
> >>>>>
> >>>>> Your vision is quite true . The / symbol represents the root folder
> >>>>> in
> >>>>> Unix,
> >>>>> so ant should find the folder you are passing as an argument.
> >>>>>
> >>>>> Alternatively I could be defining the compilerarg statement
> >>>>> wrongly.
> >>>>>> Firstly I have placed it within the <javac> tags. Is this the
> >>>>>> correct
> >>>>>> location? Also, is the compilerarg statement below the correct way
> >>>>>> to
> >>>>>> carry out the javac command line statement below it?
> >>>>>>
> >>>>>> <compilerarg line="-classpath /System/Library/Java"/>
> >>>>>
> >>>>>
> >>>>> this should be
> >>>>> <compilerarg value="-classpath /System/Library/Java/"/>
> >>>>>
> >>>>> javac -classpath /System/Library/Java:. MyProgram.java
> >>>>>>
> >>>>>> Thanks.
> >>>>>>
> >>>>>> Yes you are right that this fragment is wrong. First of all to
> >>>>>> ensure
> >>>>>> you
> >>>>> have your tasks in your classpath use:
> >>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> >>>>> <classpath>
> >>>>> <pathelement location="ANT_HOME/lib/ant-contrib.jar"/>
> >>>>> </classpath>
> >>>>> </taskdef>
> >>>>> as "net/sf/antcontrib/antcontrib.properties" describes every
> >>>>> additional task
> >>>>> and it is placed in your ant-contrib.jar so you have to add it
> >>>>> like a
> >>>>> classpath. Second your javac task should look something like this:
> >>>>> <javac srcdir="SRC" destdir="DEST">
> >>>>> <compilerarg value="-classpath"/>
> >>>>> <compilerarg value="DIRECTORY/"/>
> >>>>> </javac>
> >>>>> You can't just place <compilerarg value="-classpath DIRECTORY"/>
> >>>>> because
> >>>>> there is a blank space between -classpath and DIRECTORY and it will
> >>>>> get
> >>>>> quoted. So you put the two strings as separate arguments. I tested
> >>>>> it
> >>>>> on my
> >>>>> machine and it worked fine. Although I was a liitle bit confused
> >>>>> because I
> >>>>> have never used compilerarg to pass a directory to the classpath. I
> >>>>> most
> >>>>> oftently use a
> >>>>> <path id="compile.cp">
> >>>>> <pathelement location="DIRECTORY/"/>
> >>>>> </path>
> >>>>> ---------------------
> >>>>> <javac srcdir="" destdir="" classpathref="compil.cp"/>
> >>>>> structure and it always wokes fine. Anyway I hope I helped.
> >>>>>
> >>>>> P.S Dont forget to exclude any package directories and to place a /
> >>>>> after
> >>>>> DIRECTORY.
> >>>>> --
> >>>>> Regards, Petar!
> >>>>
> >>>>
> >>>> Many thanks for all your help Petar. Sadly it still won't work. I
> >>>> know for a fact my directory is correct because it works when I
> >>>> compile
> >>>> and run the program from the command line. But from within my IDE
> >>>> Xcode I still get the class not found error. I have copied my entire
> >>>> build.xml file below. As you can see its laid out exactly as you
> >>>> suggested. Unless there is some error in another part of the file
> >>>> preventing this from working, I can only assume the problem lies
> >>>> with
> >>>> the IDE, and if I can't find out the problem I will have to look for
> >>>> an
> >>>> alternative.
> >>>>
> >>>>
> >>>> <?xml version="1.0" encoding="UTF-8"?>
> >>>> <project name="MyProgram" default="jar" basedir=".">
> >>>> <property name="src" location="src"/>
> >>>> <property name="bin" location="bin"/>
> >>>> <property name="lib" location="lib"/>
> >>>> <property name="dist" location="dist"/>
> >>>> <property name="jarfile"
> >>>> location="${dist}/${ant.project.name <http://ant.project.name> <
> http://ant.project.name> <
> >> http://ant.project.name>}.jar"/>
> >>>> <property name="compile.debug" value="true"/>
> >>>>
> >>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> >>>> <classpath>
> >>>> <pathelement location="/Developer/Java/Ant/lib/ant-contrib-0.6.jar"
> >>>> />
> >>>> </classpath>
> >>>> </taskdef>
> >>>>
> >>>> <fileset id="lib.jars" dir="${lib}">
> >>>> <include name="**/*.jar"/>
> >>>> </fileset>
> >>>>
> >>>> <path id="lib.path">
> >>>> <fileset refid="lib.jars"/>
> >>>> </path>
> >>>>
> >>>> <target name="compile" description="Compile code">
> >>>> <mkdir dir="${bin}"/>
> >>>> <mkdir dir="${lib}"/>
> >>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> >>>> classpathref="lib.path" debug="${compile.debug}">
> >>>> <compilerarg value="-classpath"/>
> >>>> <compilerarg value="/System/Library/Java/"/>
> >>>> </javac>
> >>>> </target>
> >>>>
> >>>> <target name="jar" depends="compile" description="Build jar">
> >>>> <mkdir dir="${dist}"/>
> >>>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
> >>>> <!-- Merge library jars into final jar file -->
> >>>> <zipgroupfileset refid="lib.jars"/>
> >>>> </jar>
> >>>> </target>
> >>>>
> >>>> <target name="run" depends="jar" description="Run jar file">
> >>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
> >>>> </target>
> >>>>
> >>>> <target name="clean" description="Remove build and dist
> >>>> directories">
> >>>> <delete dir="${bin}"/>
> >>>> <delete dir="${dist}"/>
> >>>> </target>
> >>>> </project>
> >>>
> >>>
> >>> I am in a hurry right now so I will look further on your problem
> >>> tommorow
> >>> morning. Meanwhile you may try to test your application via console
> >>> instead
> >>> of in your IDE. If it works then you should add your jars in the
> >>> classpath
> >>> of your project. Also the problem may have been caused by not
> >>> inserting the
> >>> jars in the right place. Many IDEs have their own ANT_HOME. Elcipse's
> >>> is in
> >>> plugins/ant-1.6/. Try to run ant from the command line, and also it
> >>> would be
> >>> useful if you supply the stackTrace. We don't know which class isn't
> >>> found.
> >>> Right?
> >>> Hope that helps...
> >>>
> >>> --
> >>> Regards, Petar!
> >>>
> >>
> >> Thanks Petar. I tried running ant from the command line and replied to
> >> this mail with the results shortly before you sent your reply. If you
> >> haven't yet seen it, it was just to say that I got the same problem
> >> doing it that way.
> >>
> >> I think the jar is in the right place. Xcode allows you to modify the
> >> path where it searches for the ant installation and this is currently
> >> pointing to the correct place where I copied the file. Also, before I
> >> was referring to it wrongly and the project wouldn't compile saying it
> >> couldn't find compilerargs. When I fixed this it compiled OK. So I'm
> >> pretty sure its finding the compilerarg task OK.
> >>
> >> As for the error I get its this:
> >>
> >> Exception in thread "main" java.lang.NoClassDefFoundError:
> >> com/apple/cocoa/application/NSSpeechSynthesizer
> >> at SpeechSynthesiser.<init>(SpeechSynthesiser.java:11)
> >> at Game.<init>(Game.java:35)
> >>
> >> The package its referring to is the Apple Cocoa speech synthesizer
> >> package. This is found on Macs in the folder /System/Library/Java
> >> which is the path I am pointing too. Like I said earlier if I use
> >> javac from the command line and not ant it picks this up OK. So I'm
> >> pretty certain the error is somewhere in my build.xml file. As it was
> >> system generated (minus the few additions I've made to try and fix
> >> this) I'm not sure if its 100% correct.
> >
> >
> >
> > First of all I want to say that in my opinion your code looks fine. I
> > am a
> > little bit astonished by the part:
> > <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> > classpathref="lib.path" debug="${compile.debug}">
> > <compilerarg value="-classpath"/>
> > <compilerarg value="/System/Library/Java/"/>
> > </javac>
> > Maybe, I am not quite sure, so maybe there is a problem when using
> > classpathref and <compilerarg value="-classpath"/>. I don't know
> > whether
> > some kind of confrontation could arise. Let me suggest you something.
> > You
> > have a
> > <path id="lib.path">
> > <fileset refid="lib.jars"/>
> > </path>
> > defined. Why don't you just add your folder to this path and then call
> > classpathref="lib.path" in your javac task. Something like this should
> > work:
> > <path id="lib.path">
> > <fileset refid="lib.jars"/>
> > <fileset dir="/System/Library/Java">
> > <include name="**/*.*"/>
> > </fileset>
> > </path>
> > Also tell me does your code now compile and breaks down during
> > execution or
> > you can't compile it at all?
> > --
> > Regards, Petar!
> 
> The other method you suggested doesn't work either :-(
> 
> I hadn't thought about whether it breaks during compilation or
> execution. It breaks during execution. It compiles OK and once the
> program loads up and attempts to find the NSSpeechSynthesizer object it
> breaks. I guess this means that its finding the path OK during
> compilation and the problem is something else??
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
> For additional commands, e-mail: user-help@ant.apache.org
> 
> Well then the solution is quite simple. Your files are not in the jar file 
so the JVM can't locate them. You have to insert them in the jar file in 
order to use them. Use something like the copy task to copy them in your 
jar's document root or wherever you like them. Also you might want to start 
the jar file from the command line in order to be sure that the problem is 
in ANT. If theproblems continue, please let me know. Hope that helps.

-- 
Regards, Petar!

Re: Referencing External .class Files In Classpath

Posted by Stephen Morrison <s....@gmail.com>.
On 26 Aug 2005, at 12:35, Petar Tahchiev wrote:

> On 25/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>
>>
>> On 25 Aug 2005, at 15:41, Petar Tahchiev wrote:
>>
>>> On 25/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>
>>>>
>>>> On 25 Aug 2005, at 07:07, Petar Tahchiev wrote:
>>>>
>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>>>
>>>>>>
>>>>>> On 24 Aug 2005, at 16:56, Petar Tahchiev wrote:
>>>>>>
>>>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:
>>>>>>>>
>>>>>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Hi,
>>>>>>>>>>>>
>>>>>>>>>>>> I'm trying to build an Ant project that uses some Apple 
>>>>>>>>>>>> Cocoa
>>>>>>>>>>>> classes.
>>>>>>>>>>>> These are stored as .class files and not as jars. They 
>>>>>>>>>>>> reside
>>>>>>>>>>>> in a
>>>>>>>>>>>> completely different folder to my project. I can compile and
>>>>>>>>>>>> run
>>>>>>>>>>>> my
>>>>>>>>>>>> program by referencing these from the command line as 
>>>>>>>>>>>> follows:
>>>>>>>>>>>>
>>>>>>>>>>>> javac -classpath /System/Library/Java:. MyProgram.java
>>>>>>>>>>>>
>>>>>>>>>>>> java -classpath /System/Library/Java:. MyProgram
>>>>>>>>>>>>
>>>>>>>>>>>> Is there a way I can replicate this functionality using Ant
>>>>>>>>>>>> and
>>>>>>>>>>>> add
>>>>>>>>>>>> the
>>>>>>>>>>>> directory (System/Library/Java) to the classpath?
>>>>>>>>>>>>
>>>>>>>>>>>> I've tried solutions from the Ant documentation and the
>>>>>>>>>>>> archives
>>>>>>>>>>>> of
>>>>>>>>>>>> this list but haven't been able to get anything to work yet.
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks in advance,
>>>>>>>>>>>> Steve.
>>>>>>>>>>>>
>>>>>>>>>>> You can always use the <compilerarg> task to pass arguments 
>>>>>>>>>>> to
>>>>>>>>>>> the
>>>>>>>>>>> compiler,
>>>>>>>>>>> but rather why don't you try
>>>>>>>>>>> <path id="compile.cp">
>>>>>>>>>>> <fileset dir="YOUR DIR">
>>>>>>>>>>> <include name=""/>
>>>>>>>>>>> </fileset>
>>>>>>>>>>> </path>
>>>>>>>>>>> and later on call the classpath using <javac srcdir=""
>>>>>>>>>>> destdir=""
>>>>>>>>>>> classpathref="compile.cp"/>
>>>>>>>>>>> Or just use <classpath>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Regards, Petar!
>>>>>>>>>>
>>>>>>>>>> I tried the compilerarg task but got the error "Could not 
>>>>>>>>>> create
>>>>>>>>>> the
>>>>>>>>>> task or type of task: conpilerarg". I declared this as
>>>>>>>>>> <compilerarg
>>>>>>>>>> line="-classpath /System/Library/Java/"/>.
>>>>>>>>>>
>>>>>>>>>> I also tried the other methods you listed but I still got the
>>>>>>>>>> class
>>>>>>>>>> not
>>>>>>>>>> found error. My build.xml file was generated for my by my IDE
>>>>>>>>>> Xcode
>>>>>>>>>> and currently looks like this. Sorry if I am missing something
>>>>>>>>>> obvious
>>>>>>>>>> but I am totally new to Ant.
>>>>>>>>>>
>>>>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>>>>> <project name="MyGame" default="jar" basedir=".">
>>>>>>>>>> <property name="src" location="src"/>
>>>>>>>>>> <property name="bin" location="bin"/>
>>>>>>>>>> <property name="lib" location="lib"/>
>>>>>>>>>> <property name="dist" location="dist"/>
>>>>>>>>>> <property name="jarfile"
>>>>>>>>>> location="${dist}/${ant.project.name 
>>>>>>>>>> <http://ant.project.name> <
>> http://ant.project.name> <
>>>> http://ant.project.name> <
>>>>>> http://ant.project.name> <
>>>>>>>> http://ant.project.name>}.jar"/>
>>>>>>>>>> <property name="compile.debug" value="true"/>
>>>>>>>>>>
>>>>>>>>>> <fileset id="lib.jars" dir="${lib}">
>>>>>>>>>> <include name="**/*.jar"/>
>>>>>>>>>> </fileset>
>>>>>>>>>>
>>>>>>>>>> <path id="lib.path">
>>>>>>>>>> <fileset refid="lib.jars"/>
>>>>>>>>>> </path>
>>>>>>>>>>
>>>>>>>>>> <target name="compile" description="Compile code">
>>>>>>>>>> <mkdir dir="${bin}"/>
>>>>>>>>>> <mkdir dir="${lib}"/>
>>>>>>>>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
>>>>>>>>>> classpathref="lib.path" debug="${compile.debug}">
>>>>>>>>>> </javac>
>>>>>>>>>> </target>
>>>>>>>>>>
>>>>>>>>>> <target name="jar" depends="compile" description="Build jar">
>>>>>>>>>> <mkdir dir="${dist}"/>
>>>>>>>>>> <jar jarfile="${jarfile}" basedir="${bin}" 
>>>>>>>>>> manifest="Manifest">
>>>>>>>>>> <!-- Merge library jars into final jar file -->
>>>>>>>>>> <zipgroupfileset refid="lib.jars"/>
>>>>>>>>>> </jar>
>>>>>>>>>> </target>
>>>>>>>>>>
>>>>>>>>>> <target name="run" depends="jar" description="Run jar file">
>>>>>>>>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
>>>>>>>>>> </target>
>>>>>>>>>>
>>>>>>>>>> <target name="clean" description="Remove build and dist
>>>>>>>>>> directories">
>>>>>>>>>> <delete dir="${bin}"/>
>>>>>>>>>> <delete dir="${dist}"/>
>>>>>>>>>> </target>
>>>>>>>>>> </project>
>>>>>>>>>>
>>>>>>>>>> My fault. I forgot to tell you that compilerarg is an optioanl
>>>>>>>>>> ant-contrib
>>>>>>>>> task and if you want to use it you have to download the tasks
>>>>>>>>> from
>>>>>>>>> the
>>>>>>>>> ant-contrib site: http://ant-contrib.sourceforge.net/, also an
>>>>>>>>> installation
>>>>>>>>> howto is available there. But instead try this
>>>>>>>>> <javac .........>
>>>>>>>>> <classpath>
>>>>>>>>> <pathelement location="yourdir"/>
>>>>>>>>> </classpath>
>>>>>>>>> </javac>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Regards, Petar!
>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks for your help so far but I still can't get it to work.
>>>>>>>> Firstly
>>>>>>>> I tried the additions to javac that you outlined above but I 
>>>>>>>> still
>>>>>>>> got
>>>>>>>> the class not found error. I then tried downloading the
>>>>>>>> ant-contrib
>>>>>>>> task. I have referenced this as outlined in the documentation 
>>>>>>>> and
>>>>>>>> copied the jar file to my lib directory of my project. But I 
>>>>>>>> still
>>>>>>>> get
>>>>>>>> the could not create task error. Below is the code I added to my
>>>>>>>> build.xml file. Is this correct?
>>>>>>>>
>>>>>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>>>>>>>> <classpath>
>>>>>>>> <pathelement location="./lib/ant-contrib.jar" />
>>>>>>>> </classpath>
>>>>>>>> </taskdef>
>>>>>>>>
>>>>>>>> <compilerarg line="-classpath /System/Library/Java"/>
>>>>>>>>
>>>>>>>> I suppose that the problem is that you may have not copied the
>>>>>>> ant-contrib-version.jar to your $ANT_HOME/lib folder. I am still
>>>>>>> curious
>>>>>>> that
>>>>>>> <javac srcdir="" destdir="">
>>>>>>> <classpath>
>>>>>>> <pathelement location="yourdir"/>
>>>>>>> </claspath>
>>>>>>> </javac>
>>>>>>> doesn't work. Remember that you must ignore the package folders
>>>>>>> when
>>>>>>> pointing "yourdir". Point only the top-root forlder.
>>>>>>>
>>>>>>> --
>>>>>>> Regards, Petar!
>>>>>>
>>>>>> You were right I hadn't copied the file to the $ANT_HOME/lib 
>>>>>> folder.
>>>>>> But after doing that it now runs, but still gives the class not
>>>>>> found
>>>>>> error. There are 2 possible problems as I can see it. Either I'm
>>>>>> referring to the directory wrongly, or else I haven't defined the
>>>>>> compilerarg statement correctly.
>>>>>>
>>>>>> When I refer to my directory which is /System/Library/Java this is
>>>>>> the
>>>>>> reference from the root folder on my hard drive, and is the top 
>>>>>> root
>>>>>> folder of the package I want to use. Could it be that Ant is 
>>>>>> looking
>>>>>> for that folder from within the current folder my Ant project is
>>>>>> stored
>>>>>> in and not the root folder of my computer? In which case how can I
>>>>>> get
>>>>>> it to point to the computers root directory? I thought starting
>>>>>> with /
>>>>>> would do that.
>>>>>
>>>>>
>>>>> Your vision is quite true . The / symbol represents the root folder
>>>>> in
>>>>> Unix,
>>>>> so ant should find the folder you are passing as an argument.
>>>>>
>>>>> Alternatively I could be defining the compilerarg statement 
>>>>> wrongly.
>>>>>> Firstly I have placed it within the <javac> tags. Is this the
>>>>>> correct
>>>>>> location? Also, is the compilerarg statement below the correct way
>>>>>> to
>>>>>> carry out the javac command line statement below it?
>>>>>>
>>>>>> <compilerarg line="-classpath /System/Library/Java"/>
>>>>>
>>>>>
>>>>> this should be
>>>>> <compilerarg value="-classpath /System/Library/Java/"/>
>>>>>
>>>>> javac -classpath /System/Library/Java:. MyProgram.java
>>>>>>
>>>>>> Thanks.
>>>>>>
>>>>>> Yes you are right that this fragment is wrong. First of all to
>>>>>> ensure
>>>>>> you
>>>>> have your tasks in your classpath use:
>>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>>>>> <classpath>
>>>>> <pathelement location="ANT_HOME/lib/ant-contrib.jar"/>
>>>>> </classpath>
>>>>> </taskdef>
>>>>> as "net/sf/antcontrib/antcontrib.properties" describes every
>>>>> additional task
>>>>> and it is placed in your ant-contrib.jar so you have to add it 
>>>>> like a
>>>>> classpath. Second your javac task should look something like this:
>>>>> <javac srcdir="SRC" destdir="DEST">
>>>>> <compilerarg value="-classpath"/>
>>>>> <compilerarg value="DIRECTORY/"/>
>>>>> </javac>
>>>>> You can't just place <compilerarg value="-classpath DIRECTORY"/>
>>>>> because
>>>>> there is a blank space between -classpath and DIRECTORY and it will
>>>>> get
>>>>> quoted. So you put the two strings as separate arguments. I tested 
>>>>> it
>>>>> on my
>>>>> machine and it worked fine. Although I was a liitle bit confused
>>>>> because I
>>>>> have never used compilerarg to pass a directory to the classpath. I
>>>>> most
>>>>> oftently use a
>>>>> <path id="compile.cp">
>>>>> <pathelement location="DIRECTORY/"/>
>>>>> </path>
>>>>> ---------------------
>>>>> <javac srcdir="" destdir="" classpathref="compil.cp"/>
>>>>> structure and it always wokes fine. Anyway I hope I helped.
>>>>>
>>>>> P.S Dont forget to exclude any package directories and to place a /
>>>>> after
>>>>> DIRECTORY.
>>>>> --
>>>>> Regards, Petar!
>>>>
>>>>
>>>> Many thanks for all your help Petar. Sadly it still won't work. I
>>>> know for a fact my directory is correct because it works when I
>>>> compile
>>>> and run the program from the command line. But from within my IDE
>>>> Xcode I still get the class not found error. I have copied my entire
>>>> build.xml file below. As you can see its laid out exactly as you
>>>> suggested. Unless there is some error in another part of the file
>>>> preventing this from working, I can only assume the problem lies 
>>>> with
>>>> the IDE, and if I can't find out the problem I will have to look for
>>>> an
>>>> alternative.
>>>>
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <project name="MyProgram" default="jar" basedir=".">
>>>> <property name="src" location="src"/>
>>>> <property name="bin" location="bin"/>
>>>> <property name="lib" location="lib"/>
>>>> <property name="dist" location="dist"/>
>>>> <property name="jarfile"
>>>> location="${dist}/${ant.project.name <http://ant.project.name> <
>> http://ant.project.name>}.jar"/>
>>>> <property name="compile.debug" value="true"/>
>>>>
>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>>>> <classpath>
>>>> <pathelement location="/Developer/Java/Ant/lib/ant-contrib-0.6.jar"
>>>> />
>>>> </classpath>
>>>> </taskdef>
>>>>
>>>> <fileset id="lib.jars" dir="${lib}">
>>>> <include name="**/*.jar"/>
>>>> </fileset>
>>>>
>>>> <path id="lib.path">
>>>> <fileset refid="lib.jars"/>
>>>> </path>
>>>>
>>>> <target name="compile" description="Compile code">
>>>> <mkdir dir="${bin}"/>
>>>> <mkdir dir="${lib}"/>
>>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
>>>> classpathref="lib.path" debug="${compile.debug}">
>>>> <compilerarg value="-classpath"/>
>>>> <compilerarg value="/System/Library/Java/"/>
>>>> </javac>
>>>> </target>
>>>>
>>>> <target name="jar" depends="compile" description="Build jar">
>>>> <mkdir dir="${dist}"/>
>>>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
>>>> <!-- Merge library jars into final jar file -->
>>>> <zipgroupfileset refid="lib.jars"/>
>>>> </jar>
>>>> </target>
>>>>
>>>> <target name="run" depends="jar" description="Run jar file">
>>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
>>>> </target>
>>>>
>>>> <target name="clean" description="Remove build and dist
>>>> directories">
>>>> <delete dir="${bin}"/>
>>>> <delete dir="${dist}"/>
>>>> </target>
>>>> </project>
>>>
>>>
>>> I am in a hurry right now so I will look further on your problem
>>> tommorow
>>> morning. Meanwhile you may try to test your application via console
>>> instead
>>> of in your IDE. If it works then you should add your jars in the
>>> classpath
>>> of your project. Also the problem may have been caused by not
>>> inserting the
>>> jars in the right place. Many IDEs have their own ANT_HOME. Elcipse's
>>> is in
>>> plugins/ant-1.6/. Try to run ant from the command line, and also it
>>> would be
>>> useful if you supply the stackTrace. We don't know which class isn't
>>> found.
>>> Right?
>>> Hope that helps...
>>>
>>> --
>>> Regards, Petar!
>>>
>>
>> Thanks Petar. I tried running ant from the command line and replied to
>> this mail with the results shortly before you sent your reply. If you
>> haven't yet seen it, it was just to say that I got the same problem
>> doing it that way.
>>
>> I think the jar is in the right place. Xcode allows you to modify the
>> path where it searches for the ant installation and this is currently
>> pointing to the correct place where I copied the file. Also, before I
>> was referring to it wrongly and the project wouldn't compile saying it
>> couldn't find compilerargs. When I fixed this it compiled OK. So I'm
>> pretty sure its finding the compilerarg task OK.
>>
>> As for the error I get its this:
>>
>> Exception in thread "main" java.lang.NoClassDefFoundError:
>> com/apple/cocoa/application/NSSpeechSynthesizer
>> at SpeechSynthesiser.<init>(SpeechSynthesiser.java:11)
>> at Game.<init>(Game.java:35)
>>
>> The package its referring to is the Apple Cocoa speech synthesizer
>> package. This is found on Macs in the folder /System/Library/Java
>> which is the path I am pointing too. Like I said earlier if I use
>> javac from the command line and not ant it picks this up OK. So I'm
>> pretty certain the error is somewhere in my build.xml file. As it was
>> system generated (minus the few additions I've made to try and fix
>> this) I'm not sure if its 100% correct.
>
>
>
> First of all I want to say that in my opinion your code looks fine. I 
> am a
> little bit astonished by the part:
>  <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> classpathref="lib.path" debug="${compile.debug}">
> <compilerarg value="-classpath"/>
> <compilerarg value="/System/Library/Java/"/>
> </javac>
> Maybe, I am not quite sure, so maybe there is a problem when using
> classpathref and <compilerarg value="-classpath"/>. I don't know 
> whether
> some kind of confrontation could arise. Let me suggest you something. 
> You
> have a
> <path id="lib.path">
> <fileset refid="lib.jars"/>
> </path>
> defined. Why don't you just add your folder to this path and then call
> classpathref="lib.path" in your javac task. Something like this should 
> work:
> <path id="lib.path">
> <fileset refid="lib.jars"/>
> <fileset dir="/System/Library/Java">
> <include name="**/*.*"/>
> </fileset>
> </path>
> Also tell me does your code now compile and breaks down during 
> execution or
> you can't compile it at all?
> -- 
> Regards, Petar!

The other method you suggested doesn't work either :-(

I hadn't thought about whether it breaks during compilation or 
execution.  It breaks during execution.  It compiles OK and once the 
program loads up and attempts to find the NSSpeechSynthesizer object it 
breaks.  I guess this means that its finding the path OK during 
compilation and the problem is something else??


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Re: Referencing External .class Files In Classpath

Posted by Petar Tahchiev <pa...@gmail.com>.
On 25/08/05, Stephen Morrison <s....@gmail.com> wrote:
> 
> 
> On 25 Aug 2005, at 15:41, Petar Tahchiev wrote:
> 
> > On 25/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>
> >>
> >> On 25 Aug 2005, at 07:07, Petar Tahchiev wrote:
> >>
> >>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>>>
> >>>>
> >>>> On 24 Aug 2005, at 16:56, Petar Tahchiev wrote:
> >>>>
> >>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>>>>>
> >>>>>>
> >>>>>> On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:
> >>>>>>
> >>>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
> >>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> Hi,
> >>>>>>>>>>
> >>>>>>>>>> I'm trying to build an Ant project that uses some Apple Cocoa
> >>>>>>>>>> classes.
> >>>>>>>>>> These are stored as .class files and not as jars. They reside
> >>>>>>>>>> in a
> >>>>>>>>>> completely different folder to my project. I can compile and
> >>>>>>>>>> run
> >>>>>>>>>> my
> >>>>>>>>>> program by referencing these from the command line as follows:
> >>>>>>>>>>
> >>>>>>>>>> javac -classpath /System/Library/Java:. MyProgram.java
> >>>>>>>>>>
> >>>>>>>>>> java -classpath /System/Library/Java:. MyProgram
> >>>>>>>>>>
> >>>>>>>>>> Is there a way I can replicate this functionality using Ant
> >>>>>>>>>> and
> >>>>>>>>>> add
> >>>>>>>>>> the
> >>>>>>>>>> directory (System/Library/Java) to the classpath?
> >>>>>>>>>>
> >>>>>>>>>> I've tried solutions from the Ant documentation and the
> >>>>>>>>>> archives
> >>>>>>>>>> of
> >>>>>>>>>> this list but haven't been able to get anything to work yet.
> >>>>>>>>>>
> >>>>>>>>>> Thanks in advance,
> >>>>>>>>>> Steve.
> >>>>>>>>>>
> >>>>>>>>> You can always use the <compilerarg> task to pass arguments to
> >>>>>>>>> the
> >>>>>>>>> compiler,
> >>>>>>>>> but rather why don't you try
> >>>>>>>>> <path id="compile.cp">
> >>>>>>>>> <fileset dir="YOUR DIR">
> >>>>>>>>> <include name=""/>
> >>>>>>>>> </fileset>
> >>>>>>>>> </path>
> >>>>>>>>> and later on call the classpath using <javac srcdir=""
> >>>>>>>>> destdir=""
> >>>>>>>>> classpathref="compile.cp"/>
> >>>>>>>>> Or just use <classpath>
> >>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>> Regards, Petar!
> >>>>>>>>
> >>>>>>>> I tried the compilerarg task but got the error "Could not create
> >>>>>>>> the
> >>>>>>>> task or type of task: conpilerarg". I declared this as
> >>>>>>>> <compilerarg
> >>>>>>>> line="-classpath /System/Library/Java/"/>.
> >>>>>>>>
> >>>>>>>> I also tried the other methods you listed but I still got the
> >>>>>>>> class
> >>>>>>>> not
> >>>>>>>> found error. My build.xml file was generated for my by my IDE
> >>>>>>>> Xcode
> >>>>>>>> and currently looks like this. Sorry if I am missing something
> >>>>>>>> obvious
> >>>>>>>> but I am totally new to Ant.
> >>>>>>>>
> >>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
> >>>>>>>> <project name="MyGame" default="jar" basedir=".">
> >>>>>>>> <property name="src" location="src"/>
> >>>>>>>> <property name="bin" location="bin"/>
> >>>>>>>> <property name="lib" location="lib"/>
> >>>>>>>> <property name="dist" location="dist"/>
> >>>>>>>> <property name="jarfile"
> >>>>>>>> location="${dist}/${ant.project.name <http://ant.project.name> <
> http://ant.project.name> <
> >> http://ant.project.name> <
> >>>> http://ant.project.name> <
> >>>>>> http://ant.project.name>}.jar"/>
> >>>>>>>> <property name="compile.debug" value="true"/>
> >>>>>>>>
> >>>>>>>> <fileset id="lib.jars" dir="${lib}">
> >>>>>>>> <include name="**/*.jar"/>
> >>>>>>>> </fileset>
> >>>>>>>>
> >>>>>>>> <path id="lib.path">
> >>>>>>>> <fileset refid="lib.jars"/>
> >>>>>>>> </path>
> >>>>>>>>
> >>>>>>>> <target name="compile" description="Compile code">
> >>>>>>>> <mkdir dir="${bin}"/>
> >>>>>>>> <mkdir dir="${lib}"/>
> >>>>>>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> >>>>>>>> classpathref="lib.path" debug="${compile.debug}">
> >>>>>>>> </javac>
> >>>>>>>> </target>
> >>>>>>>>
> >>>>>>>> <target name="jar" depends="compile" description="Build jar">
> >>>>>>>> <mkdir dir="${dist}"/>
> >>>>>>>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
> >>>>>>>> <!-- Merge library jars into final jar file -->
> >>>>>>>> <zipgroupfileset refid="lib.jars"/>
> >>>>>>>> </jar>
> >>>>>>>> </target>
> >>>>>>>>
> >>>>>>>> <target name="run" depends="jar" description="Run jar file">
> >>>>>>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
> >>>>>>>> </target>
> >>>>>>>>
> >>>>>>>> <target name="clean" description="Remove build and dist
> >>>>>>>> directories">
> >>>>>>>> <delete dir="${bin}"/>
> >>>>>>>> <delete dir="${dist}"/>
> >>>>>>>> </target>
> >>>>>>>> </project>
> >>>>>>>>
> >>>>>>>> My fault. I forgot to tell you that compilerarg is an optioanl
> >>>>>>>> ant-contrib
> >>>>>>> task and if you want to use it you have to download the tasks
> >>>>>>> from
> >>>>>>> the
> >>>>>>> ant-contrib site: http://ant-contrib.sourceforge.net/, also an
> >>>>>>> installation
> >>>>>>> howto is available there. But instead try this
> >>>>>>> <javac .........>
> >>>>>>> <classpath>
> >>>>>>> <pathelement location="yourdir"/>
> >>>>>>> </classpath>
> >>>>>>> </javac>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Regards, Petar!
> >>>>>>
> >>>>>>
> >>>>>> Thanks for your help so far but I still can't get it to work.
> >>>>>> Firstly
> >>>>>> I tried the additions to javac that you outlined above but I still
> >>>>>> got
> >>>>>> the class not found error. I then tried downloading the
> >>>>>> ant-contrib
> >>>>>> task. I have referenced this as outlined in the documentation and
> >>>>>> copied the jar file to my lib directory of my project. But I still
> >>>>>> get
> >>>>>> the could not create task error. Below is the code I added to my
> >>>>>> build.xml file. Is this correct?
> >>>>>>
> >>>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> >>>>>> <classpath>
> >>>>>> <pathelement location="./lib/ant-contrib.jar" />
> >>>>>> </classpath>
> >>>>>> </taskdef>
> >>>>>>
> >>>>>> <compilerarg line="-classpath /System/Library/Java"/>
> >>>>>>
> >>>>>> I suppose that the problem is that you may have not copied the
> >>>>> ant-contrib-version.jar to your $ANT_HOME/lib folder. I am still
> >>>>> curious
> >>>>> that
> >>>>> <javac srcdir="" destdir="">
> >>>>> <classpath>
> >>>>> <pathelement location="yourdir"/>
> >>>>> </claspath>
> >>>>> </javac>
> >>>>> doesn't work. Remember that you must ignore the package folders
> >>>>> when
> >>>>> pointing "yourdir". Point only the top-root forlder.
> >>>>>
> >>>>> --
> >>>>> Regards, Petar!
> >>>>
> >>>> You were right I hadn't copied the file to the $ANT_HOME/lib folder.
> >>>> But after doing that it now runs, but still gives the class not
> >>>> found
> >>>> error. There are 2 possible problems as I can see it. Either I'm
> >>>> referring to the directory wrongly, or else I haven't defined the
> >>>> compilerarg statement correctly.
> >>>>
> >>>> When I refer to my directory which is /System/Library/Java this is
> >>>> the
> >>>> reference from the root folder on my hard drive, and is the top root
> >>>> folder of the package I want to use. Could it be that Ant is looking
> >>>> for that folder from within the current folder my Ant project is
> >>>> stored
> >>>> in and not the root folder of my computer? In which case how can I
> >>>> get
> >>>> it to point to the computers root directory? I thought starting
> >>>> with /
> >>>> would do that.
> >>>
> >>>
> >>> Your vision is quite true . The / symbol represents the root folder
> >>> in
> >>> Unix,
> >>> so ant should find the folder you are passing as an argument.
> >>>
> >>> Alternatively I could be defining the compilerarg statement wrongly.
> >>>> Firstly I have placed it within the <javac> tags. Is this the
> >>>> correct
> >>>> location? Also, is the compilerarg statement below the correct way
> >>>> to
> >>>> carry out the javac command line statement below it?
> >>>>
> >>>> <compilerarg line="-classpath /System/Library/Java"/>
> >>>
> >>>
> >>> this should be
> >>> <compilerarg value="-classpath /System/Library/Java/"/>
> >>>
> >>> javac -classpath /System/Library/Java:. MyProgram.java
> >>>>
> >>>> Thanks.
> >>>>
> >>>> Yes you are right that this fragment is wrong. First of all to
> >>>> ensure
> >>>> you
> >>> have your tasks in your classpath use:
> >>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> >>> <classpath>
> >>> <pathelement location="ANT_HOME/lib/ant-contrib.jar"/>
> >>> </classpath>
> >>> </taskdef>
> >>> as "net/sf/antcontrib/antcontrib.properties" describes every
> >>> additional task
> >>> and it is placed in your ant-contrib.jar so you have to add it like a
> >>> classpath. Second your javac task should look something like this:
> >>> <javac srcdir="SRC" destdir="DEST">
> >>> <compilerarg value="-classpath"/>
> >>> <compilerarg value="DIRECTORY/"/>
> >>> </javac>
> >>> You can't just place <compilerarg value="-classpath DIRECTORY"/>
> >>> because
> >>> there is a blank space between -classpath and DIRECTORY and it will
> >>> get
> >>> quoted. So you put the two strings as separate arguments. I tested it
> >>> on my
> >>> machine and it worked fine. Although I was a liitle bit confused
> >>> because I
> >>> have never used compilerarg to pass a directory to the classpath. I
> >>> most
> >>> oftently use a
> >>> <path id="compile.cp">
> >>> <pathelement location="DIRECTORY/"/>
> >>> </path>
> >>> ---------------------
> >>> <javac srcdir="" destdir="" classpathref="compil.cp"/>
> >>> structure and it always wokes fine. Anyway I hope I helped.
> >>>
> >>> P.S Dont forget to exclude any package directories and to place a /
> >>> after
> >>> DIRECTORY.
> >>> --
> >>> Regards, Petar!
> >>
> >>
> >> Many thanks for all your help Petar. Sadly it still won't work. I
> >> know for a fact my directory is correct because it works when I
> >> compile
> >> and run the program from the command line. But from within my IDE
> >> Xcode I still get the class not found error. I have copied my entire
> >> build.xml file below. As you can see its laid out exactly as you
> >> suggested. Unless there is some error in another part of the file
> >> preventing this from working, I can only assume the problem lies with
> >> the IDE, and if I can't find out the problem I will have to look for
> >> an
> >> alternative.
> >>
> >>
> >> <?xml version="1.0" encoding="UTF-8"?>
> >> <project name="MyProgram" default="jar" basedir=".">
> >> <property name="src" location="src"/>
> >> <property name="bin" location="bin"/>
> >> <property name="lib" location="lib"/>
> >> <property name="dist" location="dist"/>
> >> <property name="jarfile"
> >> location="${dist}/${ant.project.name <http://ant.project.name> <
> http://ant.project.name>}.jar"/>
> >> <property name="compile.debug" value="true"/>
> >>
> >> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> >> <classpath>
> >> <pathelement location="/Developer/Java/Ant/lib/ant-contrib-0.6.jar"
> >> />
> >> </classpath>
> >> </taskdef>
> >>
> >> <fileset id="lib.jars" dir="${lib}">
> >> <include name="**/*.jar"/>
> >> </fileset>
> >>
> >> <path id="lib.path">
> >> <fileset refid="lib.jars"/>
> >> </path>
> >>
> >> <target name="compile" description="Compile code">
> >> <mkdir dir="${bin}"/>
> >> <mkdir dir="${lib}"/>
> >> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> >> classpathref="lib.path" debug="${compile.debug}">
> >> <compilerarg value="-classpath"/>
> >> <compilerarg value="/System/Library/Java/"/>
> >> </javac>
> >> </target>
> >>
> >> <target name="jar" depends="compile" description="Build jar">
> >> <mkdir dir="${dist}"/>
> >> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
> >> <!-- Merge library jars into final jar file -->
> >> <zipgroupfileset refid="lib.jars"/>
> >> </jar>
> >> </target>
> >>
> >> <target name="run" depends="jar" description="Run jar file">
> >> <java jar="${jarfile}" fork="yes" failonerror="true"/>
> >> </target>
> >>
> >> <target name="clean" description="Remove build and dist
> >> directories">
> >> <delete dir="${bin}"/>
> >> <delete dir="${dist}"/>
> >> </target>
> >> </project>
> >
> >
> > I am in a hurry right now so I will look further on your problem
> > tommorow
> > morning. Meanwhile you may try to test your application via console
> > instead
> > of in your IDE. If it works then you should add your jars in the
> > classpath
> > of your project. Also the problem may have been caused by not
> > inserting the
> > jars in the right place. Many IDEs have their own ANT_HOME. Elcipse's
> > is in
> > plugins/ant-1.6/. Try to run ant from the command line, and also it
> > would be
> > useful if you supply the stackTrace. We don't know which class isn't
> > found.
> > Right?
> > Hope that helps...
> >
> > --
> > Regards, Petar!
> >
> 
> Thanks Petar. I tried running ant from the command line and replied to
> this mail with the results shortly before you sent your reply. If you
> haven't yet seen it, it was just to say that I got the same problem
> doing it that way.
> 
> I think the jar is in the right place. Xcode allows you to modify the
> path where it searches for the ant installation and this is currently
> pointing to the correct place where I copied the file. Also, before I
> was referring to it wrongly and the project wouldn't compile saying it
> couldn't find compilerargs. When I fixed this it compiled OK. So I'm
> pretty sure its finding the compilerarg task OK.
> 
> As for the error I get its this:
> 
> Exception in thread "main" java.lang.NoClassDefFoundError:
> com/apple/cocoa/application/NSSpeechSynthesizer
> at SpeechSynthesiser.<init>(SpeechSynthesiser.java:11)
> at Game.<init>(Game.java:35)
> 
> The package its referring to is the Apple Cocoa speech synthesizer
> package. This is found on Macs in the folder /System/Library/Java
> which is the path I am pointing too. Like I said earlier if I use
> javac from the command line and not ant it picks this up OK. So I'm
> pretty certain the error is somewhere in my build.xml file. As it was
> system generated (minus the few additions I've made to try and fix
> this) I'm not sure if its 100% correct.



First of all I want to say that in my opinion your code looks fine. I am a 
little bit astonished by the part:
 <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
classpathref="lib.path" debug="${compile.debug}">
<compilerarg value="-classpath"/>
<compilerarg value="/System/Library/Java/"/>
</javac>
Maybe, I am not quite sure, so maybe there is a problem when using 
classpathref and <compilerarg value="-classpath"/>. I don't know whether 
some kind of confrontation could arise. Let me suggest you something. You 
have a
<path id="lib.path">
<fileset refid="lib.jars"/>
</path>
defined. Why don't you just add your folder to this path and then call 
classpathref="lib.path" in your javac task. Something like this should work:
<path id="lib.path">
<fileset refid="lib.jars"/>
<fileset dir="/System/Library/Java">
<include name="**/*.*"/>
</fileset>
</path>
Also tell me does your code now compile and breaks down during execution or 
you can't compile it at all?
-- 
Regards, Petar!

Re: Referencing External .class Files In Classpath

Posted by Stephen Morrison <s....@gmail.com>.
On 25 Aug 2005, at 15:41, Petar Tahchiev wrote:

> On 25/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>
>>
>> On 25 Aug 2005, at 07:07, Petar Tahchiev wrote:
>>
>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>
>>>>
>>>> On 24 Aug 2005, at 16:56, Petar Tahchiev wrote:
>>>>
>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>>>
>>>>>>
>>>>>> On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:
>>>>>>
>>>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I'm trying to build an Ant project that uses some Apple Cocoa
>>>>>>>>>> classes.
>>>>>>>>>> These are stored as .class files and not as jars. They reside
>>>>>>>>>> in a
>>>>>>>>>> completely different folder to my project. I can compile and 
>>>>>>>>>> run
>>>>>>>>>> my
>>>>>>>>>> program by referencing these from the command line as follows:
>>>>>>>>>>
>>>>>>>>>> javac -classpath /System/Library/Java:. MyProgram.java
>>>>>>>>>>
>>>>>>>>>> java -classpath /System/Library/Java:. MyProgram
>>>>>>>>>>
>>>>>>>>>> Is there a way I can replicate this functionality using Ant 
>>>>>>>>>> and
>>>>>>>>>> add
>>>>>>>>>> the
>>>>>>>>>> directory (System/Library/Java) to the classpath?
>>>>>>>>>>
>>>>>>>>>> I've tried solutions from the Ant documentation and the 
>>>>>>>>>> archives
>>>>>>>>>> of
>>>>>>>>>> this list but haven't been able to get anything to work yet.
>>>>>>>>>>
>>>>>>>>>> Thanks in advance,
>>>>>>>>>> Steve.
>>>>>>>>>>
>>>>>>>>> You can always use the <compilerarg> task to pass arguments to
>>>>>>>>> the
>>>>>>>>> compiler,
>>>>>>>>> but rather why don't you try
>>>>>>>>> <path id="compile.cp">
>>>>>>>>> <fileset dir="YOUR DIR">
>>>>>>>>> <include name=""/>
>>>>>>>>> </fileset>
>>>>>>>>> </path>
>>>>>>>>> and later on call the classpath using <javac srcdir="" 
>>>>>>>>> destdir=""
>>>>>>>>> classpathref="compile.cp"/>
>>>>>>>>> Or just use <classpath>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Regards, Petar!
>>>>>>>>
>>>>>>>> I tried the compilerarg task but got the error "Could not create
>>>>>>>> the
>>>>>>>> task or type of task: conpilerarg". I declared this as
>>>>>>>> <compilerarg
>>>>>>>> line="-classpath /System/Library/Java/"/>.
>>>>>>>>
>>>>>>>> I also tried the other methods you listed but I still got the
>>>>>>>> class
>>>>>>>> not
>>>>>>>> found error. My build.xml file was generated for my by my IDE
>>>>>>>> Xcode
>>>>>>>> and currently looks like this. Sorry if I am missing something
>>>>>>>> obvious
>>>>>>>> but I am totally new to Ant.
>>>>>>>>
>>>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>>>> <project name="MyGame" default="jar" basedir=".">
>>>>>>>> <property name="src" location="src"/>
>>>>>>>> <property name="bin" location="bin"/>
>>>>>>>> <property name="lib" location="lib"/>
>>>>>>>> <property name="dist" location="dist"/>
>>>>>>>> <property name="jarfile"
>>>>>>>> location="${dist}/${ant.project.name <http://ant.project.name> <
>> http://ant.project.name> <
>>>> http://ant.project.name> <
>>>>>> http://ant.project.name>}.jar"/>
>>>>>>>> <property name="compile.debug" value="true"/>
>>>>>>>>
>>>>>>>> <fileset id="lib.jars" dir="${lib}">
>>>>>>>> <include name="**/*.jar"/>
>>>>>>>> </fileset>
>>>>>>>>
>>>>>>>> <path id="lib.path">
>>>>>>>> <fileset refid="lib.jars"/>
>>>>>>>> </path>
>>>>>>>>
>>>>>>>> <target name="compile" description="Compile code">
>>>>>>>> <mkdir dir="${bin}"/>
>>>>>>>> <mkdir dir="${lib}"/>
>>>>>>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
>>>>>>>> classpathref="lib.path" debug="${compile.debug}">
>>>>>>>> </javac>
>>>>>>>> </target>
>>>>>>>>
>>>>>>>> <target name="jar" depends="compile" description="Build jar">
>>>>>>>> <mkdir dir="${dist}"/>
>>>>>>>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
>>>>>>>> <!-- Merge library jars into final jar file -->
>>>>>>>> <zipgroupfileset refid="lib.jars"/>
>>>>>>>> </jar>
>>>>>>>> </target>
>>>>>>>>
>>>>>>>> <target name="run" depends="jar" description="Run jar file">
>>>>>>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
>>>>>>>> </target>
>>>>>>>>
>>>>>>>> <target name="clean" description="Remove build and dist
>>>>>>>> directories">
>>>>>>>> <delete dir="${bin}"/>
>>>>>>>> <delete dir="${dist}"/>
>>>>>>>> </target>
>>>>>>>> </project>
>>>>>>>>
>>>>>>>> My fault. I forgot to tell you that compilerarg is an optioanl
>>>>>>>> ant-contrib
>>>>>>> task and if you want to use it you have to download the tasks 
>>>>>>> from
>>>>>>> the
>>>>>>> ant-contrib site: http://ant-contrib.sourceforge.net/, also an
>>>>>>> installation
>>>>>>> howto is available there. But instead try this
>>>>>>> <javac .........>
>>>>>>> <classpath>
>>>>>>> <pathelement location="yourdir"/>
>>>>>>> </classpath>
>>>>>>> </javac>
>>>>>>>
>>>>>>> --
>>>>>>> Regards, Petar!
>>>>>>
>>>>>>
>>>>>> Thanks for your help so far but I still can't get it to work.
>>>>>> Firstly
>>>>>> I tried the additions to javac that you outlined above but I still
>>>>>> got
>>>>>> the class not found error. I then tried downloading the 
>>>>>> ant-contrib
>>>>>> task. I have referenced this as outlined in the documentation and
>>>>>> copied the jar file to my lib directory of my project. But I still
>>>>>> get
>>>>>> the could not create task error. Below is the code I added to my
>>>>>> build.xml file. Is this correct?
>>>>>>
>>>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>>>>>> <classpath>
>>>>>> <pathelement location="./lib/ant-contrib.jar" />
>>>>>> </classpath>
>>>>>> </taskdef>
>>>>>>
>>>>>> <compilerarg line="-classpath /System/Library/Java"/>
>>>>>>
>>>>>> I suppose that the problem is that you may have not copied the
>>>>> ant-contrib-version.jar to your $ANT_HOME/lib folder. I am still
>>>>> curious
>>>>> that
>>>>> <javac srcdir="" destdir="">
>>>>> <classpath>
>>>>> <pathelement location="yourdir"/>
>>>>> </claspath>
>>>>> </javac>
>>>>> doesn't work. Remember that you must ignore the package folders 
>>>>> when
>>>>> pointing "yourdir". Point only the top-root forlder.
>>>>>
>>>>> --
>>>>> Regards, Petar!
>>>>
>>>> You were right I hadn't copied the file to the $ANT_HOME/lib folder.
>>>> But after doing that it now runs, but still gives the class not 
>>>> found
>>>> error. There are 2 possible problems as I can see it. Either I'm
>>>> referring to the directory wrongly, or else I haven't defined the
>>>> compilerarg statement correctly.
>>>>
>>>> When I refer to my directory which is /System/Library/Java this is 
>>>> the
>>>> reference from the root folder on my hard drive, and is the top root
>>>> folder of the package I want to use. Could it be that Ant is looking
>>>> for that folder from within the current folder my Ant project is
>>>> stored
>>>> in and not the root folder of my computer? In which case how can I 
>>>> get
>>>> it to point to the computers root directory? I thought starting 
>>>> with /
>>>> would do that.
>>>
>>>
>>> Your vision is quite true . The / symbol represents the root folder 
>>> in
>>> Unix,
>>> so ant should find the folder you are passing as an argument.
>>>
>>> Alternatively I could be defining the compilerarg statement wrongly.
>>>> Firstly I have placed it within the <javac> tags. Is this the 
>>>> correct
>>>> location? Also, is the compilerarg statement below the correct way 
>>>> to
>>>> carry out the javac command line statement below it?
>>>>
>>>> <compilerarg line="-classpath /System/Library/Java"/>
>>>
>>>
>>> this should be
>>> <compilerarg value="-classpath /System/Library/Java/"/>
>>>
>>> javac -classpath /System/Library/Java:. MyProgram.java
>>>>
>>>> Thanks.
>>>>
>>>> Yes you are right that this fragment is wrong. First of all to 
>>>> ensure
>>>> you
>>> have your tasks in your classpath use:
>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>>> <classpath>
>>> <pathelement location="ANT_HOME/lib/ant-contrib.jar"/>
>>> </classpath>
>>> </taskdef>
>>> as "net/sf/antcontrib/antcontrib.properties" describes every
>>> additional task
>>> and it is placed in your ant-contrib.jar so you have to add it like a
>>> classpath. Second your javac task should look something like this:
>>> <javac srcdir="SRC" destdir="DEST">
>>> <compilerarg value="-classpath"/>
>>> <compilerarg value="DIRECTORY/"/>
>>> </javac>
>>> You can't just place <compilerarg value="-classpath DIRECTORY"/>
>>> because
>>> there is a blank space between -classpath and DIRECTORY and it will 
>>> get
>>> quoted. So you put the two strings as separate arguments. I tested it
>>> on my
>>> machine and it worked fine. Although I was a liitle bit confused
>>> because I
>>> have never used compilerarg to pass a directory to the classpath. I
>>> most
>>> oftently use a
>>> <path id="compile.cp">
>>> <pathelement location="DIRECTORY/"/>
>>> </path>
>>> ---------------------
>>> <javac srcdir="" destdir="" classpathref="compil.cp"/>
>>> structure and it always wokes fine. Anyway I hope I helped.
>>>
>>> P.S Dont forget to exclude any package directories and to place a /
>>> after
>>> DIRECTORY.
>>> --
>>> Regards, Petar!
>>
>>
>> Many thanks for all your help Petar. Sadly it still won't work. I
>> know for a fact my directory is correct because it works when I 
>> compile
>> and run the program from the command line. But from within my IDE
>> Xcode I still get the class not found error. I have copied my entire
>> build.xml file below. As you can see its laid out exactly as you
>> suggested. Unless there is some error in another part of the file
>> preventing this from working, I can only assume the problem lies with
>> the IDE, and if I can't find out the problem I will have to look for 
>> an
>> alternative.
>>
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <project name="MyProgram" default="jar" basedir=".">
>> <property name="src" location="src"/>
>> <property name="bin" location="bin"/>
>> <property name="lib" location="lib"/>
>> <property name="dist" location="dist"/>
>> <property name="jarfile"
>> location="${dist}/${ant.project.name <http://ant.project.name>}.jar"/>
>> <property name="compile.debug" value="true"/>
>>
>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>> <classpath>
>> <pathelement location="/Developer/Java/Ant/lib/ant-contrib-0.6.jar"
>> />
>> </classpath>
>> </taskdef>
>>
>> <fileset id="lib.jars" dir="${lib}">
>> <include name="**/*.jar"/>
>> </fileset>
>>
>> <path id="lib.path">
>> <fileset refid="lib.jars"/>
>> </path>
>>
>> <target name="compile" description="Compile code">
>> <mkdir dir="${bin}"/>
>> <mkdir dir="${lib}"/>
>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
>> classpathref="lib.path" debug="${compile.debug}">
>> <compilerarg value="-classpath"/>
>> <compilerarg value="/System/Library/Java/"/>
>> </javac>
>> </target>
>>
>> <target name="jar" depends="compile" description="Build jar">
>> <mkdir dir="${dist}"/>
>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
>> <!-- Merge library jars into final jar file -->
>> <zipgroupfileset refid="lib.jars"/>
>> </jar>
>> </target>
>>
>> <target name="run" depends="jar" description="Run jar file">
>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
>> </target>
>>
>> <target name="clean" description="Remove build and dist
>> directories">
>> <delete dir="${bin}"/>
>> <delete dir="${dist}"/>
>> </target>
>> </project>
>
>
> I am in a hurry right now so I will look further on your problem 
> tommorow
> morning. Meanwhile you may try to test your application via console 
> instead
> of in your IDE. If it works then you should add your jars in the 
> classpath
> of your project. Also the problem may have been caused by not 
> inserting the
> jars in the right place. Many IDEs have their own ANT_HOME. Elcipse's 
> is in
> plugins/ant-1.6/. Try to run ant from the command line, and also it 
> would be
> useful if you supply the stackTrace. We don't know which class isn't 
> found.
> Right?
> Hope that helps...
>
> -- 
> Regards, Petar!
>

Thanks Petar.  I tried running ant from the command line and replied to 
this mail with the results shortly before you sent your reply.  If you 
haven't yet seen it, it was just to say that I got the same problem 
doing it that way.

I think the jar is in the right place.  Xcode allows you to modify the 
path where it searches for the ant installation and this is currently 
pointing to the correct place where I copied the file.  Also, before I 
was referring to it wrongly and the project wouldn't compile saying it 
couldn't find compilerargs.  When I fixed this it compiled OK.  So I'm 
pretty sure its finding the compilerarg task OK.

As for the error I get its this:

Exception in thread "main" java.lang.NoClassDefFoundError: 
com/apple/cocoa/application/NSSpeechSynthesizer
	at SpeechSynthesiser.<init>(SpeechSynthesiser.java:11)
	at Game.<init>(Game.java:35)

The package its referring to is the Apple Cocoa speech synthesizer 
package.  This is found on Macs in the folder /System/Library/Java 
which is the path I am pointing too.  Like I said earlier if I use 
javac from the command line and not ant it picks this up OK.  So I'm 
pretty certain the error is somewhere in my build.xml file.  As it was 
system generated (minus the few additions I've made to try and fix 
this) I'm not sure if its 100% correct.

Re: Referencing External .class Files In Classpath

Posted by Petar Tahchiev <pa...@gmail.com>.
On 25/08/05, Stephen Morrison <s....@gmail.com> wrote:
> 
> 
> On 25 Aug 2005, at 07:07, Petar Tahchiev wrote:
> 
> > On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>
> >>
> >> On 24 Aug 2005, at 16:56, Petar Tahchiev wrote:
> >>
> >>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>>>
> >>>>
> >>>> On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:
> >>>>
> >>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>>>>>
> >>>>>>
> >>>>>> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
> >>>>>>
> >>>>>>>>
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>> I'm trying to build an Ant project that uses some Apple Cocoa
> >>>>>>>> classes.
> >>>>>>>> These are stored as .class files and not as jars. They reside
> >>>>>>>> in a
> >>>>>>>> completely different folder to my project. I can compile and run
> >>>>>>>> my
> >>>>>>>> program by referencing these from the command line as follows:
> >>>>>>>>
> >>>>>>>> javac -classpath /System/Library/Java:. MyProgram.java
> >>>>>>>>
> >>>>>>>> java -classpath /System/Library/Java:. MyProgram
> >>>>>>>>
> >>>>>>>> Is there a way I can replicate this functionality using Ant and
> >>>>>>>> add
> >>>>>>>> the
> >>>>>>>> directory (System/Library/Java) to the classpath?
> >>>>>>>>
> >>>>>>>> I've tried solutions from the Ant documentation and the archives
> >>>>>>>> of
> >>>>>>>> this list but haven't been able to get anything to work yet.
> >>>>>>>>
> >>>>>>>> Thanks in advance,
> >>>>>>>> Steve.
> >>>>>>>>
> >>>>>>> You can always use the <compilerarg> task to pass arguments to
> >>>>>>> the
> >>>>>>> compiler,
> >>>>>>> but rather why don't you try
> >>>>>>> <path id="compile.cp">
> >>>>>>> <fileset dir="YOUR DIR">
> >>>>>>> <include name=""/>
> >>>>>>> </fileset>
> >>>>>>> </path>
> >>>>>>> and later on call the classpath using <javac srcdir="" destdir=""
> >>>>>>> classpathref="compile.cp"/>
> >>>>>>> Or just use <classpath>
> >>>>>>>
> >>>>>>> --
> >>>>>>> Regards, Petar!
> >>>>>>
> >>>>>> I tried the compilerarg task but got the error "Could not create
> >>>>>> the
> >>>>>> task or type of task: conpilerarg". I declared this as
> >>>>>> <compilerarg
> >>>>>> line="-classpath /System/Library/Java/"/>.
> >>>>>>
> >>>>>> I also tried the other methods you listed but I still got the
> >>>>>> class
> >>>>>> not
> >>>>>> found error. My build.xml file was generated for my by my IDE
> >>>>>> Xcode
> >>>>>> and currently looks like this. Sorry if I am missing something
> >>>>>> obvious
> >>>>>> but I am totally new to Ant.
> >>>>>>
> >>>>>> <?xml version="1.0" encoding="UTF-8"?>
> >>>>>> <project name="MyGame" default="jar" basedir=".">
> >>>>>> <property name="src" location="src"/>
> >>>>>> <property name="bin" location="bin"/>
> >>>>>> <property name="lib" location="lib"/>
> >>>>>> <property name="dist" location="dist"/>
> >>>>>> <property name="jarfile"
> >>>>>> location="${dist}/${ant.project.name <http://ant.project.name> <
> http://ant.project.name> <
> >> http://ant.project.name> <
> >>>> http://ant.project.name>}.jar"/>
> >>>>>> <property name="compile.debug" value="true"/>
> >>>>>>
> >>>>>> <fileset id="lib.jars" dir="${lib}">
> >>>>>> <include name="**/*.jar"/>
> >>>>>> </fileset>
> >>>>>>
> >>>>>> <path id="lib.path">
> >>>>>> <fileset refid="lib.jars"/>
> >>>>>> </path>
> >>>>>>
> >>>>>> <target name="compile" description="Compile code">
> >>>>>> <mkdir dir="${bin}"/>
> >>>>>> <mkdir dir="${lib}"/>
> >>>>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> >>>>>> classpathref="lib.path" debug="${compile.debug}">
> >>>>>> </javac>
> >>>>>> </target>
> >>>>>>
> >>>>>> <target name="jar" depends="compile" description="Build jar">
> >>>>>> <mkdir dir="${dist}"/>
> >>>>>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
> >>>>>> <!-- Merge library jars into final jar file -->
> >>>>>> <zipgroupfileset refid="lib.jars"/>
> >>>>>> </jar>
> >>>>>> </target>
> >>>>>>
> >>>>>> <target name="run" depends="jar" description="Run jar file">
> >>>>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
> >>>>>> </target>
> >>>>>>
> >>>>>> <target name="clean" description="Remove build and dist
> >>>>>> directories">
> >>>>>> <delete dir="${bin}"/>
> >>>>>> <delete dir="${dist}"/>
> >>>>>> </target>
> >>>>>> </project>
> >>>>>>
> >>>>>> My fault. I forgot to tell you that compilerarg is an optioanl
> >>>>>> ant-contrib
> >>>>> task and if you want to use it you have to download the tasks from
> >>>>> the
> >>>>> ant-contrib site: http://ant-contrib.sourceforge.net/, also an
> >>>>> installation
> >>>>> howto is available there. But instead try this
> >>>>> <javac .........>
> >>>>> <classpath>
> >>>>> <pathelement location="yourdir"/>
> >>>>> </classpath>
> >>>>> </javac>
> >>>>>
> >>>>> --
> >>>>> Regards, Petar!
> >>>>
> >>>>
> >>>> Thanks for your help so far but I still can't get it to work.
> >>>> Firstly
> >>>> I tried the additions to javac that you outlined above but I still
> >>>> got
> >>>> the class not found error. I then tried downloading the ant-contrib
> >>>> task. I have referenced this as outlined in the documentation and
> >>>> copied the jar file to my lib directory of my project. But I still
> >>>> get
> >>>> the could not create task error. Below is the code I added to my
> >>>> build.xml file. Is this correct?
> >>>>
> >>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> >>>> <classpath>
> >>>> <pathelement location="./lib/ant-contrib.jar" />
> >>>> </classpath>
> >>>> </taskdef>
> >>>>
> >>>> <compilerarg line="-classpath /System/Library/Java"/>
> >>>>
> >>>> I suppose that the problem is that you may have not copied the
> >>> ant-contrib-version.jar to your $ANT_HOME/lib folder. I am still
> >>> curious
> >>> that
> >>> <javac srcdir="" destdir="">
> >>> <classpath>
> >>> <pathelement location="yourdir"/>
> >>> </claspath>
> >>> </javac>
> >>> doesn't work. Remember that you must ignore the package folders when
> >>> pointing "yourdir". Point only the top-root forlder.
> >>>
> >>> --
> >>> Regards, Petar!
> >>
> >> You were right I hadn't copied the file to the $ANT_HOME/lib folder.
> >> But after doing that it now runs, but still gives the class not found
> >> error. There are 2 possible problems as I can see it. Either I'm
> >> referring to the directory wrongly, or else I haven't defined the
> >> compilerarg statement correctly.
> >>
> >> When I refer to my directory which is /System/Library/Java this is the
> >> reference from the root folder on my hard drive, and is the top root
> >> folder of the package I want to use. Could it be that Ant is looking
> >> for that folder from within the current folder my Ant project is
> >> stored
> >> in and not the root folder of my computer? In which case how can I get
> >> it to point to the computers root directory? I thought starting with /
> >> would do that.
> >
> >
> > Your vision is quite true . The / symbol represents the root folder in
> > Unix,
> > so ant should find the folder you are passing as an argument.
> >
> > Alternatively I could be defining the compilerarg statement wrongly.
> >> Firstly I have placed it within the <javac> tags. Is this the correct
> >> location? Also, is the compilerarg statement below the correct way to
> >> carry out the javac command line statement below it?
> >>
> >> <compilerarg line="-classpath /System/Library/Java"/>
> >
> >
> > this should be
> > <compilerarg value="-classpath /System/Library/Java/"/>
> >
> > javac -classpath /System/Library/Java:. MyProgram.java
> >>
> >> Thanks.
> >>
> >> Yes you are right that this fragment is wrong. First of all to ensure
> >> you
> > have your tasks in your classpath use:
> > <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> > <classpath>
> > <pathelement location="ANT_HOME/lib/ant-contrib.jar"/>
> > </classpath>
> > </taskdef>
> > as "net/sf/antcontrib/antcontrib.properties" describes every
> > additional task
> > and it is placed in your ant-contrib.jar so you have to add it like a
> > classpath. Second your javac task should look something like this:
> > <javac srcdir="SRC" destdir="DEST">
> > <compilerarg value="-classpath"/>
> > <compilerarg value="DIRECTORY/"/>
> > </javac>
> > You can't just place <compilerarg value="-classpath DIRECTORY"/>
> > because
> > there is a blank space between -classpath and DIRECTORY and it will get
> > quoted. So you put the two strings as separate arguments. I tested it
> > on my
> > machine and it worked fine. Although I was a liitle bit confused
> > because I
> > have never used compilerarg to pass a directory to the classpath. I
> > most
> > oftently use a
> > <path id="compile.cp">
> > <pathelement location="DIRECTORY/"/>
> > </path>
> > ---------------------
> > <javac srcdir="" destdir="" classpathref="compil.cp"/>
> > structure and it always wokes fine. Anyway I hope I helped.
> >
> > P.S Dont forget to exclude any package directories and to place a /
> > after
> > DIRECTORY.
> > --
> > Regards, Petar!
> 
> 
> Many thanks for all your help Petar. Sadly it still won't work. I
> know for a fact my directory is correct because it works when I compile
> and run the program from the command line. But from within my IDE
> Xcode I still get the class not found error. I have copied my entire
> build.xml file below. As you can see its laid out exactly as you
> suggested. Unless there is some error in another part of the file
> preventing this from working, I can only assume the problem lies with
> the IDE, and if I can't find out the problem I will have to look for an
> alternative.
> 
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <project name="MyProgram" default="jar" basedir=".">
> <property name="src" location="src"/>
> <property name="bin" location="bin"/>
> <property name="lib" location="lib"/>
> <property name="dist" location="dist"/>
> <property name="jarfile"
> location="${dist}/${ant.project.name <http://ant.project.name>}.jar"/>
> <property name="compile.debug" value="true"/>
> 
> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> <classpath>
> <pathelement location="/Developer/Java/Ant/lib/ant-contrib-0.6.jar"
> />
> </classpath>
> </taskdef>
> 
> <fileset id="lib.jars" dir="${lib}">
> <include name="**/*.jar"/>
> </fileset>
> 
> <path id="lib.path">
> <fileset refid="lib.jars"/>
> </path>
> 
> <target name="compile" description="Compile code">
> <mkdir dir="${bin}"/>
> <mkdir dir="${lib}"/>
> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> classpathref="lib.path" debug="${compile.debug}">
> <compilerarg value="-classpath"/>
> <compilerarg value="/System/Library/Java/"/>
> </javac>
> </target>
> 
> <target name="jar" depends="compile" description="Build jar">
> <mkdir dir="${dist}"/>
> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
> <!-- Merge library jars into final jar file -->
> <zipgroupfileset refid="lib.jars"/>
> </jar>
> </target>
> 
> <target name="run" depends="jar" description="Run jar file">
> <java jar="${jarfile}" fork="yes" failonerror="true"/>
> </target>
> 
> <target name="clean" description="Remove build and dist
> directories">
> <delete dir="${bin}"/>
> <delete dir="${dist}"/>
> </target>
> </project>


I am in a hurry right now so I will look further on your problem tommorow 
morning. Meanwhile you may try to test your application via console instead 
of in your IDE. If it works then you should add your jars in the classpath 
of your project. Also the problem may have been caused by not inserting the 
jars in the right place. Many IDEs have their own ANT_HOME. Elcipse's is in 
plugins/ant-1.6/. Try to run ant from the command line, and also it would be 
useful if you supply the stackTrace. We don't know which class isn't found. 
Right?
Hope that helps...

-- 
Regards, Petar!

Re: Referencing External .class Files In Classpath

Posted by Stephen Morrison <s....@gmail.com>.
On 25 Aug 2005, at 07:07, Petar Tahchiev wrote:

> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>
>>
>> On 24 Aug 2005, at 16:56, Petar Tahchiev wrote:
>>
>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>
>>>>
>>>> On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:
>>>>
>>>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>>>
>>>>>>
>>>>>> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
>>>>>>
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I'm trying to build an Ant project that uses some Apple Cocoa
>>>>>>>> classes.
>>>>>>>> These are stored as .class files and not as jars. They reside 
>>>>>>>> in a
>>>>>>>> completely different folder to my project. I can compile and run
>>>>>>>> my
>>>>>>>> program by referencing these from the command line as follows:
>>>>>>>>
>>>>>>>> javac -classpath /System/Library/Java:. MyProgram.java
>>>>>>>>
>>>>>>>> java -classpath /System/Library/Java:. MyProgram
>>>>>>>>
>>>>>>>> Is there a way I can replicate this functionality using Ant and
>>>>>>>> add
>>>>>>>> the
>>>>>>>> directory (System/Library/Java) to the classpath?
>>>>>>>>
>>>>>>>> I've tried solutions from the Ant documentation and the archives
>>>>>>>> of
>>>>>>>> this list but haven't been able to get anything to work yet.
>>>>>>>>
>>>>>>>> Thanks in advance,
>>>>>>>> Steve.
>>>>>>>>
>>>>>>> You can always use the <compilerarg> task to pass arguments to 
>>>>>>> the
>>>>>>> compiler,
>>>>>>> but rather why don't you try
>>>>>>> <path id="compile.cp">
>>>>>>> <fileset dir="YOUR DIR">
>>>>>>> <include name=""/>
>>>>>>> </fileset>
>>>>>>> </path>
>>>>>>> and later on call the classpath using <javac srcdir="" destdir=""
>>>>>>> classpathref="compile.cp"/>
>>>>>>> Or just use <classpath>
>>>>>>>
>>>>>>> --
>>>>>>> Regards, Petar!
>>>>>>
>>>>>> I tried the compilerarg task but got the error "Could not create 
>>>>>> the
>>>>>> task or type of task: conpilerarg". I declared this as 
>>>>>> <compilerarg
>>>>>> line="-classpath /System/Library/Java/"/>.
>>>>>>
>>>>>> I also tried the other methods you listed but I still got the 
>>>>>> class
>>>>>> not
>>>>>> found error. My build.xml file was generated for my by my IDE 
>>>>>> Xcode
>>>>>> and currently looks like this. Sorry if I am missing something
>>>>>> obvious
>>>>>> but I am totally new to Ant.
>>>>>>
>>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>>> <project name="MyGame" default="jar" basedir=".">
>>>>>> <property name="src" location="src"/>
>>>>>> <property name="bin" location="bin"/>
>>>>>> <property name="lib" location="lib"/>
>>>>>> <property name="dist" location="dist"/>
>>>>>> <property name="jarfile"
>>>>>> location="${dist}/${ant.project.name <http://ant.project.name> <
>> http://ant.project.name> <
>>>> http://ant.project.name>}.jar"/>
>>>>>> <property name="compile.debug" value="true"/>
>>>>>>
>>>>>> <fileset id="lib.jars" dir="${lib}">
>>>>>> <include name="**/*.jar"/>
>>>>>> </fileset>
>>>>>>
>>>>>> <path id="lib.path">
>>>>>> <fileset refid="lib.jars"/>
>>>>>> </path>
>>>>>>
>>>>>> <target name="compile" description="Compile code">
>>>>>> <mkdir dir="${bin}"/>
>>>>>> <mkdir dir="${lib}"/>
>>>>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
>>>>>> classpathref="lib.path" debug="${compile.debug}">
>>>>>> </javac>
>>>>>> </target>
>>>>>>
>>>>>> <target name="jar" depends="compile" description="Build jar">
>>>>>> <mkdir dir="${dist}"/>
>>>>>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
>>>>>> <!-- Merge library jars into final jar file -->
>>>>>> <zipgroupfileset refid="lib.jars"/>
>>>>>> </jar>
>>>>>> </target>
>>>>>>
>>>>>> <target name="run" depends="jar" description="Run jar file">
>>>>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
>>>>>> </target>
>>>>>>
>>>>>> <target name="clean" description="Remove build and dist
>>>>>> directories">
>>>>>> <delete dir="${bin}"/>
>>>>>> <delete dir="${dist}"/>
>>>>>> </target>
>>>>>> </project>
>>>>>>
>>>>>> My fault. I forgot to tell you that compilerarg is an optioanl
>>>>>> ant-contrib
>>>>> task and if you want to use it you have to download the tasks from
>>>>> the
>>>>> ant-contrib site: http://ant-contrib.sourceforge.net/, also an
>>>>> installation
>>>>> howto is available there. But instead try this
>>>>> <javac .........>
>>>>> <classpath>
>>>>> <pathelement location="yourdir"/>
>>>>> </classpath>
>>>>> </javac>
>>>>>
>>>>> --
>>>>> Regards, Petar!
>>>>
>>>>
>>>> Thanks for your help so far but I still can't get it to work. 
>>>> Firstly
>>>> I tried the additions to javac that you outlined above but I still 
>>>> got
>>>> the class not found error. I then tried downloading the ant-contrib
>>>> task. I have referenced this as outlined in the documentation and
>>>> copied the jar file to my lib directory of my project. But I still 
>>>> get
>>>> the could not create task error. Below is the code I added to my
>>>> build.xml file. Is this correct?
>>>>
>>>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>>>> <classpath>
>>>> <pathelement location="./lib/ant-contrib.jar" />
>>>> </classpath>
>>>> </taskdef>
>>>>
>>>> <compilerarg line="-classpath /System/Library/Java"/>
>>>>
>>>> I suppose that the problem is that you may have not copied the
>>> ant-contrib-version.jar to your $ANT_HOME/lib folder. I am still
>>> curious
>>> that
>>> <javac srcdir="" destdir="">
>>> <classpath>
>>> <pathelement location="yourdir"/>
>>> </claspath>
>>> </javac>
>>> doesn't work. Remember that you must ignore the package folders when
>>> pointing "yourdir". Point only the top-root forlder.
>>>
>>> --
>>> Regards, Petar!
>>
>> You were right I hadn't copied the file to the $ANT_HOME/lib folder.
>> But after doing that it now runs, but still gives the class not found
>> error. There are 2 possible problems as I can see it. Either I'm
>> referring to the directory wrongly, or else I haven't defined the
>> compilerarg statement correctly.
>>
>> When I refer to my directory which is /System/Library/Java this is the
>> reference from the root folder on my hard drive, and is the top root
>> folder of the package I want to use. Could it be that Ant is looking
>> for that folder from within the current folder my Ant project is 
>> stored
>> in and not the root folder of my computer? In which case how can I get
>> it to point to the computers root directory? I thought starting with /
>> would do that.
>
>
> Your vision is quite true . The / symbol represents the root folder in 
> Unix,
> so ant should find the folder you are passing as an argument.
>
> Alternatively I could be defining the compilerarg statement wrongly.
>> Firstly I have placed it within the <javac> tags. Is this the correct
>> location? Also, is the compilerarg statement below the correct way to
>> carry out the javac command line statement below it?
>>
>> <compilerarg line="-classpath /System/Library/Java"/>
>
>
> this should be
> <compilerarg value="-classpath /System/Library/Java/"/>
>
> javac -classpath /System/Library/Java:. MyProgram.java
>>
>> Thanks.
>>
>> Yes you are right that this fragment is wrong. First of all to ensure 
>> you
> have your tasks in your classpath use:
> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> <classpath>
> <pathelement location="ANT_HOME/lib/ant-contrib.jar"/>
> </classpath>
> </taskdef>
> as "net/sf/antcontrib/antcontrib.properties" describes every 
> additional task
> and it is placed in your ant-contrib.jar so you have to add it like a
> classpath. Second your javac task should look something like this:
> <javac srcdir="SRC" destdir="DEST">
> <compilerarg value="-classpath"/>
> <compilerarg value="DIRECTORY/"/>
> </javac>
> You can't just place <compilerarg value="-classpath DIRECTORY"/> 
> because
> there is a blank space between -classpath and DIRECTORY and it will get
> quoted. So you put the two strings as separate arguments. I tested it 
> on my
> machine and it worked fine. Although I was a liitle bit confused 
> because I
> have never used compilerarg to pass a directory to the classpath. I 
> most
> oftently use a
> <path id="compile.cp">
> <pathelement location="DIRECTORY/"/>
> </path>
> ---------------------
> <javac srcdir="" destdir="" classpathref="compil.cp"/>
> structure and it always wokes fine. Anyway I hope I helped.
>
> P.S Dont forget to exclude any package directories and to place a / 
> after
> DIRECTORY.
> -- 
> Regards, Petar!


Many thanks for all your help Petar.  Sadly it still won't work.  I 
know for a fact my directory is correct because it works when I compile 
and run the program from the command line.  But from within my IDE 
Xcode I still get the class not found error.  I have copied my entire 
build.xml file below.  As you can see its laid out exactly as you 
suggested.  Unless there is some error in another part of the file 
preventing this from working, I can only assume the problem lies with 
the IDE, and if I can't find out the problem I will have to look for an 
alternative.


<?xml version="1.0" encoding="UTF-8"?>
<project name="MyProgram" default="jar" basedir=".">
     <property name="src" location="src"/>
     <property name="bin" location="bin"/>
     <property name="lib" location="lib"/>
     <property name="dist" location="dist"/>
     <property name="jarfile" 
location="${dist}/${ant.project.name}.jar"/>
     <property name="compile.debug" value="true"/>

	<taskdef resource="net/sf/antcontrib/antcontrib.properties">
		<classpath>
			<pathelement location="/Developer/Java/Ant/lib/ant-contrib-0.6.jar" 
/>
		</classpath>
	</taskdef>

     <fileset id="lib.jars" dir="${lib}">
         <include name="**/*.jar"/>
     </fileset>

     <path id="lib.path">
         <fileset refid="lib.jars"/>
     </path>

     <target name="compile" description="Compile code">
         <mkdir dir="${bin}"/>
         <mkdir dir="${lib}"/>
         <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
                classpathref="lib.path" debug="${compile.debug}">
			   <compilerarg value="-classpath"/>
			   <compilerarg value="/System/Library/Java/"/>
         </javac>
     </target>

     <target name="jar" depends="compile" description="Build jar">
         <mkdir dir="${dist}"/>
         <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
             <!-- Merge library jars into final jar file -->
             <zipgroupfileset refid="lib.jars"/>
         </jar>
     </target>

     <target name="run" depends="jar" description="Run jar file">
         <java jar="${jarfile}" fork="yes" failonerror="true"/>
     </target>

     <target name="clean" description="Remove build and dist 
directories">
         <delete dir="${bin}"/>
         <delete dir="${dist}"/>
     </target>
</project>


Re: Referencing External .class Files In Classpath

Posted by Petar Tahchiev <pa...@gmail.com>.
On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> 
> 
> On 24 Aug 2005, at 16:56, Petar Tahchiev wrote:
> 
> > On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>
> >>
> >> On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:
> >>
> >>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>>>
> >>>>
> >>>> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
> >>>>
> >>>>>>
> >>>>>> Hi,
> >>>>>>
> >>>>>> I'm trying to build an Ant project that uses some Apple Cocoa
> >>>>>> classes.
> >>>>>> These are stored as .class files and not as jars. They reside in a
> >>>>>> completely different folder to my project. I can compile and run
> >>>>>> my
> >>>>>> program by referencing these from the command line as follows:
> >>>>>>
> >>>>>> javac -classpath /System/Library/Java:. MyProgram.java
> >>>>>>
> >>>>>> java -classpath /System/Library/Java:. MyProgram
> >>>>>>
> >>>>>> Is there a way I can replicate this functionality using Ant and
> >>>>>> add
> >>>>>> the
> >>>>>> directory (System/Library/Java) to the classpath?
> >>>>>>
> >>>>>> I've tried solutions from the Ant documentation and the archives
> >>>>>> of
> >>>>>> this list but haven't been able to get anything to work yet.
> >>>>>>
> >>>>>> Thanks in advance,
> >>>>>> Steve.
> >>>>>>
> >>>>> You can always use the <compilerarg> task to pass arguments to the
> >>>>> compiler,
> >>>>> but rather why don't you try
> >>>>> <path id="compile.cp">
> >>>>> <fileset dir="YOUR DIR">
> >>>>> <include name=""/>
> >>>>> </fileset>
> >>>>> </path>
> >>>>> and later on call the classpath using <javac srcdir="" destdir=""
> >>>>> classpathref="compile.cp"/>
> >>>>> Or just use <classpath>
> >>>>>
> >>>>> --
> >>>>> Regards, Petar!
> >>>>
> >>>> I tried the compilerarg task but got the error "Could not create the
> >>>> task or type of task: conpilerarg". I declared this as <compilerarg
> >>>> line="-classpath /System/Library/Java/"/>.
> >>>>
> >>>> I also tried the other methods you listed but I still got the class
> >>>> not
> >>>> found error. My build.xml file was generated for my by my IDE Xcode
> >>>> and currently looks like this. Sorry if I am missing something
> >>>> obvious
> >>>> but I am totally new to Ant.
> >>>>
> >>>> <?xml version="1.0" encoding="UTF-8"?>
> >>>> <project name="MyGame" default="jar" basedir=".">
> >>>> <property name="src" location="src"/>
> >>>> <property name="bin" location="bin"/>
> >>>> <property name="lib" location="lib"/>
> >>>> <property name="dist" location="dist"/>
> >>>> <property name="jarfile"
> >>>> location="${dist}/${ant.project.name <http://ant.project.name> <
> http://ant.project.name> <
> >> http://ant.project.name>}.jar"/>
> >>>> <property name="compile.debug" value="true"/>
> >>>>
> >>>> <fileset id="lib.jars" dir="${lib}">
> >>>> <include name="**/*.jar"/>
> >>>> </fileset>
> >>>>
> >>>> <path id="lib.path">
> >>>> <fileset refid="lib.jars"/>
> >>>> </path>
> >>>>
> >>>> <target name="compile" description="Compile code">
> >>>> <mkdir dir="${bin}"/>
> >>>> <mkdir dir="${lib}"/>
> >>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> >>>> classpathref="lib.path" debug="${compile.debug}">
> >>>> </javac>
> >>>> </target>
> >>>>
> >>>> <target name="jar" depends="compile" description="Build jar">
> >>>> <mkdir dir="${dist}"/>
> >>>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
> >>>> <!-- Merge library jars into final jar file -->
> >>>> <zipgroupfileset refid="lib.jars"/>
> >>>> </jar>
> >>>> </target>
> >>>>
> >>>> <target name="run" depends="jar" description="Run jar file">
> >>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
> >>>> </target>
> >>>>
> >>>> <target name="clean" description="Remove build and dist
> >>>> directories">
> >>>> <delete dir="${bin}"/>
> >>>> <delete dir="${dist}"/>
> >>>> </target>
> >>>> </project>
> >>>>
> >>>> My fault. I forgot to tell you that compilerarg is an optioanl
> >>>> ant-contrib
> >>> task and if you want to use it you have to download the tasks from
> >>> the
> >>> ant-contrib site: http://ant-contrib.sourceforge.net/, also an
> >>> installation
> >>> howto is available there. But instead try this
> >>> <javac .........>
> >>> <classpath>
> >>> <pathelement location="yourdir"/>
> >>> </classpath>
> >>> </javac>
> >>>
> >>> --
> >>> Regards, Petar!
> >>
> >>
> >> Thanks for your help so far but I still can't get it to work. Firstly
> >> I tried the additions to javac that you outlined above but I still got
> >> the class not found error. I then tried downloading the ant-contrib
> >> task. I have referenced this as outlined in the documentation and
> >> copied the jar file to my lib directory of my project. But I still get
> >> the could not create task error. Below is the code I added to my
> >> build.xml file. Is this correct?
> >>
> >> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> >> <classpath>
> >> <pathelement location="./lib/ant-contrib.jar" />
> >> </classpath>
> >> </taskdef>
> >>
> >> <compilerarg line="-classpath /System/Library/Java"/>
> >>
> >> I suppose that the problem is that you may have not copied the
> > ant-contrib-version.jar to your $ANT_HOME/lib folder. I am still
> > curious
> > that
> > <javac srcdir="" destdir="">
> > <classpath>
> > <pathelement location="yourdir"/>
> > </claspath>
> > </javac>
> > doesn't work. Remember that you must ignore the package folders when
> > pointing "yourdir". Point only the top-root forlder.
> >
> > --
> > Regards, Petar!
> 
> You were right I hadn't copied the file to the $ANT_HOME/lib folder.
> But after doing that it now runs, but still gives the class not found
> error. There are 2 possible problems as I can see it. Either I'm
> referring to the directory wrongly, or else I haven't defined the
> compilerarg statement correctly.
> 
> When I refer to my directory which is /System/Library/Java this is the
> reference from the root folder on my hard drive, and is the top root
> folder of the package I want to use. Could it be that Ant is looking
> for that folder from within the current folder my Ant project is stored
> in and not the root folder of my computer? In which case how can I get
> it to point to the computers root directory? I thought starting with /
> would do that.


Your vision is quite true . The / symbol represents the root folder in Unix, 
so ant should find the folder you are passing as an argument.

Alternatively I could be defining the compilerarg statement wrongly.
> Firstly I have placed it within the <javac> tags. Is this the correct
> location? Also, is the compilerarg statement below the correct way to
> carry out the javac command line statement below it?
> 
> <compilerarg line="-classpath /System/Library/Java"/>


this should be 
<compilerarg value="-classpath /System/Library/Java/"/>

javac -classpath /System/Library/Java:. MyProgram.java
> 
> Thanks.
> 
> Yes you are right that this fragment is wrong. First of all to ensure you 
have your tasks in your classpath use:
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="ANT_HOME/lib/ant-contrib.jar"/>
</classpath>
</taskdef>
as "net/sf/antcontrib/antcontrib.properties" describes every additional task 
and it is placed in your ant-contrib.jar so you have to add it like a 
classpath. Second your javac task should look something like this:
<javac srcdir="SRC" destdir="DEST">
<compilerarg value="-classpath"/> 
<compilerarg value="DIRECTORY/"/>
</javac>
You can't just place <compilerarg value="-classpath DIRECTORY"/> because 
there is a blank space between -classpath and DIRECTORY and it will get 
quoted. So you put the two strings as separate arguments. I tested it on my 
machine and it worked fine. Although I was a liitle bit confused because I 
have never used compilerarg to pass a directory to the classpath. I most 
oftently use a 
<path id="compile.cp">
<pathelement location="DIRECTORY/"/>
</path>
---------------------
<javac srcdir="" destdir="" classpathref="compil.cp"/>
structure and it always wokes fine. Anyway I hope I helped.

P.S Dont forget to exclude any package directories and to place a / after 
DIRECTORY.
-- 
Regards, Petar!

Re: Referencing External .class Files In Classpath

Posted by Stephen Morrison <s....@gmail.com>.
On 24 Aug 2005, at 16:56, Petar Tahchiev wrote:

> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>
>>
>> On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:
>>
>>> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>>>
>>>>
>>>> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I'm trying to build an Ant project that uses some Apple Cocoa
>>>>>> classes.
>>>>>> These are stored as .class files and not as jars. They reside in a
>>>>>> completely different folder to my project. I can compile and run 
>>>>>> my
>>>>>> program by referencing these from the command line as follows:
>>>>>>
>>>>>> javac -classpath /System/Library/Java:. MyProgram.java
>>>>>>
>>>>>> java -classpath /System/Library/Java:. MyProgram
>>>>>>
>>>>>> Is there a way I can replicate this functionality using Ant and 
>>>>>> add
>>>>>> the
>>>>>> directory (System/Library/Java) to the classpath?
>>>>>>
>>>>>> I've tried solutions from the Ant documentation and the archives 
>>>>>> of
>>>>>> this list but haven't been able to get anything to work yet.
>>>>>>
>>>>>> Thanks in advance,
>>>>>> Steve.
>>>>>>
>>>>> You can always use the <compilerarg> task to pass arguments to the
>>>>> compiler,
>>>>> but rather why don't you try
>>>>> <path id="compile.cp">
>>>>> <fileset dir="YOUR DIR">
>>>>> <include name=""/>
>>>>> </fileset>
>>>>> </path>
>>>>> and later on call the classpath using <javac srcdir="" destdir=""
>>>>> classpathref="compile.cp"/>
>>>>> Or just use <classpath>
>>>>>
>>>>> --
>>>>> Regards, Petar!
>>>>
>>>> I tried the compilerarg task but got the error "Could not create the
>>>> task or type of task: conpilerarg". I declared this as <compilerarg
>>>> line="-classpath /System/Library/Java/"/>.
>>>>
>>>> I also tried the other methods you listed but I still got the class
>>>> not
>>>> found error. My build.xml file was generated for my by my IDE Xcode
>>>> and currently looks like this. Sorry if I am missing something 
>>>> obvious
>>>> but I am totally new to Ant.
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <project name="MyGame" default="jar" basedir=".">
>>>> <property name="src" location="src"/>
>>>> <property name="bin" location="bin"/>
>>>> <property name="lib" location="lib"/>
>>>> <property name="dist" location="dist"/>
>>>> <property name="jarfile"
>>>> location="${dist}/${ant.project.name <http://ant.project.name> <
>> http://ant.project.name>}.jar"/>
>>>> <property name="compile.debug" value="true"/>
>>>>
>>>> <fileset id="lib.jars" dir="${lib}">
>>>> <include name="**/*.jar"/>
>>>> </fileset>
>>>>
>>>> <path id="lib.path">
>>>> <fileset refid="lib.jars"/>
>>>> </path>
>>>>
>>>> <target name="compile" description="Compile code">
>>>> <mkdir dir="${bin}"/>
>>>> <mkdir dir="${lib}"/>
>>>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
>>>> classpathref="lib.path" debug="${compile.debug}">
>>>> </javac>
>>>> </target>
>>>>
>>>> <target name="jar" depends="compile" description="Build jar">
>>>> <mkdir dir="${dist}"/>
>>>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
>>>> <!-- Merge library jars into final jar file -->
>>>> <zipgroupfileset refid="lib.jars"/>
>>>> </jar>
>>>> </target>
>>>>
>>>> <target name="run" depends="jar" description="Run jar file">
>>>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
>>>> </target>
>>>>
>>>> <target name="clean" description="Remove build and dist
>>>> directories">
>>>> <delete dir="${bin}"/>
>>>> <delete dir="${dist}"/>
>>>> </target>
>>>> </project>
>>>>
>>>> My fault. I forgot to tell you that compilerarg is an optioanl
>>>> ant-contrib
>>> task and if you want to use it you have to download the tasks from 
>>> the
>>> ant-contrib site: http://ant-contrib.sourceforge.net/, also an
>>> installation
>>> howto is available there. But instead try this
>>> <javac .........>
>>> <classpath>
>>> <pathelement location="yourdir"/>
>>> </classpath>
>>> </javac>
>>>
>>> --
>>> Regards, Petar!
>>
>>
>> Thanks for your help so far but I still can't get it to work. Firstly
>> I tried the additions to javac that you outlined above but I still got
>> the class not found error. I then tried downloading the ant-contrib
>> task. I have referenced this as outlined in the documentation and
>> copied the jar file to my lib directory of my project. But I still get
>> the could not create task error. Below is the code I added to my
>> build.xml file. Is this correct?
>>
>> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
>> <classpath>
>> <pathelement location="./lib/ant-contrib.jar" />
>> </classpath>
>> </taskdef>
>>
>> <compilerarg line="-classpath /System/Library/Java"/>
>>
>> I suppose that the problem is that you may have not copied the
> ant-contrib-version.jar to your $ANT_HOME/lib folder. I am still 
> curious
> that
> <javac srcdir="" destdir="">
> <classpath>
> <pathelement location="yourdir"/>
> </claspath>
> </javac>
> doesn't work. Remember that you must ignore the package folders when
> pointing "yourdir". Point only the top-root forlder.
>
> -- 
> Regards, Petar!

You were right I hadn't copied the file to the $ANT_HOME/lib folder.  
But after doing that it now runs, but still gives the class not found 
error.  There are 2 possible problems as I can see it.  Either I'm 
referring to the directory wrongly, or else I haven't defined the 
compilerarg statement correctly.

When I refer to my directory which is /System/Library/Java this is the 
reference from the root folder on my hard drive, and is the top root 
folder of the package I want to use.  Could it be that Ant is looking 
for that folder from within the current folder my Ant project is stored 
in and not the root folder of my computer?  In which case how can I get 
it to point to the computers root directory?  I thought starting with / 
would do that.

Alternatively I could be defining the compilerarg statement wrongly.  
Firstly I have placed it within the <javac> tags.  Is this the correct 
location?  Also, is the compilerarg statement below the correct way to 
carry out the javac command line statement below it?

<compilerarg line="-classpath /System/Library/Java"/>

javac -classpath /System/Library/Java:. MyProgram.java

Thanks.

Re: Referencing External .class Files In Classpath

Posted by Petar Tahchiev <pa...@gmail.com>.
On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> 
> 
> On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:
> 
> > On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> >>
> >>
> >> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
> >>
> >>>>
> >>>> Hi,
> >>>>
> >>>> I'm trying to build an Ant project that uses some Apple Cocoa
> >>>> classes.
> >>>> These are stored as .class files and not as jars. They reside in a
> >>>> completely different folder to my project. I can compile and run my
> >>>> program by referencing these from the command line as follows:
> >>>>
> >>>> javac -classpath /System/Library/Java:. MyProgram.java
> >>>>
> >>>> java -classpath /System/Library/Java:. MyProgram
> >>>>
> >>>> Is there a way I can replicate this functionality using Ant and add
> >>>> the
> >>>> directory (System/Library/Java) to the classpath?
> >>>>
> >>>> I've tried solutions from the Ant documentation and the archives of
> >>>> this list but haven't been able to get anything to work yet.
> >>>>
> >>>> Thanks in advance,
> >>>> Steve.
> >>>>
> >>> You can always use the <compilerarg> task to pass arguments to the
> >>> compiler,
> >>> but rather why don't you try
> >>> <path id="compile.cp">
> >>> <fileset dir="YOUR DIR">
> >>> <include name=""/>
> >>> </fileset>
> >>> </path>
> >>> and later on call the classpath using <javac srcdir="" destdir=""
> >>> classpathref="compile.cp"/>
> >>> Or just use <classpath>
> >>>
> >>> --
> >>> Regards, Petar!
> >>
> >> I tried the compilerarg task but got the error "Could not create the
> >> task or type of task: conpilerarg". I declared this as <compilerarg
> >> line="-classpath /System/Library/Java/"/>.
> >>
> >> I also tried the other methods you listed but I still got the class
> >> not
> >> found error. My build.xml file was generated for my by my IDE Xcode
> >> and currently looks like this. Sorry if I am missing something obvious
> >> but I am totally new to Ant.
> >>
> >> <?xml version="1.0" encoding="UTF-8"?>
> >> <project name="MyGame" default="jar" basedir=".">
> >> <property name="src" location="src"/>
> >> <property name="bin" location="bin"/>
> >> <property name="lib" location="lib"/>
> >> <property name="dist" location="dist"/>
> >> <property name="jarfile"
> >> location="${dist}/${ant.project.name <http://ant.project.name> <
> http://ant.project.name>}.jar"/>
> >> <property name="compile.debug" value="true"/>
> >>
> >> <fileset id="lib.jars" dir="${lib}">
> >> <include name="**/*.jar"/>
> >> </fileset>
> >>
> >> <path id="lib.path">
> >> <fileset refid="lib.jars"/>
> >> </path>
> >>
> >> <target name="compile" description="Compile code">
> >> <mkdir dir="${bin}"/>
> >> <mkdir dir="${lib}"/>
> >> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> >> classpathref="lib.path" debug="${compile.debug}">
> >> </javac>
> >> </target>
> >>
> >> <target name="jar" depends="compile" description="Build jar">
> >> <mkdir dir="${dist}"/>
> >> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
> >> <!-- Merge library jars into final jar file -->
> >> <zipgroupfileset refid="lib.jars"/>
> >> </jar>
> >> </target>
> >>
> >> <target name="run" depends="jar" description="Run jar file">
> >> <java jar="${jarfile}" fork="yes" failonerror="true"/>
> >> </target>
> >>
> >> <target name="clean" description="Remove build and dist
> >> directories">
> >> <delete dir="${bin}"/>
> >> <delete dir="${dist}"/>
> >> </target>
> >> </project>
> >>
> >> My fault. I forgot to tell you that compilerarg is an optioanl
> >> ant-contrib
> > task and if you want to use it you have to download the tasks from the
> > ant-contrib site: http://ant-contrib.sourceforge.net/, also an
> > installation
> > howto is available there. But instead try this
> > <javac .........>
> > <classpath>
> > <pathelement location="yourdir"/>
> > </classpath>
> > </javac>
> >
> > --
> > Regards, Petar!
> 
> 
> Thanks for your help so far but I still can't get it to work. Firstly
> I tried the additions to javac that you outlined above but I still got
> the class not found error. I then tried downloading the ant-contrib
> task. I have referenced this as outlined in the documentation and
> copied the jar file to my lib directory of my project. But I still get
> the could not create task error. Below is the code I added to my
> build.xml file. Is this correct?
> 
> <taskdef resource="net/sf/antcontrib/antcontrib.properties">
> <classpath>
> <pathelement location="./lib/ant-contrib.jar" />
> </classpath>
> </taskdef>
> 
> <compilerarg line="-classpath /System/Library/Java"/>
> 
> I suppose that the problem is that you may have not copied the 
ant-contrib-version.jar to your $ANT_HOME/lib folder. I am still curious 
that 
<javac srcdir="" destdir="">
<classpath>
<pathelement location="yourdir"/>
</claspath>
</javac>
doesn't work. Remember that you must ignore the package folders when 
pointing "yourdir". Point only the top-root forlder. 

-- 
Regards, Petar!

Re: Referencing External .class Files In Classpath

Posted by Stephen Morrison <s....@gmail.com>.
On 24 Aug 2005, at 16:20, Petar Tahchiev wrote:

> On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
>>
>>
>> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
>>
>>>>
>>>> Hi,
>>>>
>>>> I'm trying to build an Ant project that uses some Apple Cocoa 
>>>> classes.
>>>> These are stored as .class files and not as jars. They reside in a
>>>> completely different folder to my project. I can compile and run my
>>>> program by referencing these from the command line as follows:
>>>>
>>>> javac -classpath /System/Library/Java:. MyProgram.java
>>>>
>>>> java -classpath /System/Library/Java:. MyProgram
>>>>
>>>> Is there a way I can replicate this functionality using Ant and add
>>>> the
>>>> directory (System/Library/Java) to the classpath?
>>>>
>>>> I've tried solutions from the Ant documentation and the archives of
>>>> this list but haven't been able to get anything to work yet.
>>>>
>>>> Thanks in advance,
>>>> Steve.
>>>>
>>> You can always use the <compilerarg> task to pass arguments to the
>>> compiler,
>>> but rather why don't you try
>>> <path id="compile.cp">
>>> <fileset dir="YOUR DIR">
>>> <include name=""/>
>>> </fileset>
>>> </path>
>>> and later on call the classpath using <javac srcdir="" destdir=""
>>> classpathref="compile.cp"/>
>>> Or just use <classpath>
>>>
>>> --
>>> Regards, Petar!
>>
>> I tried the compilerarg task but got the error "Could not create the
>> task or type of task: conpilerarg". I declared this as <compilerarg
>> line="-classpath /System/Library/Java/"/>.
>>
>> I also tried the other methods you listed but I still got the class 
>> not
>> found error. My build.xml file was generated for my by my IDE Xcode
>> and currently looks like this. Sorry if I am missing something obvious
>> but I am totally new to Ant.
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <project name="MyGame" default="jar" basedir=".">
>> <property name="src" location="src"/>
>> <property name="bin" location="bin"/>
>> <property name="lib" location="lib"/>
>> <property name="dist" location="dist"/>
>> <property name="jarfile"
>> location="${dist}/${ant.project.name <http://ant.project.name>}.jar"/>
>> <property name="compile.debug" value="true"/>
>>
>> <fileset id="lib.jars" dir="${lib}">
>> <include name="**/*.jar"/>
>> </fileset>
>>
>> <path id="lib.path">
>> <fileset refid="lib.jars"/>
>> </path>
>>
>> <target name="compile" description="Compile code">
>> <mkdir dir="${bin}"/>
>> <mkdir dir="${lib}"/>
>> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
>> classpathref="lib.path" debug="${compile.debug}">
>> </javac>
>> </target>
>>
>> <target name="jar" depends="compile" description="Build jar">
>> <mkdir dir="${dist}"/>
>> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
>> <!-- Merge library jars into final jar file -->
>> <zipgroupfileset refid="lib.jars"/>
>> </jar>
>> </target>
>>
>> <target name="run" depends="jar" description="Run jar file">
>> <java jar="${jarfile}" fork="yes" failonerror="true"/>
>> </target>
>>
>> <target name="clean" description="Remove build and dist
>> directories">
>> <delete dir="${bin}"/>
>> <delete dir="${dist}"/>
>> </target>
>> </project>
>>
>> My fault. I forgot to tell you that compilerarg is an optioanl 
>> ant-contrib
> task and if you want to use it you have to download the tasks from the
> ant-contrib site: http://ant-contrib.sourceforge.net/, also an 
> installation
> howto is available there. But instead try this
> <javac .........>
> <classpath>
> <pathelement location="yourdir"/>
> </classpath>
> </javac>
>
> -- 
> Regards, Petar!


Thanks for your help so far but I still can't get it to work.  Firstly 
I tried the additions to javac that you outlined above but I still got 
the class not found error.  I then tried downloading the ant-contrib 
task.  I have referenced this as outlined in the documentation and 
copied the jar file to my lib directory of my project.  But I still get 
the could not create task error.  Below is the code I added to my 
build.xml file.  Is this correct?

	<taskdef resource="net/sf/antcontrib/antcontrib.properties">
		<classpath>
			<pathelement location="./lib/ant-contrib.jar" />
		</classpath>
	</taskdef>

	 <compilerarg line="-classpath /System/Library/Java"/>

Re: Referencing External .class Files In Classpath

Posted by Petar Tahchiev <pa...@gmail.com>.
On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> 
> 
> On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:
> 
> >>
> >> Hi,
> >>
> >> I'm trying to build an Ant project that uses some Apple Cocoa classes.
> >> These are stored as .class files and not as jars. They reside in a
> >> completely different folder to my project. I can compile and run my
> >> program by referencing these from the command line as follows:
> >>
> >> javac -classpath /System/Library/Java:. MyProgram.java
> >>
> >> java -classpath /System/Library/Java:. MyProgram
> >>
> >> Is there a way I can replicate this functionality using Ant and add
> >> the
> >> directory (System/Library/Java) to the classpath?
> >>
> >> I've tried solutions from the Ant documentation and the archives of
> >> this list but haven't been able to get anything to work yet.
> >>
> >> Thanks in advance,
> >> Steve.
> >>
> > You can always use the <compilerarg> task to pass arguments to the
> > compiler,
> > but rather why don't you try
> > <path id="compile.cp">
> > <fileset dir="YOUR DIR">
> > <include name=""/>
> > </fileset>
> > </path>
> > and later on call the classpath using <javac srcdir="" destdir=""
> > classpathref="compile.cp"/>
> > Or just use <classpath>
> >
> > --
> > Regards, Petar!
> 
> I tried the compilerarg task but got the error "Could not create the
> task or type of task: conpilerarg". I declared this as <compilerarg
> line="-classpath /System/Library/Java/"/>.
> 
> I also tried the other methods you listed but I still got the class not
> found error. My build.xml file was generated for my by my IDE Xcode
> and currently looks like this. Sorry if I am missing something obvious
> but I am totally new to Ant.
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <project name="MyGame" default="jar" basedir=".">
> <property name="src" location="src"/>
> <property name="bin" location="bin"/>
> <property name="lib" location="lib"/>
> <property name="dist" location="dist"/>
> <property name="jarfile"
> location="${dist}/${ant.project.name <http://ant.project.name>}.jar"/>
> <property name="compile.debug" value="true"/>
> 
> <fileset id="lib.jars" dir="${lib}">
> <include name="**/*.jar"/>
> </fileset>
> 
> <path id="lib.path">
> <fileset refid="lib.jars"/>
> </path>
> 
> <target name="compile" description="Compile code">
> <mkdir dir="${bin}"/>
> <mkdir dir="${lib}"/>
> <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
> classpathref="lib.path" debug="${compile.debug}">
> </javac>
> </target>
> 
> <target name="jar" depends="compile" description="Build jar">
> <mkdir dir="${dist}"/>
> <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
> <!-- Merge library jars into final jar file -->
> <zipgroupfileset refid="lib.jars"/>
> </jar>
> </target>
> 
> <target name="run" depends="jar" description="Run jar file">
> <java jar="${jarfile}" fork="yes" failonerror="true"/>
> </target>
> 
> <target name="clean" description="Remove build and dist
> directories">
> <delete dir="${bin}"/>
> <delete dir="${dist}"/>
> </target>
> </project>
> 
> My fault. I forgot to tell you that compilerarg is an optioanl ant-contrib 
task and if you want to use it you have to download the tasks from the 
ant-contrib site: http://ant-contrib.sourceforge.net/, also an installation 
howto is available there. But instead try this
<javac .........>
<classpath>
<pathelement location="yourdir"/>
</classpath>
</javac>

-- 
Regards, Petar!

Re: Referencing External .class Files In Classpath

Posted by Stephen Morrison <s....@gmail.com>.
On 24 Aug 2005, at 15:03, Petar Tahchiev wrote:

>>
>> Hi,
>>
>> I'm trying to build an Ant project that uses some Apple Cocoa classes.
>> These are stored as .class files and not as jars. They reside in a
>> completely different folder to my project. I can compile and run my
>> program by referencing these from the command line as follows:
>>
>> javac -classpath /System/Library/Java:. MyProgram.java
>>
>> java -classpath /System/Library/Java:. MyProgram
>>
>> Is there a way I can replicate this functionality using Ant and add 
>> the
>> directory (System/Library/Java) to the classpath?
>>
>> I've tried solutions from the Ant documentation and the archives of
>> this list but haven't been able to get anything to work yet.
>>
>> Thanks in advance,
>> Steve.
>>
> You can always use the <compilerarg> task to pass arguments to the 
> compiler,
> but rather why don't you try
> <path id="compile.cp">
> <fileset dir="YOUR DIR">
> <include name=""/>
> </fileset>
> </path>
> and later on call the classpath using <javac srcdir="" destdir=""
> classpathref="compile.cp"/>
> Or just use <classpath>
>
> -- 
> Regards, Petar!

I tried the compilerarg task but got the error "Could not create the 
task or type of task: conpilerarg".  I declared this as <compilerarg 
line="-classpath /System/Library/Java/"/>.

I also tried the other methods you listed but I still got the class not 
found error.  My build.xml file was generated for my by my IDE Xcode 
and currently looks like this.  Sorry if I am missing something obvious 
but I am totally new to Ant.

<?xml version="1.0" encoding="UTF-8"?>
<project name="MyGame" default="jar" basedir=".">
     <property name="src" location="src"/>
     <property name="bin" location="bin"/>
     <property name="lib" location="lib"/>
     <property name="dist" location="dist"/>
     <property name="jarfile" 
location="${dist}/${ant.project.name}.jar"/>
     <property name="compile.debug" value="true"/>

     <fileset id="lib.jars" dir="${lib}">
         <include name="**/*.jar"/>
     </fileset>

     <path id="lib.path">
         <fileset refid="lib.jars"/>
     </path>

     <target name="compile" description="Compile code">
         <mkdir dir="${bin}"/>
         <mkdir dir="${lib}"/>
         <javac srcdir="${src}" destdir="${bin}" includeAntRuntime="no"
                classpathref="lib.path" debug="${compile.debug}">
         </javac>
     </target>

     <target name="jar" depends="compile" description="Build jar">
         <mkdir dir="${dist}"/>
         <jar jarfile="${jarfile}" basedir="${bin}" manifest="Manifest">
             <!-- Merge library jars into final jar file -->
             <zipgroupfileset refid="lib.jars"/>
         </jar>
     </target>

     <target name="run" depends="jar" description="Run jar file">
         <java jar="${jarfile}" fork="yes" failonerror="true"/>
     </target>

     <target name="clean" description="Remove build and dist 
directories">
         <delete dir="${bin}"/>
         <delete dir="${dist}"/>
     </target>
</project>

Re: Referencing External .class Files In Classpath

Posted by Petar Tahchiev <pa...@gmail.com>.
On 24/08/05, Stephen Morrison <s....@gmail.com> wrote:
> 
> Hi,
> 
> I'm trying to build an Ant project that uses some Apple Cocoa classes.
> These are stored as .class files and not as jars. They reside in a
> completely different folder to my project. I can compile and run my
> program by referencing these from the command line as follows:
> 
> javac -classpath /System/Library/Java:. MyProgram.java
> 
> java -classpath /System/Library/Java:. MyProgram
> 
> Is there a way I can replicate this functionality using Ant and add the
> directory (System/Library/Java) to the classpath?
> 
> I've tried solutions from the Ant documentation and the archives of
> this list but haven't been able to get anything to work yet.
> 
> Thanks in advance,
> Steve.
> 
You can always use the <compilerarg> task to pass arguments to the compiler, 
but rather why don't you try 
<path id="compile.cp">
<fileset dir="YOUR DIR">
<include name=""/>
</fileset>
</path>
and later on call the classpath using <javac srcdir="" destdir="" 
classpathref="compile.cp"/>
Or just use <classpath>

-- 
Regards, Petar!